2015-02-06 20 views
16

Tôi đang cố gắng hỗ trợ nhiều tỷ lệ pixel trên trang web hiện tại mà tôi đang phát triển. Tôi cũng muốn đảm bảo rằng tôi cung cấp bất kỳ tiền tố trình duyệt bắt buộc nào để hỗ trợ nhiều loại thiết bị/trình duyệt nhất định trong phạm vi lý do. Ngoài ra, tôi đang sử dụng SVG bất cứ nơi nào có thể, nhưng tôi cần một giải pháp cho hình ảnh chụp ảnh. Lý tưởng nhất, tôi muốn cung cấp:Truy vấn phương tiện cho @ 2x, @ 3x và @ 4x hình ảnh

  1. @ hình ảnh 1x (Pixel Ratio 1.0) (Ratio Pixel của 1.25+)
  2. @ 2x ảnh
  3. @ 3x hình ảnh (Ratio Pixel của 2.25+)
  4. @ 4x ảnh (Ratio Pixel của 3.25+)

câu hỏi của tôi là những gì sẽ là cách tốt nhất để đi về cách viết các truy vấn phương tiện truyền thông để đạt được điều này? Mối quan tâm chính của tôi là lập luận của tôi là chính xác cho những gì tôi đang cố gắng đạt được. Tôi đánh giá cao bất kỳ đề xuất hoặc lời khuyên nào bạn có. Hiện nay mã của tôi là như sau:

/* @1x Images (Pixel Ratio 1.0) */ 
#dgst_shopping_bag {background-image:url(img/shopping_bag.png);} 

/* @2x Images (Pixel Ratio of 1.25+) */ 
@media only screen and (-o-min-device-pixel-ratio: 5/4), 
     only screen and (-webkit-min-device-pixel-ratio: 1.25), 
     only screen and (min-device-pixel-ratio: 1.25), 
     only screen and (min-resolution: 1.25dppx) { 
    #dgst_shopping_bag {background-image:url(img/[email protected]);} 
} 

/* @3x Images (Pixel Ratio of 2.25+) */ 
@media only screen and (-o-min-device-pixel-ratio: 9/4), 
     only screen and (-webkit-min-device-pixel-ratio: 2.25), 
     only screen and (min-device-pixel-ratio: 2.25), 
     only screen and (min-resolution: 2.25dppx) { 
    #dgst_shopping_bag {background-image:url(img/[email protected]);} 
} 

/* @4x Images (Pixel Ratio of 3.25+) */ 
@media only screen and (-o-min-device-pixel-ratio: 13/4), 
     only screen and (-webkit-min-device-pixel-ratio: 3.25), 
     only screen and (min-device-pixel-ratio: 3.25), 
     only screen and (min-resolution: 3.25dppx) { 
    #dgst_shopping_bag {background-image:url(img/[email protected]);} 
} 

Alternative 1: Tôi đã nghiên cứu triển khai thẻ <picture> để thực hiện điều này. Tôi biết bạn có thể cung cấp nội dung thay thế cho các trình duyệt không hỗ trợ <picture>, đó sẽ là mối quan tâm chính của tôi trong việc sử dụng nội dung đó. Các bạn có nghĩ đó sẽ là phương pháp hay nhất để cung cấp ảnh cho nhiều tỷ lệ pixel?

+0

viết tắt: Là hình ảnh của bạn tất cả cùng một chiều rộng trên tất cả các thiết bị? –

+0

Đối với phần lớn các thiết bị, kích thước hình ảnh là như nhau. Tôi chỉ đang trao đổi tài sản cho màn hình mật độ điểm ảnh cao. Tuy nhiên đối với các điểm ngắt thấp hơn, một số hình ảnh có kích thước nhỏ hơn do giới hạn kích thước màn hình. – Mastrianni

Trả lời

12

Vâng, bỏ qua sự khác biệt chức năng rõ ràng giữa hình nền và phần tử hình ảnh nội dòng như picture, có một số ưu và khuyết điểm giữa hai yếu tố này.

Ưu điểm cho hình ảnh inline/khuyết điểm cho background-image:

Không có cách nào để sử dụng một phương tiện truyền thông truy vấn cho một phong cách nội tuyến, vì vậy xác định một background-image đòi hỏi phải khai báo một chọn cho bất cứ điều gì yếu tố đòi hỏi hình ảnh nền riêng biệt từ thẻ . Điều này làm phức tạp giải pháp này cho các yếu tố được tạo động.

Ngoài ra, nếu bạn chỉ quan tâm đến việc cung cấp hình ảnh có tỷ lệ pixel khác nhau, bạn có thể chỉ cần sử dụng srcset attribute of an img tag thay vì phần tử picture. Phần tử picture yêu cầu đánh dấu nhiều hơn và có một số tính năng không cần thiết cho việc này, cộng với srcset được hỗ trợ tốt hơn một chút.

Ưu điểm cho background-image/khuyết điểm cho hình ảnh inline:

phương tiện truyền thông Nghị quyết dựa trên truy vấn are much better supported hơn the picture elementthe srcset attribute. Một số trình duyệt không hỗ trợ phần tử picture hoặc thuộc tính srcset vào lúc này, mặc dù hỗ trợ đang được cải thiện.

Ngẫu nhiên, nếu bạn muốn tối đa hóa hỗ trợ trình duyệt cho các phiên bản Firefox cũ hơn 16, bạn có thể thêm the min--moz-device-pixel-ratio selector, có cú pháp giống như -webkit-min-device-pixel-ratio. Đây là một ví dụ sử dụng CSS của bạn.

/* @2x Images (Pixel Ratio of 1.25+) */ 
@media only screen and (-o-min-device-pixel-ratio: 5/4), 
     only screen and (-webkit-min-device-pixel-ratio: 1.25), 
     only screen and (min--moz-device-pixel-ratio: 1.25), 
     only screen and (min-device-pixel-ratio: 1.25), 
     only screen and (min-resolution: 1.25dppx) { 
    #dgst_shopping_bag {background-image:url(img/[email protected]);} 
} 

Phương pháp hay nhất?

Thực tiễn tốt nhất là sử dụng truy vấn phương tiện cho những địa điểm bạn cần hình nền và srcset hoặc picture cho những địa điểm bạn cần hình ảnh nội tuyến. Tuy nhiên tại thời điểm này, có thể quan trọng hơn khi xem xét những trình duyệt nào bạn cần hỗ trợ. Cho rằng, xem các liên kết compatibly (có thể xem xét rằng nhiều người sử dụng trình duyệt cũ có lẽ cũng sử dụng màn hình độ phân giải tiêu chuẩn):

7

Thật sử dụng img[srcset] thuộc tính. Hỗ trợ của nó là tốt hơn nhiều so với nhà nước trong một câu trả lời. Chrome hiện tại Safari hỗ trợ thuộc tính này. Và chúng tôi biết rằng, Firefox 38 và IE 12 cũng sẽ hỗ trợ nó. Ngoài ra cú pháp cho phép bạn làm tăng cường tiến bộ đơn giản và bạn không cần phải viết các truy vấn phương tiện phức tạp.

Đây là cách nó trông giống như:

<img src="img/[email protected]" srcset="img/[email protected] 2x, img/[email protected] 3x" /> 

Và trong trường hợp bạn muốn thêm hỗ trợ cho các trình duyệt không hỗ trợ, bạn có thể lựa chọn giữa differentpolyfills.

Trong trường hợp bạn sử dụng một polyfill bạn có thể thay đổi đánh dấu như thế này: câu hỏi

<img srcset="img/[email protected], img/[email protected] 2x, img/[email protected] 3x" /> 
+1

Lý do cho hình ảnh và tỷ lệ lớn hơn là do màn hình võng mạc mới nhất của Apple (trên iPhone 6) yêu cầu hình ảnh 3x, họ cũng có iMac với màn hình 4k trên thị trường. Hình ảnh 4x chỉ là nỗ lực của tôi trong việc chứng minh không tương lai cho màn hình 4k. Các hình ảnh cũng được nén. – Mastrianni

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