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가치 가있는 것만 시도했지만 여전히 운이 없습니다.


최신 정보

Apple 사이트에서 얻었고 작동합니다.

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

메타 태그를 사용하고있는 웹 사이트에서 메타 태그를 복사했기 때문에 문제는 비표준 따옴표였습니다.


6
게임을하는 경우 확대 / 축소를 제어하는 ​​것이 가능합니다. 그러나 다른 모든 경우에는 권장하지 않습니다. 불행히도 많은 모바일 개발자들에게는 표준 관행이되었습니다. 사용자가 텍스트를 더 쉽게 읽을 수 있도록 확대하려는 경우에는 그렇게하지 못하게하는 것이 그리 좋지 않습니다.
user2268788

72
모바일 웹 기반 애플리케이션에서 확대 / 축소를 사용 중지했습니다. 기본 iOS 앱은 확대 할 수 없으며 웹 애플리케이션에서는 필요하지 않습니다. 사이트 나 앱이 모바일에 최적화 된 경우 사용자가 확대 / 축소 할 필요가 없습니다. 줌을 사용하지 않도록 설정하는 사용 사례는 항상 있습니다. 항상 한 가지 방법 일 필요는 없습니다.
Bradley Flood

10
하지만 모바일 최적화 사이트에서 확대 / 축소를 사용 중지하는 것은 나쁜 일 이라는 논리를 따르지 않습니다 . 더 나쁜 것은 화면이 실수로 확대 / 축소 할 필요가없는 사이트에서 실수로 이동 및 확대 / 축소 입력을 선택하기 때문에 실수로 뷰포트가 이동하는 것입니다. 현실적으로 사용자가 모바일 최적화 사이트의 컨텐츠를 확대해야하는 경우 문제는 확대 / 축소 부족이 아니라 디자인입니다.
Nathan Hornby

3
@NathanHornby : 줌을 비활성화하는 문제는 사용자의 선호도에 대한 존중이 부족하다는 것입니다. 사용자마다 다른 텍스트 크기를 선호하고 시력이 좋은 청중은 더 ​​많은 콘텐츠를 보는 것을 선호 할 수 있지만 시력이 좋지 않은 청중은 큰 텍스트가없는 것을 사용할 수 없습니다. 다른 사람들은 파킨슨 병을 앓고 있지만 시력이 좋으므로 큰 버튼을 선호하지만 일반적으로 큰 텍스트의 이점은 없습니다.
Lie Ryan

4
@NathanHornby 디자이너가 반드시 무언가 잘못한 것은 아닙니다. 그것은 사용자가 어떤 이유로 든 확대를 원한다는 것을 의미합니다. 핀치 줌은 모든 터치 스크린 폰의 표준 기능입니다. 이러한 전화를 소유 한 모든 사용자는 사용 방법을 알고 있습니다. 나는 그것이 오래된 질문이라는 것을 알고 있지만, 내 휴대 전화의 기능이 디자인을 더 좋아 보이게 만들기 때문에 기능을 깨뜨릴 것을 요구하는 모든 개발자들에 의해 끊임없이 좌절하고 있습니다.
user1751825

답변:


718

귀하의 코드는 속성 큰 따옴표를 멋진 큰 따옴표로 표시합니다. 실제 인용 부호에 인용 부호가 있으면 이것이 문제라고 생각할 것입니다.

이것은 iOS 4.2의 Mobile Safari에서 작동합니다.

<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 2016 년

3
@Traubenfuchs : 타이포그래피.
BoltClock

3
이것은 다소 오래된 대답이며 사용자 확장 가능을 아니오로 설정하면 접근성 문제가 발생한다는 것을 읽은 문제에 왔습니다. iOS 10부터는 잘 작동하므로 원하는 경우 확대 / 축소 할 수 있지만 입력 상자는 확대 / 축소 할 수 없습니다. 큰 글꼴 크기를 설정할 필요가 없습니다.
David

161

iOS 10 솔루션을 찾는 사용자의 경우 iOS 10 용 user-scaleable=noSafari에서 사용할 수 없습니다. 그 이유는 Apple이 사람들이 웹 페이지를 확대 할 수있게하여 접근성을 개선하려고하기 때문입니다.

출시 노트에서 :

Safari에서 웹 사이트에 대한 접근성을 향상시키기 위해 웹 사이트가 뷰포트에서 user-scalable = no로 설정되어 있어도 확대 / 축소가 가능합니다.

내가 아는 한, 운이 나쁘다.


6
애플이 끔찍한 결정을 내 렸습니다. "-"및 "+"버튼이있는 스피너를 사용하여 숫자를 감소 / 증가 시키면 iOS Safari에서 페이지가 반복적으로 확대 및 축소됩니다. 프레스는 두 번 탭하여 확대 / 축소 할 수있는 방법으로 해석되지 않습니다. iOS Chrome이 완벽하게 작동합니다. 실망.
Paul

5
나는 그 결정을 망 쳤지 만 내부에서 작은 요소를 사용하는 많은 웹 사이트 에서이 기능을 강요하기를 원했기 때문에 애플 사용자에게 정말 행복합니다.
Bishoy Hanna

10
세상은 지옥에 갈 것이다
작은 작은 사람

2
오, 누가 추측 했을까? 애플이 만든 또 다른 말도 안되는 선택
에밀 페데르센

3
손쉬운 사용 설정 에서 옵션을 추가하는 대신 모든 사람에게 손쉬운 손쉬운 사용 기능을 제공하도록 Apple에 남겨 두십시오 .
Lennholm

98

@mattis는 iOS 10 Safari에서 사용자 조정 가능 속성으로 확대 / 축소를 사용하지 않도록 설정할 수 없다는 것이 맞습니다. 그러나 'gesturestart'이벤트에서 preventDefault를 사용하지 않도록 설정했습니다. iOS 10.0.2의 Safari에서만 이것을 확인했습니다.

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

8
iOS 10에서 이것이 효과가 있음을 발견했지만 여전히 스크롤하면서 페이지를 스크롤 한 다음 핀치 줌을 사용하면 확대 / 축소가 허용됩니다. 그런 다음 다시 스크롤 할 때까지 새로운 확대 / 축소 수준에 멈춰 있습니다. 따라서 페이지 본문이 스크롤 가능하지 않으면 좋은 솔루션처럼 보이지 않습니다. :(
랜드 스컬 라드

1
한 가지주의 사항 : 사용자는 여전히 확대 / 축소 할 수있는 화면을 두 번 탭 할 수 있습니다.
Stephen

1
여전히 화면을 두 번 탭하여 확대 / 축소 할 수 있습니다. :(
Jarzka

4
"더블 탭"은 무엇입니까 gesturestart? dblclick ?
lowtechsun

3
줌의 이중 탭 측면을 비활성화하려는 경우 다른 참고 사항입니다. 모바일 사파리는 '터치 액션 : 조작'(더블 탭 이벤트를 비활성화하는 '기본 지원'에 해당)도 지원합니다. 문서 : developer.mozilla.org/en-US/docs/Web/CSS/touch-action
jeremypress

15

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

@aleclarson 모바일 Safari에서 확대를 방지하는 것으로 충분합니다. 일반적으로 뷰포트를 사용해야하기 때문에이 방법이 마음에 들지 않지만 IOS iPhone 6 이상에서는 작동하지 않습니다 (이벤트가 생각됩니다. ! == 1이 더 정확해야하지만,이 모든 정확하지, 그것은 종류) 해킹입니다
아서 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 그들은 웹 경험이 앱 스토어의 앱 경험과 경쟁하기를 원하지 않습니다.
Marvin Danig

2
@marvindanig yes ... 모든 플랫폼에서보다 쉽게 ​​액세스 할 수있는 웹 페이지 응용 프로그램을 만들 수있는 앱을 만드는 데 99 $의 요금이 부과되기 때문입니다. 사용자와 개발자가 벽으로 둘러싸인 정원을 피할 수 있다면 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">

마지막으로 스타일 속성 또는 CSS 파일로 웹킷 기반 브라우저에 다음 텍스트를 추가하십시오.

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});
}

첫 번째 if 문을 사용하면 iOS 환경에서만 실행되도록합니다 (Android에서 실행하면 스크롤 동작이 중단됩니다). 또한 passive옵션이로 설정되어 있는지 확인하십시오 false.


내 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


에 아이폰 OS (13) 변경 거짓 {수동 : 거짓}
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를 가지고있었습니다. 다른 브라우저는 이것을 다루기에 충분히 지능적인 것처럼 보였습니다. 너비를 백분율 값으로 변환하면 Safari 모바일에서도 잘 작동했습니다. 매우 성가신.

.page{width: 960px;}

.page{width:93.75%}

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

0

CSS touch-action속성을 사용하는 것이 가장 우아한 솔루션입니다. 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
접근성 확대 / 축소는 페이지의 책임이 아닙니다. 액세스 가능한 줌 도구를 제공하는 것은 운영 체제의 책임입니다. 요즘 모든 OS는 이러한 기능을 제공합니다.이 기능은 화면 확대 / 축소 로 적용되며 , 페이지 확대 / 축소 자체를 방해하지 않아야합니다.
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.