คุณจะปิดการใช้งานการซูมวิวพอร์ตบน Mobile Safari ได้อย่างไร


393

ฉันได้ลองทั้งสามอย่างนี้แล้วไม่เกิดประโยชน์:

<meta name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;” />

<meta name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=false;” />

<meta name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;” />

แต่ละค่าแตกต่างกันที่ฉันพบโดยการค้นหาของ Google หรือการค้นหา SO แต่ไม่มีค่า ' user-scalable = X ' ที่ใช้งานได้

ฉันยังพยายามจุลภาคคั่นค่าแทนเครื่องหมายอัฒภาคไม่มีโชค จากนั้นฉันพยายามเพียง แต่มีuser-scalableค่าอยู่ แต่ก็ยังไม่มีโชค


UPDATE

รับสิ่งนี้จากเว็บไซต์ของ Apple และใช้งานได้:

<meta name="viewport" content="width=device-width, user-scalable=no" />

ปรากฎว่าปัญหาคือราคาที่ไม่ได้มาตรฐานเพราะฉันได้คัดลอกเมตาแท็กจากเว็บไซต์ที่ใช้พวกเขาอ๊ะ


6
หากคุณกำลังสร้างเกมแสดงว่าการควบคุมการซูมนั้นถูกต้อง อย่างไรก็ตามในเกือบทุกกรณีมันควรจะเป็นกำลังใจอย่างยิ่ง น่าเสียดายที่มันกลายเป็นมาตรฐานการปฏิบัติสำหรับนักพัฒนามือถือจำนวนมาก หากผู้ใช้ต้องการซูมเข้าเพื่อให้สามารถอ่านข้อความได้ง่ายขึ้น ฯลฯ ทำให้ไม่สามารถทำได้ดี
2268788

72
เรากำลังปิดใช้งานการซูมบนแอปพลิเคชันบนเว็บมือถือ คุณไม่สามารถซูมเข้าแอพ Native iOS และไม่จำเป็นต้องใช้ในเว็บแอปพลิเคชันของเรา หากไซต์หรือแอปของคุณเหมาะกับมือถือผู้ใช้ของคุณจะไม่จำเป็นต้องซูม มักจะใช้กรณีสำหรับปิดใช้งานการซูม ไม่จำเป็นต้องเป็นอย่างใดอย่างหนึ่งเสมอไป
Bradley Flood

10
ใช่ฉันไม่ได้ดังต่อไปนี้สายของตรรกะที่ปิดการใช้งานซูมบนเว็บไซต์ที่ดีที่สุดมือถือเป็นสิ่งที่ไม่ดี สิ่งที่แย่กว่านั้นคือการมีวิวพอร์ตโดยไม่ตั้งใจเลื่อนไปมาเนื่องจากหน้าจอยกแพนโดยไม่ตั้งใจและอินพุตซูมบนไซต์ที่ไม่ต้องการให้คุณซูม หากผู้ใช้ของคุณต้องการซูมเข้าสู่เนื้อหาบนไซต์ที่ปรับให้เหมาะสมกับมือถือของคุณปัญหาก็คือการออกแบบไม่ใช่การย่อ / ขยาย
Nathan Hornby

3
@NathanHornby: ปัญหาของการปิดใช้งานการซูมคือการขาดความเคารพในความพึงพอใจของผู้ใช้ ผู้ใช้ที่ต่างกันชอบขนาดตัวอักษรที่ต่างกันผู้ชมอายุน้อยที่มีสายตาดีอาจต้องการดูเนื้อหาเพิ่มเติมในขณะที่ผู้ชมที่มีสายตาไม่ดีจะไม่สามารถใช้สิ่งที่ไม่มีข้อความขนาดยักษ์ คนอื่นมี Parkinsons แต่ก็ยังมีสายตาที่ดีดังนั้นพวกเขาจึงชอบปุ่มขนาดใหญ่พิเศษ แต่ไม่ได้รับประโยชน์จากข้อความขนาดใหญ่โดยทั่วไป
Lie Ryan

4
@NathanHornby ไม่ได้หมายความว่าผู้ออกแบบทำสิ่งที่ผิดไป มันหมายถึงผู้ใช้ไม่ว่าจะด้วยเหตุผลใดก็ตามต้องการซูมเข้า Pinch-zoom เป็นคุณสมบัติมาตรฐานของโทรศัพท์หน้าจอสัมผัสทุกรุ่น ผู้ใช้ที่เป็นเจ้าของโทรศัพท์ดังกล่าวรู้วิธีใช้งาน ฉันรู้ว่ามันเป็นคำถามเก่า แต่ฉันก็ยังรู้สึกหงุดหงิดอยู่ตลอดเวลาโดยนักพัฒนาความรู้ทุกคนที่ยืนยันในการทำลายการทำงานของโทรศัพท์ของฉันเพราะพวกเขาคิดว่ามันทำให้การออกแบบของพวกเขาดูดีขึ้น
user1751825

คำตอบ:


718

รหัสของคุณกำลังแสดงเครื่องหมายคำพูดคู่แอตทริบิวต์เป็นเครื่องหมายคำพูดคู่แฟนซี หากคำพูดแฟนซีมีอยู่ในซอร์สโค้ดที่แท้จริงของคุณฉันจะเดาว่าเป็นปัญหา

สิ่งนี้ใช้ได้กับฉันใน Mobile Safari ใน iOS 4.2

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

12
มันเป็นคำพูดแฟนซีฉันได้คัดลอกแท็กจากเว็บไซต์โดยไม่สังเกตเห็นขอบคุณที่ชี้ให้เห็น!
MetaGuru

5
บางทีนี่อาจเป็นหางยาวที่นี่ แต่มันอาจคุ้มค่าที่จะชี้ให้เห็นว่าสิ่งนี้จำเป็นต้องใช้ที่หน้า "ระดับบนสุด" หากคุณมีเมตาแท็กนี้นำไปใช้กับ iframe มันจะไม่ทำงานจนกว่าเมตาแท็กจะถูกนำไปใช้กับหน้าบนสุด
Founddrama

2
ทำไมทุกคนเคยสร้างซอฟต์แวร์ชิ้นหนึ่งที่สร้างคำพูดที่แปลกใหม่เกินกว่าฉัน
Traubenfuchs

3
@ Traubenfuchs: วิชาการพิมพ์
BoltClock

3
นี่เป็นคำตอบที่ค่อนข้างเก่าและเกิดปัญหาขึ้นฉันได้อ่านว่าหากคุณตั้งค่าผู้ใช้ที่ปรับขนาดได้เป็นไม่สิ่งนี้จะทำให้เกิดปัญหาการเข้าถึงข้อมูล ในฐานะของ iOS 10 มันใช้งานได้ดีทำให้ผู้ใช้สามารถซูมได้หากต้องการ แต่ไม่ซูมในกล่องใส่อย่างอื่น ไม่จำเป็นต้องตั้งค่าแบบอักษรขนาดใหญ่
David

161

สำหรับผู้ที่กำลังมองหาโซลูชัน iOS 10 user-scaleable=noถูกปิดการใช้งานใน Safari สำหรับ iOS 10 เหตุผลคือ Apple กำลังพยายามปรับปรุงการช่วยสำหรับการเข้าถึงโดยอนุญาตให้ผู้ใช้ซูมบนเว็บเพจ

จากบันทึกประจำรุ่น :

เพื่อปรับปรุงการช่วยสำหรับการเข้าถึงเว็บไซต์ใน Safari ผู้ใช้สามารถกดเพื่อซูมได้แม้ในขณะที่เว็บไซต์ตั้งค่าผู้ใช้ที่ปรับขนาดได้ = ไม่มีในวิวพอร์ต

เท่าที่ฉันเข้าใจเราก็โชคไม่ดี


6
ช่างเป็นการตัดสินใจที่แย่มากของ Apple การใช้สปินเนอร์ด้วยปุ่ม "-" และ "+" เพื่อลด / เพิ่มจำนวนตอนนี้จะซูมเข้าและออกหน้าบน iOS Safari ซ้ำ ๆ การกดถูกตีความเป็นการแตะสองครั้งเพื่อซูมโดยไม่มีวิธีปิดใช้งาน iOS Chrome ทำงานได้อย่างสมบูรณ์แบบ ที่น่าผิดหวัง
พอล

5
แม้ว่าฉันจะตัดสินใจไม่ได้ แต่ฉันมีความสุขมากกับแอปเปิ้ลในฐานะผู้ใช้เพราะฉันต้องการบังคับให้ฟีเจอร์นี้ในเว็บไซต์จำนวนมากที่ใช้องค์ประกอบเล็ก ๆ อยู่ภายใน
Bishoy Hanna

10
โลกกำลังจะตกนรก
ชายร่างเล็กตัวเล็ก

2
โอ้ jeez ใครจะเดาได้บ้าง อีกหนึ่งทางเลือกที่ไร้สาระที่ทำโดย Apple
Emil Pedersen

3
ปล่อยให้ Apple บังคับให้ "ฟีเจอร์" การเข้าถึงสำหรับทุกคนแทนที่จะแค่เพิ่มตัวเลือกในการตั้งค่าการช่วยสำหรับการเข้าถึง ...
Lennholm

98

@mattis ถูกต้องที่ iOS 10 Safari จะไม่อนุญาตให้คุณปิดใช้งานการบีบนิ้วเพื่อซูมด้วยแอตทริบิวต์ที่ปรับขนาดได้โดยผู้ใช้ อย่างไรก็ตามฉันได้รับมันเพื่อปิดการใช้งาน PreventDefault ในเหตุการณ์ 'gesturestart' ฉันยืนยันสิ่งนี้บน Safari ใน iOS 10.0.2 แล้วเท่านั้น

document.addEventListener('gesturestart', function (e) {
    e.preventDefault();
});

8
ใน iOS 10 ฉันพบว่ามันใช้งานได้ แต่ถ้าคุณเลื่อนหน้าแล้วบีบนิ้วซูมในขณะที่ยังเลื่อนอยู่มันจะช่วยให้ซูมได้ จากนั้นคุณพบว่าตัวเองติดอยู่ที่ระดับการซูมใหม่จนกว่าคุณจะเลื่อนอีกครั้ง ดังนั้นนี่จึงไม่ใช่วิธีการแก้ปัญหาที่ดีเว้นแต่ร่างกายของคุณจะไม่สามารถเลื่อนได้ :(
Rand Scullard

1
หนึ่งข้อแม้: ผู้ใช้ยังคงสามารถแตะหน้าจอสองครั้งซึ่งจะ / สามารถซูมและไม่ถูกจับโดยสิ่งนี้
สตีเฟ่น

1
บางครั้งยังช่วยให้การซูมโดยการแตะที่หน้าจอสองครั้ง :(
Jarzka

4
"แตะสองครั้ง" เทียบเท่าgesturestartคืออะไร? DblClick ?
lowtechsun

3
หมายเหตุอื่น ๆ หากคุณต้องการปิดการใช้งานการแตะสองครั้งของการซูม Mobile Safari ยังรองรับ 'touch-action: manipulation' (อยู่ภายใต้ 'การสนับสนุนขั้นพื้นฐาน' ซึ่งปิดการใช้งานกิจกรรมแตะสองครั้งเอกสารที่นี่: developer.mozilla.org/en-US/docs/Web/CSS/touch-action
jeremypress

15

สำหรับ iphones ซาฟารีจนถึง iOS 10 "วิวพอร์ต" ไม่ใช่วิธีแก้ปัญหาฉันไม่ชอบวิธีนี้ แต่ฉันใช้รหัสจาวาสคริปต์แล้วและช่วยฉันด้วย

 document.addEventListener('touchmove', function(event) {
    event = event.originalEvent || event;
    if(event.scale > 1) {
      event.preventDefault();
    }
  }, false);

3
มันควรจะเป็นevent.scale !== 1
aleclarson

@aleclarson event.scale> 1 รวมเงื่อนไข event.scale! == 1
Arthur Tsidkilov

@ alclarson เพื่อป้องกันการซูมบนมือถือ Safari มันก็เพียงพอแล้วฉันเขียนว่าฉันไม่ชอบวิธีนี้โดยปกติจะต้องใช้ viewport แต่บน IOS iphone 6 ขึ้นไปมันไม่ทำงาน (ฉันคิดว่าเหตุการณ์ของคุณขนาด ! == 1 ควรมีความถูกต้องมากขึ้น แต่ทั้งหมดนี้ไม่ถูกต้องเป็นประเภทของการแฮ็ค)
Arthur Tsidkilov

@aleclarson ดูเหมือนว่าใช้! == แบ่งเบราว์เซอร์ดั้งเดิมใน Android 4.4; event.scale ไม่ได้ถูกกำหนด
James Pizzurro

3
@JamesPizzurro ใช่คุณสามารถใช้event.scale !== undefined && event.scale !== 1
aleclarson

11
user-scalable=0

สิ่งนี้ไม่ทำงานบน iOS 10 อีกต่อไป Apple ลบคุณลักษณะดังกล่าว

ไม่มีทางที่คุณจะสามารถปิดการใช้งานเว็บไซต์ซูมบน iOS ได้ในตอนนี้เว้นแต่คุณจะสร้างแอพแพลตฟอร์มขั้นต้น


คนเกียจคร้าน ... คิดว่าทำไมพวกเขาถึงลบมันออก?
Stephen Tetreault

3
@smt พวกเขาไม่ต้องการให้ประสบการณ์บนเว็บแข่งขันกับประสบการณ์ของแอพใน app store
Marvin Danig

2
@marvindanig ใช่ ... เนื่องจากพวกเขาใช้ค่าธรรมเนียม 99 $ ในการผลิตแอพที่สามารถสร้างแอปพลิเคชันหน้าเว็บที่เข้าถึงได้ง่ายขึ้นสำหรับทุกแพลตฟอร์ม นอกจากนี้ของ Apple ไม่ชอบ "ประสบการณ์การใช้เว็บ" ถ้ามันหมายความว่าผู้ใช้ + devs สามารถหลีกเลี่ยงสวนที่มีกำแพง มันคือทั้งหมดที่เกี่ยวกับพลังและเงินของ Apple :(
humanityANDpeace

จริงๆแล้วมันเป็นไปได้ที่จะทำงานบน iOS เวอร์ชันที่ใหม่กว่านี้ ดูคำตอบของฉัน: stackoverflow.com/a/62165035
Feross

7

ลองเพิ่มสิ่งต่อไปนี้ในแท็กหัวของคุณ:

<meta name="viewport" content="width=device-width, initial-scale=1.0, 
minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">

นอกจากนี้

<meta name="HandheldFriendly" content="true">

ในที่สุดไม่ว่าจะเป็น style-attribute หรือในไฟล์ css ของคุณให้เพิ่มข้อความต่อไปนี้สำหรับเบราว์เซอร์ที่ใช้ webkit:

html {
    -webkit-text-size-adjust: none
}

ไม่ทำงานบน iOS เวอร์ชันที่ใหม่กว่า
Feross

7

ฉันได้มันทำงานใน iOS 12 ด้วยรหัสต่อไปนี้:

if (/iPad|iPhone|iPod/.test(navigator.userAgent)) {
  window.document.addEventListener('touchmove', e => {
    if(e.scale !== 1) {
      e.preventDefault();
    }
  }, {passive: false});
}

ด้วยคำสั่งแรกถ้าฉันมั่นใจว่ามันจะทำงานเฉพาะในสภาพแวดล้อม iOS (ถ้ามันดำเนินการใน Android พฤติกรรมการเลื่อนจะเสีย) นอกจากนี้ทราบชุดตัวเลือกในการpassivefalse


ไม่ทำงานบน iOS 12.3.1 ของฉันนี่คือลิงค์ทดสอบ: https://output.jsbin.com/liqiraj
Jess

4

ทำงานได้ดีใน IOS 10.3.2

    document.addEventListener('touchmove', function(event) {
        event = event.originalEvent || event;
        if (event.scale !== 1) {
           event.preventDefault();
        }
    }, false);

ขอบคุณ @arthur และ @aleclarson


iOS 13 เปลี่ยน false เป็น {passive: false}
wayofthefuture

4

ฉันจัดการเพื่อหยุดพฤติกรรมนี้โดยเพิ่มสิ่งต่อไปนี้ในส่วนหัวของ HTML ใช้งานได้บนอุปกรณ์พกพาเนื่องจากเบราว์เซอร์เดสก์ท็อปรองรับการซูมเมื่อใช้ล้อเลื่อนของเมาส์ ไม่ใช่เรื่องใหญ่สำหรับเบราว์เซอร์เดสก์ท็อป แต่เป็นสิ่งสำคัญที่ต้องคำนึงถึง

<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />

และกฎต่อไปนี้กับสไตล์ชีท CSS

html {
	-webkit-text-size-adjust: none;
	touch-action: manipulation;
}


ไม่ทำงานบน iOS เวอร์ชันที่ใหม่กว่า
Feross

3

บางครั้งคำสั่งอื่น ๆ ในcontentแท็กอาจทำให้การเดา / การแก้ปัญหาที่ดีที่สุดของ Apple ในการจัดหน้าของคุณเป็นสิ่งที่คุณต้องปิดใช้งานการซูมด้วยนิ้ว

<meta name="viewport" content="user-scalable=no" />

ไม่ทำงานบน iOS เวอร์ชันที่ใหม่กว่า
Feross

2

ใน Safari 9.0 ขึ้นไปคุณสามารถใช้การย่อขนาดให้พอดีกับเมตาแท็กวิวพอร์ตดังที่แสดงด้านล่าง

<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">

ไม่ทำงานบน iOS เวอร์ชันที่ใหม่กว่า
Feross

0

ฉันโง่มี div wrapper ซึ่งมีความกว้างวัดเป็นพิกเซล เบราว์เซอร์อื่น ๆ ดูเหมือนจะฉลาดพอที่จะรับมือกับสิ่งนี้ เมื่อฉันแปลงความกว้างเป็นค่าเปอร์เซ็นต์มันก็ใช้ได้ดีบน Safari mobile เช่นกัน น่ารำคาญมาก

.page{width: 960px;}

ถึง

.page{width:93.75%}

<div id="divPage" class="page">
</div>

0

การใช้touch-actionคุณสมบัติCSS เป็นโซลูชันที่หรูหราที่สุด ทดสอบกับ iOS 13.5

หากต้องการปิดใช้งานท่าทางการย่อ / ขยายและแตะสองครั้งเพื่อซูม:

body {
  touch-action: pan-x pan-y;
}

หากแอปของคุณไม่จำเป็นต้องทำการเลื่อนเช่นเลื่อนให้ใช้สิ่งนี้:

body {
  touch-action: none;
}

-3

เพื่อให้สอดคล้องกับข้อกำหนดการช่วยสำหรับการเข้าถึง WAI WCAG 2.0 AA คุณจะต้องไม่ปิดใช้งานการซูมด้วยนิ้ว (WCAG 2.0: SC 1.4.4 ปรับขนาดระดับข้อความ AA) คุณสามารถอ่านเพิ่มเติมได้ที่นี่: ความสามารถในการเข้าถึงบนมือถือ: WCAG 2.0 และแนวทาง W3C / WAI อื่น ๆ นำไปใช้กับมือถือได้อย่างไร 2.2 ซูม / ขยาย


13
นี่ไม่ใช่คำตอบ .. และลูกค้าหลายคนยังขอบล็อคการซูม .. ดังนั้นฉันไม่สามารถใช้มันเป็นกฎทั่วไป

9
การซูมสำหรับการเข้าถึงไม่ใช่ความรับผิดชอบของหน้า (ไม่ใช่แอพใด ๆ สำหรับเรื่องนั้น) เป็นความรับผิดชอบของระบบปฏิบัติการในการจัดหาเครื่องมือการซูมที่เข้าถึงได้ ทุกวันนี้ระบบปฏิบัติการมีคุณสมบัติดังกล่าวซึ่งใช้เป็นการซูมหน้าจอและไม่ควรรบกวนการซูมของหน้าเว็บเพราะไม่ได้มีไว้สำหรับการเข้าถึง
Bruno Finger

4
มีกรณีการใช้งานที่ถูกต้องสำหรับสิ่งเช่นนี้เสมอ ด้วยเหตุผลบางอย่างบทความเกี่ยวกับเว็บทั้งหมดดูเหมือนว่าจะถือว่าเว็บเป็นเพียงการสร้างบล็อกเท่านั้น เช่นเดียวกับกรณีการใช้งานที่ถูกต้องสำหรับ JavaScript eval()ดังนั้นจะมีการปิดใช้งานการซูม ฉันใช้มันสำหรับเว็บแอพที่ใช้ร่วมกับเครื่องสแกนบลูทู ธ เพื่อป้องกันการซูมหน้าเมื่อสแกนบาร์โค้ด
user128216

3
ฉันเห็นด้วยกับจุดประสงค์ของคำแนะนำการช่วยสำหรับการเข้าถึงอย่างสมบูรณ์ แต่ก็ไม่มีคำถามว่ามีบางครั้งที่การซูมไม่ต้องการหรือจำเป็นหรืออาจทำให้ประสบการณ์การใช้งานของผู้ใช้หยุดชะงัก นอกจากนี้คุณก็รู้ว่าลูกค้า
Chuck Le Butt

2
ฉันจะบอกว่าในแอป html / javascript หลักเกณฑ์เหล่านั้นไม่ได้ใช้ ท้ายที่สุดแล้วแอพที่ใช้ในตัวเครื่องจะช่วยให้คุณซูมเข้าและออกได้หรือไม่?
Jörgen Sigvardsson

-5

อันนี้ควรทำงานกับ iphone ฯลฯ

<meta name="viewport" content="width=device-width, initial-scale=1 initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.