2011-06-26 27 views
56

Tôi đã có mã này:Ngăn chặn iPhone từ phóng to ở trên 'select` trong ứng dụng web

<select> 
    <option value="c">Klassen</option> 
    <option value="t">Docenten</option> 
    <option value="r">Lokalen</option> 
    <option value="s">Leerlingen</option> 
</select> 

Chạy trong toàn màn hình ứng dụng web trên iPhone.

Khi chọn thứ gì đó từ danh sách này, iPhone sẽ phóng to trên select -kết nối. Và không thu nhỏ lại sau khi chọn thứ gì đó.

Làm cách nào để ngăn chặn điều này? Hoặc thu nhỏ lại?

Trả lời

76

Nó có lẽ là vì trình duyệt đang cố gắng để phóng to khu vực này kể từ cỡ chữ nhỏ hơn ngưỡng này, điều này thường xảy ra trong iphone.

Việc gán thuộc tính thẻ meta "user-scalable = no" sẽ hạn chế người dùng thu phóng ở nơi khác. Vì vấn đề là chỉ với , hãy chọn phần tử duy nhất, hãy thử sử dụng phần sau trong css của bạn, bản hack này ban đầu được sử dụng cho điện thoại di động jquery.

HTML:

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

CSS:

select{ 
font-size: 50px; 
} 

src: unzoom after selecting in iphone

+11

Nếu văn bản hiển thị (như trong trường hợp của tôi) có vẻ như 16px là nhỏ nhất trước khi nó cho phép thu phóng. –

+5

Chỉ để làm cho nó rõ ràng hơn, dòng này sẽ ngăn chặn autoscaling: '$ ('', {name: 'viewport', nội dung: 'user-scalable = no'}). AppendTo ('head');' – Abbas

+10

khi nào văn bản bị ẩn trong phần tử chọn ?? "Sẽ không mang lại bất kỳ vấn đề bố cục nào" – Bill

1

Tôi không nghĩ bạn không thể làm bất cứ điều gì về hành vi này.

Một điều bạn có thể thử là giữ cho trang không thu phóng được. Điều này là tốt nếu trang của bạn được thiết kế cho điện thoại.

<meta name="viewport" content="width=device-width" /> 

Một điều bạn có thể thử là sử dụng cấu trúc JavaScript thay vì câu lệnh "chọn" chung. Tạo div ẩn để hiển thị menu của bạn, xử lý các nhấp chuột trong javascript.

Chúc may mắn!

+0

Tôi đã có trong tôi các thẻ meta. Đó là điều kỳ lạ. –

46

sử dụng khả năng mở rộng = không là những gì bạn cần, chỉ cần như vậy có thực sự là một câu trả lời dứt khoát cho câu hỏi này

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

Thực ra, việc thêm chiều rộng = chiều rộng thiết bị, tỷ lệ ban đầu = 1.0, tỷ lệ tối đa = 1.0 là đủ. Tôi không tin bạn cần người dùng có thể mở rộng quy mô với quy mô tối đa. –

+1

@DanSmart, ít nhất là trường hợp của tôi (và tôi không biết những gì đặt nó ngoài), tỷ lệ tối thiểu/tối đa không đủ - thêm người dùng có thể mở rộng = không có sự khác biệt. – corolla

+3

Điều này giống như phương pháp tiếp cận rất nặng - tôi khuyên bạn nên sử dụng người dùng có thể mở rộng = không cẩn thận. [Từ Dev.Opera] (https://dev.opera.com/articles/an-introduction-to-meta-viewport-and-viewport/), "Cũng có thể tắt hoàn toàn việc thu phóng, tuy nhiên hãy ghi nhớ việc phóng to đó là một tính năng trợ năng quan trọng được nhiều người sử dụng. Do đó, việc tắt tính năng này chỉ xảy ra khi thực sự cần thiết, chẳng hạn như đối với một số loại trò chơi và ứng dụng nhất định. " –

24

Điều này dường như làm việc cho trường hợp của tôi trong việc giải quyết vấn đề này:

@media screen and (-webkit-min-device-pixel-ratio: 0) { 
select:focus, textarea:focus, input:focus { 
     font-size: 16px; 
    } 
} 

S uggested here bởi Christina Arasmo Beymer

+2

Trong trường hợp của tôi, iOS 7x, người dùng cũ có thể mở rộng không đủ. Ở trên đã làm các trick cảm ơn bạn đã chia sẻ. – landed

+1

Nó hoạt động, cảm ơn bạn rất nhiều! –

2

Hãy thử điều này:

function DisablePinchZoom() 
{ 
    $('meta[name=viewport]').attr("content", ""); 
    $('meta[name=viewport]').attr("content", "width=yourwidth, user-scalable=no"); 
} 

function myFunction() 
{ 
    $('meta[name=viewport]').attr("content", "width=1047, user-scalable=yes"); 
} 


<select id="cmbYo" onchange="javascript: myFunction();" onclick="javascript: DisablePinchZoom();"> 
</select> 

DisablePinchZoom sẽ bị sa thải trước khi onchange để zoom sẽ được vô hiệu hóa tại thời điểm onchange là bắn. Trên chức năng onchange, ở cuối, bạn có thể khôi phục tình trạng ban đầu.

Thử nghiệm trên một chiếc iPhone 5S

13

của iPhone sẽ phóng to các lĩnh vực hình thức hơi nếu văn bản được thiết lập đến dưới 16 pixel. Tôi khuyên bạn nên đặt văn bản của trường biểu mẫu di động là 16 pixel và sau đó ghi đè kích thước xuống cho máy tính để bàn.

Câu trả lời cho biết để tắt thu phóng không hữu ích đối với người dùng được nhìn thấy một phần vẫn có thể muốn thu phóng trên các điện thoại di động nhỏ hơn.

Ví dụ:

# Mobile first 
input, textarea, select { 
    font-size: 16px; 
} 

# Tablet upwards 
@media (min-width: 768px) { 
    font-size: 14px; 
} 
+0

Tốt! Nhưng nếu văn bản của tôi tràn toàn bộ chiều rộng của hộp chọn thì sao? Tôi có thể làm gì trong trường hợp này? – gota

Các vấn đề liên quan