Bạn không thể thực sự có được kích thước vật lý thực hoặc DPI thực tế và ngay cả khi bạn có thể, bạn cũng không thể làm gì với chúng.
Đây là một câu chuyện khá dài và phức tạp, vì vậy hãy tha thứ cho tôi.
Web và tất cả các trình duyệt xác định 1px là một đơn vị được gọi là pixel CSS. Một pixel CSS không phải là một pixel thực, mà là một đơn vị được coi là 1/96 inch dựa trên góc nhìn của thiết bị. Điều này được chỉ định làm pixel tham chiếu .
Pixel tham chiếu là góc trực quan của một pixel trên thiết bị có mật độ pixel là 96dpi và cách đầu đọc độ dài một sải tay. Đối với chiều dài danh nghĩa của một cánh tay là 28 inch, do đó, góc trực quan là khoảng 0,0213 độ. Để đọc ở độ dài của cánh tay, 1px tương ứng với khoảng 0,26 mm (1/96 inch).
Trong không gian 0,26mm, chúng ta có thể có rất nhiều pixel thiết bị thực.
Trình duyệt thực hiện điều này chủ yếu vì các lý do cũ - hầu hết các màn hình đều là 96dpi khi web ra đời - nhưng cũng vì tính nhất quán, trong "ngày xưa", nút 22px trên màn hình 15 inch ở 800x600 sẽ gấp đôi kích thước của nút 22px trên màn hình 15 inch ở 1600x1200. Trong trường hợp này, DPI của màn hình thực sự là 2x (gấp đôi độ phân giải theo chiều ngang nhưng trong cùng một không gian vật lý). Đây là một tình huống tồi tệ đối với web và ứng dụng, vì vậy hầu hết các hệ điều hành đã nghĩ ra nhiều cách để trừu tượng hóa các giá trị pixel vào các đơn vị độc lập của thiết bị (DIPS trên Android, PT trên iOS và CSS Pixel trên web ).
Trình duyệt Safari trên iPhone là trình duyệt đầu tiên (theo hiểu biết của tôi) giới thiệu khái niệm về khung nhìn. Điều này được tạo ra để cho phép các ứng dụng kiểu máy tính để bàn hoàn chỉnh hiển thị trên một màn hình nhỏ. Chế độ xem được xác định là rộng 960px. Về cơ bản, điều này đã phóng to trang ra 3 lần (iphone ban đầu là 320px) vì vậy 1 pixel CSS bằng 1/3 pixel vật lý. Mặc dù vậy, khi bạn xác định một chế độ xem, bạn có thể làm cho thiết bị này khớp với 1 pixel CSS = 1 pixel thực ở 163dpi.
Bằng cách sử dụng chế độ xem có chiều rộng là "chiều rộng thiết bị" giúp bạn giải phóng khỏi việc phải đặt chiều rộng của chế độ xem trên cơ sở từng thiết bị thành kích thước pixel CSS tối ưu, trình duyệt sẽ làm điều đó cho bạn.
Với sự ra đời của các thiết bị DPI gấp đôi, các nhà sản xuất điện thoại di động không muốn các trang trên thiết bị di động nhỏ hơn 50% vì vậy họ đã giới thiệu một khái niệm gọi là devicePixelRatio (đầu tiên là trên bộ web dành cho thiết bị di động), điều này cho phép họ giữ 1 pixel CSS tương đương 1 / 96 inch nhưng cho bạn hiểu rằng nội dung của bạn như hình ảnh có thể cần phải có kích thước gấp đôi. Nếu bạn nhìn vào dòng iPhone, tất cả các thiết bị của họ đều nói rằng chiều rộng của màn hình tính bằng pixel CSS là 320px mặc dù chúng ta biết điều này không đúng.
Do đó, nếu bạn tạo một nút thành 22px trong không gian CSS, thì biểu diễn trên màn hình vật lý là tỷ lệ pixel thiết bị 22 *. Thực ra tôi nói thế này, nó không hẳn là thế này vì tỷ lệ pixel của thiết bị cũng không bao giờ chính xác, các nhà sản xuất điện thoại đặt nó thành một số đẹp như 2.0, 3.0 chứ không phải là 2.1329857289918….
Tóm lại, các pixel CSS độc lập với thiết bị và chúng ta không phải lo lắng về kích thước vật lý của màn hình và mật độ hiển thị, v.v.
Đạo lý của câu chuyện là: Đừng lo lắng về việc hiểu kích thước pixel vật lý của màn hình. Bạn không cần nó. 50px trông gần giống nhau trên tất cả các thiết bị di động, nó có thể khác một chút, nhưng CSS Pixel là cách độc lập với thiết bị của chúng tôi để tạo các tài liệu và giao diện người dùng nhất quán
Tài nguyên: