Tôi có nên chia một tệp truy vấn phương tiện CSS lớn thành các tệp riêng biệt cho từng kích thước màn hình không?


19

Tôi đang làm việc trên một trang web thiết kế đáp ứng để cung cấp nội dung cho tất cả các kích thước màn hình. Tôi có các truy vấn phương tiện cho 5 "bước" khác nhau và tệp CSS khoảng 30 Kb.

Sẽ tốt hơn nếu chia phần này thành các tệp riêng biệt và làm cho chúng tương tự như sau:

<link rel='stylesheet' media='screen and (min-width: 701px) and (max-width: 900px)' href='css/medium.css' />

hoặc tôi nên giữ chúng trong một tệp CSS?

Cập nhật: Tôi chỉ muốn thêm, rằng mối quan tâm chính của tôi là tốc độ mở / kết xuất trang trình duyệt / thiết bị chéo, không dễ phát triển.


Có grunt / webpack / bất kỳ plugin nào tồn tại để lấy một tệp css và chia nó thành nhiều tệp được phân tách bằng truy vấn phương tiện không? Sau đó, bạn có thể có được sự dễ dàng phát triển được cung cấp bởi một tệp nguyên khối và tối ưu hóa tốc độ của các tệp riêng biệt.
Kevin Wheeler

Câu trả lời:


16

Tôi nghĩ rằng nó thực sự phụ thuộc vào những gì bạn thấy dễ dàng nhất để phát triển và những gì giúp bạn giữ một bản định kiểu gọn gàng.

Nhược điểm duy nhất tôi có thể nghĩ đến khi chia tách là thuộc tính của một thành phần sẽ xuất hiện trong tất cả các bảng định kiểu của bạn, bạn sẽ phải cập nhật 5 tệp riêng biệt để thay đổi nó (thay vì xuất hiện cạnh nhau ở một nơi).

Theo câu trả lời trên bài đăng này, các trình duyệt sẽ tải xuống tất cả các bảng định kiểu bất kể, vì vậy việc phân chia độ phân giải không phải là trình tiết kiệm băng thông: /programming/16657159/when-USE-media-queries-does-a -phone-load-không liên quan-truy vấn và hình ảnh


Trong bài đăng mà bạn đã liên kết, bạn có biết ý của anh ấy là "đây là một hạn chế của CSSOM" không?
DisgruntledGoat

1
Mô hình đối tượng CSS - dev.w3.org/csswg/cssom - Tôi tin rằng điều này xác định cách xử lý CSS, và vì vậy tôi nghĩ rằng giới hạn mà anh ta đề cập sẽ không có một mô hình xử lý các kiểu như vậy trong việc tiết kiệm băng thông hơn đường.
Richard B

3
Mặc dù nó không phải là một trình tiết kiệm tải xuống nhưng nó là một cách. Một trình duyệt sẽ ưu tiên các liên kết truy vấn phương tiện phù hợp hơn không phù hợp. Một tệp css phù hợp sẽ chặn kết xuất trang trong khi trình duyệt không phù hợp sẽ được trình duyệt ưu tiên thấp hơn để tải xuống và hoàn toàn không chặn kết xuất trang. Ngoài ra, khi chia tách, bạn có thể sử dụng js để tải xuống một cách có điều kiện nếu bạn muốn lưu và băng thông.
dinois

4

Nó hơi phụ thuộc vào những gì bạn muốn đạt được: bạn đang cố gắng làm cho trang của mình tải nhanh hơn hay bạn đang cố gắng để phát triển dễ dàng hơn?

Nếu bạn nhắm mục tiêu vào thứ hai, hơn bạn có thể sử dụng nhiều trang tính, nhưng đó là tất cả vấn đề ưu tiên. Tôi thấy nó dễ sử dụng nhất cho một tệp lớn vì điều này cung cấp cho bạn tổng quan về tất cả các kiểu bạn đã khai báo.

Nếu bạn muốn một trang tải nhanh hơn đặt cược tốt nhất của bạn sẽ là giảm thiểu số lượng yêu cầu, vì chi phí yêu cầu là khá lớn. Hơn nữa, bạn có thể giữ một phiên bản phát triển cho chính mình và phục vụ một css tối thiểu cho web (Tôi thấy YUI là một phương pháp tốt: http://www.refresh-sf.com/yui/ ).

Hơn nữa tôi sẽ cố gắng tối ưu hóa css chính nó. Bạn có thể thử hợp nhất các lớp rất giống nhau, ví dụ:

.bold-and-italic { font-weight: bold; text-style: italic; }

Có thể được chuyển đổi thành:

.bold { font-weight: bold; }
.italic { text-style: italic; }

Điều duy nhất là bạn phải thay đổi html một chút từ <span class="bold-and-italic">foo bar</span>thành<span class="bold italic">foo bar</span>

Tôi có thể khuyên bạn nên xem Bootstrap ( http://getbootstrap.com ), những người này đã làm rất tốt trong việc chia các lớp thành nhiều 'lớp con'.

Tôi hi vọng cái này giúp được.


1
Các lớp học được đặt tên theo phong cách là hình thức xấu. Cũng có thể chỉ cần đặt một thuộc tính phong cách nếu bạn đang đi đến đó. Tốt hơn để đặt tên cho các lớp hợp lý. Giống như.important
dinois

4

Có lẽ tốt nhất là chỉ có một tệp CSS, nhưng để thu nhỏ và gzip nó. Giả sử 30KB của bạn là trước khi thực hiện điều đó, có thể bạn sẽ giảm kích thước tệp xuống còn khoảng 5KB với việc thu nhỏ (loại bỏ khoảng trắng) và gzipping.

Chia tách có thể sẽ giúp bạn tăng tốc hơn, nhưng chỉ trong một số điều kiện.

  • Bạn phải đảm bảo rằng chỉ có một biểu định kiểu được tải mỗi lần - nếu không, bạn cần hai hoặc nhiều yêu cầu HTTP, có chính chúng, điều này ít nhất sẽ phủ nhận một phần lợi ích từ kích thước tệp nhỏ hơn. Để làm điều này, đó là không đủ để chỉ chia stylesheet và chèn nhiều <link>-tags với phương tiện truyền thông thuộc tính khác nhau, trình duyệt dường như để tải tất cả các <link>stylesheets ed không phụ thuộc vào truy vấn phương tiện truyền thông (nhờ @cimmanon cho thông tin này, không biết rằng) .
  • Số lượng quy tắc CSS được chia sẻ giữa các biểu định kiểu phải nhỏ - nếu không, mỗi trong số nhiều biểu định kiểu sẽ cần chứa tất cả các quy tắc chung và do đó sẽ có kích thước gần như ban đầu.
  • Bạn sử dụng bộ tiền xử lý CSS (hoặc một cái gì đó tương tự), do đó có thể quản lý để có cùng một đoạn mã trong 5 biểu định kiểu.

Ngoài ra: Đừng tối ưu hóa sớm. Chỉ làm như vậy nếu bạn có vấn đề về hiệu suất.


3
Điều đáng chú ý là nếu bạn đang sử dụng <link rel="stylesheet" />thẻ cho tất cả các tệp cụ thể truy vấn phương tiện của mình, bạn sẽ không thể ngăn trình duyệt tải xuống chúng. Bạn sẽ phải sử dụng trình duyệt đánh hơi ở phía máy chủ hoặc sử dụng JavaScript để kiểm tra kích thước khung nhìn và chèn các biểu định kiểu thích hợp. Cả hai đều là những lựa chọn tốt.
cimmanon

1
Tôi hơi ngạc nhiên, nhưng bạn đã đúng - Tôi nghĩ rằng việc thêm thuộc tính media vào <link>-tag sẽ ngăn việc tải các bảng định kiểu không khớp. Tại sao các trình duyệt làm điều đó? Tất nhiên đây là lý do quan trọng nhất để không phân chia các bản định kiểu.
Jost

Họ làm điều đó bởi vì màn hình của bạn có thể thay đổi, nếu bạn đang ở trên điện thoại di động và bạn xoay nó từ dọc sang ngang thì đột nhiên chiều rộng màn hình của bạn lại khác. Hoặc trên máy tính để bàn, bạn có thể thay đổi kích thước cửa sổ trình duyệt hoặc kéo cửa sổ của mình sang màn hình khác nếu bạn có thiết lập nhiều màn hình. Nếu trình duyệt không tải xuống trước tất cả các tài sản CSS, sẽ có một sự chậm trễ trong việc hiển thị lại trang nếu và khi bất kỳ hành động nào xảy ra ở trên
MrCarrot

Tốt hơn hết là chia chúng ra. Hầu hết các trình duyệt hiện nay đều là các trình duyệt spdy (trang web của bạn là https và spdy đúng như vậy) và với nhiều kết nối được ghép vào cùng một kết nối nên số lượng tệp không còn quan trọng nữa. Ngoài ra, các trình duyệt sẽ đặt các tệp css truy vấn phương tiện không phù hợp với mức độ ưu tiên thấp hơn để tải xuống và quan trọng hơn là sẽ không BLOCK kết xuất trang.
dinois

3

Bạn nên phân chia các tệp CSS của mình dựa trên các truy vấn phương tiện vì các tệp CSS bị chặn kết xuất.

Khi trình duyệt đang xây dựng DOM của bạn, trước tiên nó phải chờ và tải tất cả các tệp CSS của bạn. Bạn sẽ giảm thời gian tải trang nếu một số tệp CSS của bạn chỉ được tải dựa trên các truy vấn phương tiện nhất định.

Điều này cũng áp dụng cho việc thêm async vào thẻ script JavaScript; cựu .: <script src='myfile.js' async></script>.

DOM không phải đợi tệp JS của bạn tải. Chỉ thêm async nếu việc xây dựng DOM của bạn không cần bất kỳ JavaScript nào khi tải.


Tôi đã nghe nói rằng nếu bạn thực sự không muốn các tập lệnh async của mình có khả năng trì hoãn kết xuất, hãy thực hiện chúng trên sự kiện window.onload thay vì sử dụng async.
Kevin Wheeler

2

Tôi muốn nói điều này.

Đối với sản xuất, luôn luôn giữ chúng trong một tập tin; lý do là nó hiệu quả hơn cho trình duyệt và đó phải là mối quan tâm chính của bạn (IMO) khi chuyển từ phát triển sang sản xuất.

Phát triển một ấm cá khác nhau. Tôi có xu hướng phân tách các truy vấn Media để chúng theo bất kỳ yếu tố nào, ví dụ:

.foo { // .. some css }
.foo:hover, .foo:focus { // hover css }
@media screen and (max-width: 400px) {
    .foo { // .. some differentcss }
}

Nói chung, nếu tôi thay đổi một yếu tố, tôi không muốn phải tìm kiếm khắp nơi cho CSS (mặc dù bạn có thể sử dụng một cái gì đó như grep ...).

Nhưng , một điều tôi muốn nói là nó đáng để xem xét chính trang web, quá trình phát triển và đáng tin cậy. Nếu bạn thực sự nghĩ rằng sẽ có giá trị tách chúng ra để sàng lọc các tệp dựa trên kích thước, hãy thử đi. Tạo một bản sao của trang web (nếu có thể), chơi xung quanh với bản sao - nếu nó dễ dàng hơn, hãy sử dụng nó. Bạn không cần tuân theo mô hình một kích cỡ phù hợp với tất cả các cách phát triển trang web.


1

Đơn giản: sử dụng 1 biểu định kiểu và chỉ cần thêm nhận xét cho chúng để giúp tìm và thay đổi các kiểu CSS dễ dàng hơn, vd:

//sheet 1 (mobile device 800 px)
code

//sheet 2 (mobile device 768 px)
code

//sheet 3 (mobile device 480 px)
code

//sheet 4 (desktop size 1024 px)
code

Nếu bạn muốn, bạn có thể sử dụng nhiều bảng định kiểu và gọi chúng cho từng kích thước cụ thể.


-1

Tôi thà nhìn vào Bootstrap . Đây là 1 tệp CSS chứa tất cả CSS. Nó hoạt động trên gần 99% trình duyệt và cực kỳ nhạy.

Nhấp vào bản demo trực tiếp phóng to ( Ctrl += phóng to, Ctrl -= thu nhỏ, Ctrl 0= bình thường) hoặc mở trên điện thoại di động của bạn để xem cách hiển thị.


2
Anh ấy đã viết 30kb CSS, làm thế nào để chuyển sang bootstrap có thể có lợi?
Steve Sanders

Đặt nó theo cách đó, vâng tôi đồng ý 30kb css là một nhiệm vụ để làm lại. Tôi chỉ cần sao chép và dán nó vào các bảng định kiểu khác nhau, tất cả tùy thuộc vào cách cấu trúc của nó, bạn có thể sao chép và đổi tên các tệp css và loại bỏ tất cả các phần không cần thiết.
Trân trọng Ogies Myburgh
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.