Tôi nên sử dụng max-device-width hay max-width?


81

Với truy vấn phương tiện CSS, bạn có thể sử dụng max-device-widthđể nhắm mục tiêu chiều rộng thiết bị (chẳng hạn như thiết bị iPhone hoặc Android) và / hoặc max-widthnhắm mục tiêu chiều rộng trang.

Nếu bạn sử dụng max-device-width, khi bạn thay đổi kích thước của cửa sổ trình duyệt trên màn hình của mình, CSS sẽ không thay đổi, vì màn hình của bạn không thay đổi kích thước.

Nếu bạn sử dụng max-width, khi bạn thay đổi kích thước của cửa sổ trình duyệt trên màn hình của mình, bạn có thể được hiển thị kiểu định hướng cho thiết bị di động, chẳng hạn như các phần tử và menu thân thiện với cảm ứng và những thứ tương tự.

Nhắm mục tiêu các trình duyệt cụ thể (và các thiết bị?) Hiện không được dùng nữa và bạn nên có chút ngộ nhận hơn với những gì bạn nhắm mục tiêu. Điều đó có áp dụng cho các truy vấn phương tiện truyền thông không?

Tại sao bạn lại nhắm mục tiêu cái này hơn cái kia? Cái nào là cái được đề xuất?

Đây là ví dụ về truy vấn phương tiện mà tôi sử dụng trên trang web sản xuất:

@media only screen and (min-device-width: 320px) and (max-device-width: 480px) and (min-device-height: 480px) and (max-device-height: 640px) {  
    /* Change a menu to fit the screen better, etc... */
}

Tôi có xu hướng sử dụng cả hai max-device-widthmax-width.


2
thiết bị-width bây giờ bị phản developer.mozilla.org/en-US/docs/Web/CSS/@media/device-width
Yukulélé

Câu trả lời:


111

TL; DR

Nếu bạn đang tạo một trang web đáp ứng, hãy sử dụng min-width/ max-widthtrong các truy vấn phương tiện của bạn thay vì min-device-width/ max-device-widthđể nhắm mục tiêu nhiều kích thước màn hình hơn.

Theo dự thảo thông số kỹ thuật Media Queries Cấp 4 năm 2018 , device-widthtính năng media không được dùng nữa . Nó sẽ được giữ lại để tương thích ngược, nhưng nên tránh.

8. Phụ lục A: Các tính năng phương tiện không được dùng nữa

Để truy vấn cho kích thước của khung nhìn (hoặc hộp trang trên phương tiện truyền thông), thì width, heightaspect-ratiocác tính năng truyền thông nên được sử dụng, chứ không phải là device-width, device-heightdevice-aspect-ratio, trong đó đề cập đến kích thước vật lý của các thiết bị bất kể có bao nhiêu khoảng trống sẵn sàng cho tài liệu đang được trình bày. Các device-*tính năng phương tiện đôi khi cũng được sử dụng như một proxy để phát hiện thiết bị di động. Thay vào đó, các tác giả nên sử dụng các tính năng phương tiện thể hiện tốt hơn khía cạnh của thiết bị mà họ đang cố gắng tạo kiểu cho nó.

Ngoài ra, hãy nhớ chỉ định thẻ meta chế độ xem trong <head>phần tài liệu của bạn:

<meta name="viewport" content="width=device-width, initial-scale=1">

Giải trình

Do tất cả các độ phân giải màn hình và mật độ pixel có thể có khác nhau mà một thiết bị nhất định có thể có, pixel không phải là pixel vì có một số điều cần xem xét (thu phóng, mật độ pixel, độ phân giải và kích thước màn hình, hướng thiết bị, tỷ lệ khung hình, v.v. ..). Trong trường hợp này, một pixel thực sự được gọi là "đơn vị tham chiếu quang học" chứ không phải là pixel phần cứng vật lý.

May mắn thay, bạn có thể chỉ định thẻ meta chế độ xem trong <head>phần tài liệu của mình để kiểm soát chiều rộng và tỷ lệ của chế độ xem của trình duyệt. Nếu thẻ này có contentgiá trị là width=device-width, chiều rộng của màn hình sẽ khớp với các pixel độc lập trên thiết bị và sẽ đảm bảo rằng tất cả các thiết bị khác nhau phải mở rộng quy mô và hoạt động nhất quán.

<meta name="viewport" content="width=device-width, initial-scale=1">

Về các truy vấn phương tiện, bạn có thể sẽ muốn sử dụng max-widthhơn là max-device-widthmax-widthsẽ nhắm mục tiêu chế độ xem (cửa sổ trình duyệt hiện tại), trong khi max-device-widthsẽ nhắm mục tiêu kích thước / độ phân giải toàn màn hình thực tế của thiết bị.

Nói cách khác, nếu đang sử dụng max-device-width, bạn sẽ không thấy các truy vấn phương tiện khác nhau được áp dụng khi thay đổi kích thước trình duyệt trên máy tính để bàn của mình, bởi vì không giống như max-width, chỉ kích thước toàn màn hình thực tế của thiết bị mới được xem xét; không phải là kích thước hiện tại của cửa sổ trình duyệt.

Điều này tạo ra sự khác biệt lớn nếu bạn đang cố gắng tạo bố cục thích ứng vì trang web sẽ không phản hồi khi thay đổi kích thước trình duyệt. Ngoài ra, nếu bạn đang sử dụng max-device-widthcác truy vấn phương tiện mà bạn đang sử dụng để nhắm mục tiêu các thiết bị có màn hình nhỏ hơn sẽ không áp dụng cho máy tính để bàn ngay cả khi thay đổi kích thước cửa sổ trình duyệt xuống để phù hợp với kích thước màn hình nhỏ hơn đã nói.

Kể từ năm 2018, bản nháp đặc tả truy vấn phương tiện mới nhất đã thực sự không dùng device-widthtính năng phương tiện nữa, do đó cần tránh tính năng này.

Ngoài ra, bài viết này trên Google Developers rất không khuyến khích việc sử dụng max-device-width:

Nhà phát triển Google - Các nguyên tắc cơ bản về web - Truy vấn phương tiện CSS đáp ứng

Cũng có thể tạo các truy vấn dựa trên *-device-width; mặc dù thực hành này được khuyến khích mạnh mẽ .

Sự khác biệt là nhỏ nhưng rất quan trọng: min-widthdựa trên kích thước của cửa sổ trình duyệt, trong khi min-device-widthdựa trên kích thước của màn hình. Rất tiếc, một số trình duyệt, bao gồm cả trình duyệt Android cũ có thể không báo cáo chiều rộng thiết bị chính xác và thay vào đó báo cáo kích thước màn hình theo pixel thiết bị thay vì chiều rộng khung nhìn dự kiến.

Ngoài ra, việc sử dụng *-device-widthcó thể ngăn nội dung thích ứng trên máy tính để bàn hoặc các thiết bị khác cho phép thay đổi kích thước cửa sổ vì truy vấn dựa trên kích thước thiết bị thực chứ không phải kích thước của cửa sổ trình duyệt.

Đọc thêm:


2
Đồng ý với mọi điều bạn nói nhưng quên mất khía cạnh tương thích ngược của nó, điều đó sẽ không còn phù hợp trong một vài năm nữa. Tại sao trang web trên máy tính để bàn hoạt động khác đi bởi vì chúng ta hiện có điện thoại di động?
John Magnolia

2
Tôi chỉ không nghĩ rằng một trang web di động sẽ được hiển thị trên máy tính để bàn. Bạn có thể thay đổi kích thước trình duyệt thành bất kỳ chiều rộng nào và sử dụng thanh cuộn ngang. Giả sử bạn muốn so sánh một phần của 2 trang web nhưng ẩn bên, bạn sẽ mở 2 cửa sổ và thay đổi kích thước bên cạnh nhau
John Magnolia

3
Tôi đồng ý với John M, google đã sai, cá nhân tôi đã tìm thấy 'tài liệu' thiết kế đáp ứng của họ một số thứ lỗi mốt nhất hiện nay, được đưa ra chỉ vì những đứa trẻ viết nó được google tuyển dụng. Ban đầu tôi đã ủng hộ điều này, nhưng câu trả lời là sai theo quan điểm của tôi, chỉ vì ngày càng có nhiều trang web làm hỏng trải nghiệm người dùng trên máy tính để bàn của họ, hoàn toàn không nhất thiết phải có một kích thước phù hợp với tất cả khung css đáp ứng (được thực hiện chỉ để giảm thời gian dành cho nhà phát triển ý kiến), không có nghĩa là bạn phải làm hỏng trải nghiệm của người dùng máy tính để bàn của mình. Chúng tôi không làm điều đó và đã tăng số lượt chuyển đổi lên 10 lần.
Lizardx

"Nếu thẻ này có giá trị nội dung là width=device-width, chiều rộng của màn hình sẽ khớp với các pixel độc lập của thiết bị." Và nếu bạn đang duyệt trên thiết bị iOS, thay vì dpsnó sẽ tương ứng với, thì sao? điểm iOS? (Nhân tiện, cảm ơn bạn rất nhiều vì bài đăng này!)
in_flight

Câu trả lời là hơi lỗi thời. Không có gì sai max-device-widthvà điều quan trọng nếu bạn muốn sử dụng nó trong môi trường khung nhìn có thể thay đổi kích thước (máy tính để bàn). min-device-widthvẫn còn tệ.
ShortFuse

6

Tránh chiều rộng thiết bị. Lý do là bạn không thể biết trình duyệt của người dùng phản hồi như thế nào.

Đối với IOS, nó có vẻ đơn giản, ít nhất là với Safari. Nó dường như là một phản hồi chiều rộng thiết bị duy nhất độc lập với hướng. Ngoài ra, chiều rộng thiết bị chỉ được nêu cho cạnh ngắn hơn của thiết bị. Tôi đã thử nghiệm điều này trên iPhone 4S và iPad. Họ đã trả lời lần lượt là 320 và 768 bất kể hướng nào.

Đối với Android, nó khó đoán hơn. Tôi đã thử nghiệm sáu trình duyệt trên Huawei Ascend Y330 (trình duyệt mặc định của Android, Chrome, Opera, Firefox, Firefox Beta, Dolphin). Phản hồi khác nhau tùy thuộc vào loại và hướng trình duyệt.

Tôi đã thử nghiệm trên một trang có truy vấn (max-device-width: *** px) và để tìm ra giá trị px mà tôi cần điền vào để truy vấn ở trạng thái đúng. Bốn giá trị khác nhau là cần thiết (320, 480, 534, 800) tùy thuộc vào loại và hướng trình duyệt. Điều này làm cho chiều rộng thiết bị không sử dụng được.


1
chiều rộng thiết bị là cách đáng tin cậy duy nhất để biết thiết bị mà người dùng đang sử dụng để bạn có thể điều chỉnh bố cục cho phù hợp. Khi bạn điều chỉnh bố cục dựa trên pixel trong chế độ xem, bạn sẽ có thiết kế di động trên một số máy tính để bàn chỉ vì người dùng phóng to. Điều đó thường dẫn đến ngược lại với những gì người dùng muốn (chỉ là phóng đại một chút)
Alice Wonder

Bạn nên gửi báo cáo lỗi với các trình duyệt di động không báo cáo chiều rộng thiết bị chính xác. Trong nhiều trường hợp, tôi thấy rằng các trình duyệt thay thế được đặt theo mặc định để giả vờ là trình duyệt trên máy tính để bàn và sử dụng 1 pixel thiết bị trên mỗi pixel CSS - và đó có thể là vấn đề bạn đang gặp phải.
Alice Wonder

5

Nếu bạn sử dụng chiều rộng tối đa, khi bạn thay đổi kích thước của cửa sổ trình duyệt trên màn hình của mình, bạn có thể được hiển thị kiểu định hướng cho thiết bị di động, chẳng hạn như các phần tử và menu thân thiện với cảm ứng và những thứ tương tự.

Đối với tôi, thật là sốc khi có nhiều ý kiến ​​cho rằng điều này là đáng mơ ước. Tôi chưa biết liệu thiết kế lỏng / lỏng trước khi di động bị coi là xấu vì những lý do sai hay đúng. Đối với tôi, dường như đây chỉ là một phiên bản đẹp hơn của bố cục lỏng, nhưng là một phiên bản mà các nhà thiết kế đang nắm bắt vì một số lý do.

Khi cộng đồng thiết kế nói chung chọn đứng về phía các bố cục cố định trên chất lỏng vào giữa những năm 2000, đó là bởi vì các dòng chữ làm cản trở tính dễ đọc thường dẫn đến các góa phụ và các đồ tạo tác kiểu chữ khác. Ngoài ra, việc duy trì cơ sở mã thường phức tạp từ khâu thiết kế đến thiết kế để giữ cho các phần tử không bị va chạm.

Cá nhân tôi sử dụng min / max-device-width vì tôi thích tuân theo các quy ước về tài liệu trên máy tính để bàn đã được ưu tiên hàng chục năm. Không phải tất cả các tài liệu bạn mở trên internet sẽ hoạt động theo cách này trên máy tính để bàn, cũng không phải các loại tài liệu hoặc ứng dụng khác mà bạn tải trên máy tính của mình. Các trang được thiết kế trước sự thống trị của thiết bị di động, giống như MS Word, Photoshop, v.v. giữ vị trí cuộn của chúng và không thay đổi bố cục của chúng, cho phép người dùng theo dõi nội dung trong luồng trang khi thực hiện tác vụ quản lý cửa sổ không liên quan.

Tôi thường sử dụng 3 điểm ngắt: một cho điện thoại, một cho máy tính bảng và một cho máy tính để bàn. Máy tính để bàn và thường ít nhất là chân dung ngang được cố định và chân dung máy tính bảng trở xuống là chất lỏng. Sự kết hợp giữa thích ứng và đáp ứng này cho phép máy tính để bàn hoạt động giống như một trang web trên máy tính để bàn trong khi vẫn giúp tôi bố trí các bố cục thiết bị di động có chiều rộng cố định riêng biệt 10 lẻ. Văn bản không chỉnh lại trên thiết bị di động vì không thể thay đổi kích thước cửa sổ xem.


2
Có một số điện thoại di động có thể thay đổi kích thước khung nhìn - ví dụ: cửa sổ cho phép "chụp" nhiều ứng dụng trên màn hình và một số điện thoại Android có hỗ trợ cửa sổ để xem hai ứng dụng cùng một lúc. Về mặt khách quan, tôi không hiểu tại sao bạn không muốn bố cục kiểu máy tính bảng trên màn hình nhỏ hơn, nhưng về mặt chủ quan thì nó phụ thuộc vào bố cục.
Đánh dấu

2
Tôi cũng đang sử dụng min / max-device-width nhưng thật kinh hoàng khi một khách hàng đã thiết lập hotjar, tạo ra các video nhỏ về tương tác của người dùng với trang web của bạn và tôi nhận ra rằng samsung galaxy 6 android 6 mới đang xử lý số pixel là min / max-device-width là pixel màn hình thực tế, không phải pixel css, tất nhiên đã làm cho trang tắt màn hình. Trong trường hợp của chúng tôi, điều đã xảy ra là người dùng nhận được những màn hình có mật độ pixel 4x này là sự kết hợp giữa css di động và máy tính để bàn. Cá nhân tôi không tin rằng tính năng đáp ứng có chỗ đứng trên một màn hình máy tính để bàn được hoàn thiện tốt, không tốt cho người dùng. Vì vậy, hãy cẩn thận.
Lizardx

2
Paul, nó yêu cầu một số nghiên cứu để tìm ra những gì đang xảy ra. Câu trả lời của Josh theo tôi là sai, google cũng vậy. Khái niệm rằng máy tính để bàn phải đáp ứng chỉ là một mốt đang được các nhóm như google thúc đẩy và kích thước khác nhau phù hợp với tất cả các khuôn khổ css. Vấn đề của chúng tôi đến từ lập trình hotjar không tốt. Các điểm kích hoạt của tôi về cơ bản coi bất kỳ thiết bị có màn hình lớn nào là máy tính để bàn, với một vài chỉnh sửa, sau đó đi xuống nơi cổng xem sẽ chỉ là thiết bị di động. Đối với những người dùng đang tìm kiếm sự rõ ràng, tôi sẽ coi câu trả lời của paul là đúng và câu trả lời phản hồi theo hướng mốt là sai.
Lizardx

1
FYI - như của năm 2018, các *-device-widthtính năng truyền thông đã thực sự bị phản đối dự thảo đặc tả truy vấn phương tiện truyền thông mới nhất - drafts.csswg.org/mediaqueries-4/#mf-deprecated
Josh Crozier

Đây là một câu trả lời cũ nhưng ngay cả vào năm 2014, tôi cũng rất không đồng ý với điều này. Những lỗi đánh máy được tham chiếu và 'các yếu tố va chạm' có thể dễ dàng tránh được bằng cách tạo thói quen tuân theo các thông lệ tốt. Độ phân giải màn hình đang trở nên điên cuồng và thiết kế đáp ứng, có thể mở rộng, có khả năng mở rộng sẽ trở nên quan trọng hơn khi thời gian trôi qua trong khi các trang cố định sẽ ngày càng khó truy cập hơn.
người đàn ông nhỏ bé tí hon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.