2015-08-04 20 views
6

Tôi đang trong quá trình cố gắng quấn quanh đầu bằng cách sử dụng srcsetsizes trên img thẻ.Sử dụng các kích thước thuộc tính cho hình ảnh reponsive

Mặc dù tôi nghĩ rằng mình đã nắm được các khái niệm cơ bản - chủ yếu nhờ vào bài viết this - Tôi đang gặp khó khăn trong việc áp dụng thực tế thuộc tính sizes.

Trong tất cả các ví dụ tôi có thể tìm thấy, mọi thứ được đơn giản ồ ạt và thuộc tính kích thước được khai báo như ở mỗi điểm ngắt, chiều rộng hình ảnh sẽ là tỷ lệ chính xác của chiều rộng khung nhìn, cho phép sử dụng đơn vị vm. Ví dụ:

sizes="(min-width: 36rem) 33.3vw, 
     100vw" 

Tất nhiên trong cuộc sống thực, hình ảnh thường trong container khác mà bản thân có thể là trong container khác và như vậy, mỗi lề riêng, đệm hoặc vị trí của họ. Có công bằng khi nói rằng trong tất cả trừ trường hợp đơn giản nhất (khi hình ảnh có chiều rộng chất lỏng và không đơn giản là tỷ lệ phần trăm chính xác của chế độ xem), phải sử dụng calc, có khả năng thêm các tính toán phức tạp vào đánh dấu html một kích thước hình ảnh cần phải được tính toán làm việc từ chiều rộng khung nhìn, xuống qua bất kỳ vùng chứa nào cho hình ảnh? Ví dụ: bạn sẽ tính toán kích thước chính xác cho một hình ảnh nằm trong vùng chứa với đệm 7px bên trong vùng chứa là 45% vùng chứa với lề 15px bên trong thanh bên là 25% của trang chứa chính 15px đệm và có chiều rộng tối thiểu là 1220px?

sizes="(min-width: 36rem) calc(((((1220px - (2 * 15px) * 25%) * 45%) - (2 * 15px) - (2 * 7px)), 
     100vw" 

Cố gắng tính toán điều này trong thuộc tính kích thước có vẻ lố bịch, nhất là khi tất cả điều này có thể thay đổi tại mỗi điểm ngắt. phải giữ cho tính toán ồ ạt phức tạp này đồng bộ với những thay đổi đối với CSS có vẻ như điên rồ. Và sau đó bạn có hỗ trợ trình duyệt bị vá cho calc.

Tôi cảm thấy mình thiếu một điều gì đó hiển nhiên, nhưng nó là gì?

Lưu ý: Tôi biết về sự xuất sắc của Alexander Farkas Lazy Sizes tính toán kích thước cho bạn thông qua việc sử dụng thuộc tính data nhưng tôi quan tâm đến việc sử dụng tiêu chuẩn.

Trả lời

2

Trước hết% đơn vị không được phép trong sizes. Bạn phải sử dụng các đơn vị vw. (Có thể bao gồm chiều rộng thanh cuộn). Vì vậy, 25% của bạn sẽ trở thành 24-25vw ví dụ. Thứ hai không có sự khác biệt thực sự giữa rem và em (trong bối cảnh thuộc tính kích cỡ). Trong trường hợp bạn không sử dụng truy vấn phương tiện dựa trên em/rem/min-width/max-width trong CSS của bạn, không bao giờ sử dụng các truy vấn đó trong thuộc tính kích thước của bạn.

Kích thước cơ bản không cần phải khớp chính xác với kích thước hình ảnh thực của bạn 100%. Nó là một nói cho trình duyệt để tìm các ứng cử viên hình ảnh đúng khoảng.

Quy tắc tối thiểu: 1200px cũng như mọi mức sử dụng tối đa trong CSS của bạn, phải rõ ràng là một phần của điều kiện phương tiện mới trong thuộc tính kích thước của bạn.

này lá chúng tôi với phần kích thước sau:

(min-width: 1200px) calc(11vw - 44px) 

Trong trường hợp bạn thêm có một max-width xác định hoặc một truy vấn phương tiện truyền thông mà dừng sidebar từ phát triển, bạn có thể ít chính xác và đơn giản là chuyển đổi 11vw - 44px vào 10vw:

Ví dụ:

sizes="<...,>(min-width: 1800px) 180px, (min-width: 1200px) 10vw, <....>" 

Về hỗ trợ calc: picturefill 3.0 beta cũng như respimage, làm bao gồm hỗ trợ calc cho IE8 +, vì vậy tất cả trình duyệt s mà kích thước hỗ trợ có đủ hỗ trợ calc tốt và tất cả các trình duyệt polyfile respimage làm hỗ trợ calc trong các kích cỡ cũng có.

Giới thiệu việc này ngay lập tức. Điều này rõ ràng là đau đớn và trong hầu hết các trường hợp, hệ thống CMS/backend của bạn sẽ trợ giúp ở đây. Trong hầu hết các dự án, bạn nên đồng ý với một tập hợp giới hạn các định dạng hình ảnh được phép và viết kích thước cho các định dạng tương ứng với thiết kế của bạn. Và chương trình phụ trợ của bạn nên quản lý để đính kèm các kích thước đó vào đúng vị trí. Trong trường hợp điều này là không thể. Hoặc sử dụng thực sự lazySizes hoặc sử dụng srcset với sizes ít nhất là cho những hình ảnh quan trọng nhất (ví dụ: định dạng hình ảnh lớn, bởi vì đây là nơi bạn có thể lưu dữ liệu nhiều nhất).


Nếu bạn muốn, bạn có thể chọn một trang web thực và chúng tôi đính kèm đúng kích cỡ. Nhưng hãy nhận biết. Nó phải là chỉ giới hạn chiều rộng. Tiêu chuẩn hiện không hỗ trợ hình ảnh có độ cao bị giới hạn (Đây chỉ là tính năng lazysizes).

+0

Cảm ơn rất nhiều vì câu trả lời của bạn. Khi bạn nói 'kích thước không phù hợp với kích thước hình ảnh thực của bạn 100% chính xác' bạn có nghĩa là 'kích thước không cần phải phù hợp với kích thước hình ảnh thực của bạn 100% chính xác'. Nếu vậy, điều này có ý nghĩa rất nhiều - theo cách đó, độ phức tạp của một vài bộ lề/đệm có thể bị bỏ qua để có một cách tiếp cận tổng quát hơn đối với kích thước hình ảnh - biết rằng một hình ảnh khoảng 25% của khung nhìn là đủ . Theo như dựa vào một CMS và sử dụng một bộ hình ảnh được xác định trước, tôi chắc chắn thấy lợi thế của điều này. Chướng ngại vật của tôi là tính toán kích thước hình ảnh chính xác ngay từ đầu. – Undistraction

+0

Có, kích thước không cần phải khớp với kích thước thật của bạn 100% chính xác. Trình duyệt tính toán giá trị px từ danh sách kích thước nguồn của bạn. Và kết hợp điều này với devicePixelRatio và sau đó chọn một ứng cử viên hình ảnh tốt. Vì vậy, bạn làm điều này để có được một ứng cử viên hình ảnh cụ thể được chọn. Rõ ràng, số lượng ứng cử viên hình ảnh bị hạn chế (thường là từ 2-10 ứng viên tùy thuộc vào tình huống). Vì vậy, nếu bạn cung cấp cho các ứng cử viên trình duyệt trong 200 bước pixel, trình duyệt đã bị giới hạn và cần phải hoạt động gần đúng. –

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