2012-09-21 39 views
7

Để đạt được khả năng tương thích giữa các trình duyệt, chúng tôi có xu hướng sử dụng cả tiện ích mở rộng cụ thể của nhà cung cấp và cú pháp CSS3 chuẩn. Tôi biết CSS3 vẫn còn trong bản nháp, nhưng chúng tôi đã bắt đầu sử dụng nó. Nhưng câu hỏi đặt ra là, trật tự của nơi chúng xảy ra rất quan trọng?Đặt hàng theo cú pháp CSS3 Vs Standard CSS3 của nhà cung cấp

Ví dụ, cho phép nhìn thấy ở đây

-moz-border-radius: 10px; 
border-radius: 10px; 

này áp dụng trình duyệt cụ thể border-radius và sau đó rơi trở lại với phương pháp tiêu chuẩn, sau đó sẽ hy vọng được bỏ qua, nhưng vẫn còn.

Tương tự, chuyển đổi thứ tự của chúng

border-radius: 10px; 
-moz-border-radius: 10px; 

Bây giờ, điều này cố gắng cú pháp tiêu chuẩn đầu tiên và sau đó rơi trở lại để mở rộng dựa trên trình duyệt.

Có sự khác biệt nào do lệnh đặt hàng không? Có thể là về hiệu suất hoặc người nào khác.

+0

__P.S .__ Không phải là bản sao của http://stackoverflow.com/questions/8131846/why-do-browsers-create-vendor-prefixes-for-css-properties :) – Starx

Trả lời

2

Khi viết thuộc tính CSS3, sự khôn ngoan hiện đại là liệt kê thuộc tính "thực" cuối cùng và tiền tố của nhà cung cấp trước tiên.

Một điều khác cần suy nghĩ khi bạn thực hiện thuộc tính không có tiền tố là đặt nó sau phiên bản có tiền tố của nhà cung cấp. Khi trình duyệt triển khai phiên bản tiêu chuẩn của thuộc tính, như được chỉ định trong đặc tả CSS3 có liên quan, bạn có thể muốn sử dụng triển khai đó thay vì phiên bản thử nghiệm, cụ thể cho trình duyệt (phiên bản này có khả năng vẫn hỗ trợ tương thích ngược) . Đặt nó cuối cùng nên đảm bảo rằng nó sẽ ghi đè lên việc thực hiện tiền tố của nhà cung cấp.

Xem Ordering CSS3 Properties

Xem thêm: Remember non-vendor-prefixed CSS 3 properties (and put them last)

+0

Có, tôi biết cái đó. Nhưng câu hỏi là, tại sao ?? Lý do đằng sau sự khôn ngoan hiện đại này là gì? – Starx

+0

Xem câu trả lời cập nhật .. –

+0

Trên báo giá của bạn 'ghi đè lên việc thực hiện tiền tố của nhà cung cấp, đó là một trong những mối quan tâm của tôi. Điều này có làm tăng vấn đề hiệu suất không? – Starx

2

Trình tự các tiền tố không quan trọng, miễn là bạn giữ cho phiên bản tiêu chuẩn trong tương lai như trước.

Nếu trình duyệt không hỗ trợ tiền tố, trình duyệt sẽ chỉ bỏ qua quy tắc và thực thi phiên bản chuẩn.

ps: giống như A.K. nhưng đơn giản hơn, vì vậy bạn không phải đọc tất cả các trang.

+0

Câu hỏi này đặc biệt nói về thứ tự của các thuộc tính tiêu chuẩn so với nhà cung cấp. Vì vậy, * tại sao * phiên bản tiêu chuẩn phải là cuối cùng? Ngoài ra, các trình duyệt thường hỗ trợ * cả hai * phiên bản tiêu chuẩn dành riêng cho nhà cung cấp và tiêu chuẩn của một thuộc tính trong một thời gian dài. * Nếu * họ bỏ hỗ trợ, nó sẽ không quan trọng mà trật tự các thuộc tính được in – 0b10011

+0

Bởi vì CSS dựa trên tầng, do đó, quy tắc cuối cùng sẽ overrule trước đó? Vì vậy, phiên bản tiêu chuẩn nên đi theo sau tiền tố. – Mark

+1

Tôi đã không yêu cầu tôi (tôi sẽ là người viết một câu trả lời không có câu trả lời nào khác được viết). Tôi chỉ đơn giản tin rằng điều này nên được làm rõ trong câu trả lời của bạn, đặc biệt là vì đó là những gì OP yêu cầu. Câu trả lời của bạn nói * những gì * để làm, nhưng không * tại sao * để làm điều đó. – 0b10011

6

Bây giờ, điều này sẽ thử cú pháp tiêu chuẩn trước và sau đó quay trở lại tiện ích dựa trên trình duyệt.

Đây có thể là một tuyên bố gây hiểu lầm. Trình duyệt tuân thủ sẽ thử thuộc tính không được cố định chuẩn trước tiên, nhưng nếu nó cũng hỗ trợ thuộc tính tiền tố ngoài tiêu chuẩn, sau đó nó cũng sẽ áp dụng tiền tố đó. Điều này thường dẫn đến việc khai báo tiêu chuẩn bị ghi đè bởi khai báo tiền tố và khả năng thực thi không chuẩn của trình duyệt của thuộc tính đó, đánh bại mục đích của việc có thuộc tính chuẩn ở đó ngay từ đầu.

Lý do tại sao bạn nên khai báo thuộc tính chưa được sửa cuối cùng là vì đó là cách thuộc tính xếp tầng trong quy tắc: trình duyệt sẽ luôn sử dụng thuộc tính áp dụng cuối cùng.Các phiên bản tiền tố và không cố định của thuộc tính được coi là thuộc tính tương tự đối với thác, vì vậy bạn muốn trình duyệt làm hết sức để tuân thủ các tiêu chuẩn khi áp dụng thuộc tính đó.

Nếu trình duyệt thực hiện tiền tố nhưng không chuẩn, thì tốt, nhưng nếu nó thực hiện cả hai, bạn muốn đảm bảo nó sử dụng tiêu chuẩn thay thế. Bạn làm điều này bằng cách khai báo thuộc tính chuẩn cuối cùng.


Theo như tôi biết điều này không phải được quyết định bởi spec, bởi vì như xa như spec là phần mở rộng nhà cung cấp liên quan là phi tiêu chuẩn và vì vậy thực hiện của họ không thể được mô tả. Mặc dù các syntax of vendor prefixes được mô tả trong spec, triển khai hoàn toàn trái theo quyết định của các nhà cung cấp.

Tuy nhiên, hầu hết các nhà phát triển trình duyệt đều tuân thủ các quy tắc của thuộc tính hoặc quy tắc được chuẩn hóa trước để luôn xử lý cả hai phiên bản tiền tố và không được cố định làm bí danh của nhau.

+0

"Tiện ích mở rộng của nhà cung cấp cụ thể" là một phần của thông số CSS trong một thời gian khá dài: http://www.w3.org/TR/CSS21/syndata.html#vendor-keywords – Rob

+0

1) Đó là thông số CSS2.1 2) Điều đó chỉ mô tả cú pháp, chứ không phải thực hiện. Cú pháp được định nghĩa cho những người triển khai thực hiện khi tạo các thuộc tính không chuẩn. Các thuộc tính tiền tố này không phải là một phần của tiêu chuẩn và hoàn toàn còn lại cho các nhà cung cấp để thực hiện theo cách mà họ muốn. Thông số kỹ thuật không cho biết cách thực hiện các thuộc tính có tiền tố. – BoltClock

+0

Và ở đâu có cú pháp phải có triển khai. EDIT: Oh, chờ đợi. Tôi hiểu rồi. Có lẽ bạn đang nói việc thực hiện là phi tiêu chuẩn và không phải tiền tố của nhà cung cấp. – Rob

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