Kiểm tra trình duyệt hỗ trợ CSS
Đầu năm 2017, tôi đã trình bày một vài hội thảo về chủ đề phát hiện tính năng CSS, có tiêu đề Phát hiện tính năng CSS năm 2017 Show
Một người bạn của tôi, Justin Slack từ New Media Labs, gần đây đã gửi cho tôi một liên kết đến tiện ích mở rộng Trình quản lý truy vấn tính năng phi thường (có sẵn cho cả Chrome và Firefox), của nhà phát triển người Nigeria Ire Aderinokun. Đây dường như là một bổ sung hoàn hảo cho tài liệu hội thảo của tôi về chủ đề này Tuy nhiên, khi quay lại tài liệu, tôi nhận ra công việc của mình về chủ đề này đã cũ đi bao nhiêu trong 18 tháng qua Cảnh quan CSS đã trải qua một số thay đổi kiến tạo
Điều trên thôi thúc tôi không chỉ xem lại tài liệu hiện có của mình mà còn suy nghĩ về trạng thái phát hiện tính năng CSS trong 18 tháng tới Nói ngắn gọn
CSS tương thích với nhiều trình duyệtKhi làm việc với CSS, có vẻ như một trong những mối quan tâm hàng đầu luôn là hỗ trợ tính năng không nhất quán giữa các trình duyệt. Điều này có nghĩa là kiểu dáng CSS có thể trông hoàn hảo trên các trình duyệt tôi chọn, nhưng có thể bị hỏng hoàn toàn trên một trình duyệt khác (có lẽ còn phổ biến hơn) May mắn thay, xử lý hỗ trợ trình duyệt không nhất quán là chuyện nhỏ do một tính năng chính trong thiết kế của chính ngôn ngữ CSS. Hành vi này, được gọi là khả năng chịu lỗi, có nghĩa là trình duyệt bỏ qua mã CSS mà họ không hiểu. Điều này hoàn toàn trái ngược với các ngôn ngữ như JavaScript hoặc PHP dừng mọi thực thi để đưa ra lỗi Hàm ý quan trọng ở đây là nếu chúng ta phân lớp CSS phù hợp, các thuộc tính sẽ chỉ được áp dụng nếu trình duyệt hiểu ý nghĩa của chúng. Ví dụ: bạn có thể bao gồm quy tắc CSS sau và trình duyệt sẽ bỏ qua nó— ghi đè màu vàng ban đầu, nhưng bỏ qua giá trị vô nghĩa thứ ba
Để minh họa cách điều này có thể được sử dụng trong thực tế, hãy để tôi bắt đầu với một tình huống giả định nhưng đơn giản Một khách hàng đến với bạn với mong muốn mạnh mẽ đưa lời kêu gọi hành động (ở dạng cửa sổ bật lên) trên trang chủ của họ. Với kỹ năng front-end tuyệt vời của mình, bạn có thể nhanh chóng tạo ra thông báo bật lên khó chịu nhất mà con người từng biết Thật không may, hóa ra vợ anh ta có một máy Windows XP cũ chạy Internet Explorer 8. Bạn bị sốc khi biết rằng những gì cô ấy nhìn thấy không còn giống với cửa sổ bật lên ở bất kỳ hình dạng hoặc hình thức nào Nhưng mà. Chúng tôi nhớ rằng bằng cách sử dụng khả năng chịu lỗi kỳ diệu của CSS, chúng tôi có thể khắc phục tình trạng này. Chúng tôi xác định tất cả các phần nhiệm vụ quan trọng của phong cách (e. g. , cái bóng là tốt để có, nhưng không thêm bất kỳ thứ gì hữu ích về khả năng sử dụng) và bộ đệm chuẩn bị trước tất cả kiểu dáng cốt lõi với dự phòng Điều này có nghĩa là CSS của chúng ta bây giờ trông giống như sau (phần ghi đè được tô sáng cho rõ ràng)
Ví dụ trên thường thuộc cách tiếp cận rộng hơn của Nâng cao lũy tiến. Nếu bạn muốn tìm hiểu thêm về Nâng cao tiến bộ, hãy xem ấn bản thứ hai của Aaron Gustafson trong cuốn sách xuất sắc của anh ấy về chủ đề này, có tiêu đề Thiết kế web thích ứng. Chế tạo trải nghiệm phong phú với tính năng tăng cường lũy tiến (2016) Nếu bạn là người mới bắt đầu phát triển giao diện người dùng, bạn có thể thắc mắc làm thế quái nào mà một người biết được mức độ hỗ trợ của các thuộc tính CSS cụ thể. Câu trả lời ngắn gọn là bạn càng làm việc với CSS nhiều, bạn sẽ càng học thuộc lòng những điều này. Tuy nhiên, có một số công cụ có thể giúp chúng tôi trên đường đi
Ngay cả khi chúng tôi có tất cả những điều trên, việc học thuộc lòng hỗ trợ CSS sẽ giúp chúng tôi lập kế hoạch tạo kiểu từ trước và tăng hiệu quả khi viết nó Giới hạn của khả năng chịu lỗi CSSTuần sau, khách hàng của bạn trở lại với một yêu cầu mới. Anh ấy muốn thu thập một số phản hồi từ người dùng về những thay đổi trước đó đã được thực hiện cho trang chủ—một lần nữa, với cửa sổ bật lên Một lần nữa, nó sẽ trông như sau trong Internet Explorer 8 Lần này chủ động hơn, bạn sử dụng các kỹ năng dự phòng mới của mình để thiết lập mức kiểu dáng cơ bản hoạt động trên Internet Explorer 8 và kiểu dáng nâng cao cho mọi thứ khác. Thật không may, chúng tôi vẫn gặp sự cố… Để thay thế các nút radio mặc định bằng trái tim ASCII, chúng tôi sử dụng phần tử giả 0. Tuy nhiên, phần tử giả này không được hỗ trợ trong Internet Explorer 8. Điều này có nghĩa là biểu tượng trái tim không hiển thị; . Ngụ ý là cả hành vi thay thế lẫn hành vi mặc định đều không được hiển thịGhi công cho John Faulds vì đã chỉ ra rằng thực sự có thể khiến phần tử giả 0 hoạt động trong Internet Explorer 8 nếu bạn thay thế cú pháp dấu hai chấm chính thức bằng một dấu hai chấmNói tóm lại, chúng tôi có một quy tắc ( 1) mà việc thực thi của nó không bị ràng buộc với hỗ trợ của chính nó (và do đó là cấu trúc dự phòng của chính nó), nhưng với mức hỗ trợ của một tính năng CSS hoàn toàn riêng biệt ( 0)Đối với tất cả ý định và mục đích, cách tiếp cận phổ biến là khám phá liệu có giải pháp đơn giản hơn mà không dựa vào 0. Tuy nhiên, vì lợi ích của ví dụ này, giả sử rằng giải pháp trên là không thể thương lượng (và đôi khi là như vậy)Nhập Phát hiện tác nhân người dùngMột giải pháp có thể là xác định trình duyệt mà người dùng đang sử dụng và sau đó chỉ áp dụng 1 nếu trình duyệt của họ hỗ trợ phần tử giả 0Trên thực tế, cách tiếp cận này gần như lâu đời như chính trang web. Nó được gọi là Phát hiện tác nhân người dùng hay thông tục hơn là đánh hơi trình duyệt Nó thường được thực hiện như sau
Điều này có nghĩa là việc thêm phần sau vào HTML của chúng ta là đủ 2Điều này có nghĩa là những điều trên sẽ được áp dụng, nếu trình duyệt là phiên bản Internet Explorer thấp hơn phiên bản 9 (IE 9 hỗ trợ 0)—ghi đè hiệu quả thuộc tính 1. Có vẻ đủ đơn giản phải không? Thật không may, theo thời gian, một số lỗi nghiêm trọng đã xuất hiện trong Phát hiện tác nhân người dùng. Nhiều đến mức Internet Explorer ngừng hỗ trợ Nhận xét có điều kiện từ phiên bản 10 trở đi. Bạn cũng sẽ nhận thấy rằng trong chính liên kết Mạng nhà phát triển Mozilla, phần sau đây được hiển thị trong một cảnh báo màu cam
Hạn chế lớn nhất của Phát hiện tác nhân người dùng là các nhà cung cấp trình duyệt bắt đầu giả mạo chuỗi tác nhân người dùng của họ theo thời gian do những điều sau
Hơn nữa, ngay cả khi chúng tôi có thể xác định chính xác mọi loại và phiên bản trình duyệt, chúng tôi sẽ phải tích cực duy trì và cập nhật Phát hiện tác nhân người dùng của mình để phản ánh trạng thái hỗ trợ tính năng của các trình duyệt đó (mặc dù các trình duyệt thậm chí còn chưa được phát triển) Điều quan trọng cần lưu ý là mặc dù có những điểm tương đồng bề ngoài giữa phát hiện tính năng và Phát hiện tác nhân người dùng, nhưng phát hiện tính năng có một cách tiếp cận hoàn toàn khác so với Phát hiện tác nhân người dùng. Theo Mạng nhà phát triển Mozilla, khi chúng tôi sử dụng tính năng phát hiện, về cơ bản chúng tôi đang làm như sau
Chúng ta cũng có thể xem Wikipedia để có định nghĩa chính thức hơn (nhấn mạnh của tôi)
Mặc dù hơi bí truyền nhưng định nghĩa này làm nổi bật hai khía cạnh quan trọng của việc phát hiện tính năng
Phát hiện tính năng CSS với @supports
Hầu hết các trình duyệt hiện đại đều hỗ trợ một bộ quy tắc CSS gốc được gọi là quy tắc có điều kiện CSS. Những điều này cho phép chúng tôi kiểm tra các điều kiện nhất định trong chính biểu định kiểu. Lần lặp lại mới nhất (được gọi là mô-đun cấp 3) được Nhóm làm việc Cascading Style Sheets mô tả như sau
Nếu bạn đã từng sử dụng 29, 30 hoặc 31 thì bạn đã có kinh nghiệm làm việc với các quy tắc có điều kiện của CSS. Ví dụ: khi sử dụng truy vấn phương tiện CSS, chúng tôi thực hiện như sau
Thông số truy vấn tính năng (bản nháp của biên tập viên) quy định hành vi tương tự như ví dụ trên. Thay vì sử dụng biểu thức truy vấn để đặt điều kiện dựa trên kích thước màn hình, chúng tôi viết một biểu thức để xác định phạm vi khối mã của mình theo hỗ trợ CSS của trình duyệt (nhấn mạnh của tôi)
Tóm lại, truy vấn tính năng là một công cụ CSS tích hợp nhỏ cho phép chúng tôi chỉ thực thi mã (như ví dụ 1 ở trên) khi trình duyệt hỗ trợ một tính năng CSS riêng biệt—và giống như truy vấn phương tiện, chúng tôi có thể xâu chuỗi các biểu thức như sau. 32Vì vậy, về mặt lý thuyết, chúng ta sẽ có thể làm như sau 3Thật không may, có vẻ như trong ví dụ của chúng tôi ở trên, thuộc tính 1 không kích hoạt, mặc dù thực tế là trình duyệt của bạn có thể hỗ trợ 0Đó là bởi vì có một số lưu ý khi sử dụng 35
Phát hiện tính năng CSS với ModernizrMay mắn thay, cách khắc phục khá dễ dàng. Nó xuất hiện dưới dạng một thư viện JavaScript mã nguồn mở có tên Modernizr, ban đầu được phát triển bởi Faruk Ateş (mặc dù hiện tại nó có một số tên tuổi khá lớn đằng sau nó, như Paul Irish từ Chrome và Alex Sexton từ Stripe) Trước khi tìm hiểu về Modernizr, chúng ta hãy giải quyết một chủ đề gây nhầm lẫn lớn cho nhiều nhà phát triển (một phần do chính cái tên “Modernizr”). Modernizr không biến đổi mã của bạn hoặc kích hoạt một cách kỳ diệu các tính năng không được hỗ trợ. Trên thực tế, thay đổi duy nhất mà Modernzr thực hiện đối với mã của bạn là thêm các lớp CSS cụ thể vào thẻ 51 của bạnĐiều này có nghĩa là bạn có thể kết thúc với một cái gì đó như sau 3Đó là một thẻ HTML lớn. Tuy nhiên, nó cho phép chúng ta làm điều gì đó siêu mạnh mẽ. sử dụng bộ chọn hậu duệ CSS để áp dụng có điều kiện các quy tắc CSS Khi Modernizr chạy, nó sử dụng JavaScript để phát hiện những gì trình duyệt của người dùng hỗ trợ và nếu nó hỗ trợ tính năng đó, Modernizr sẽ thêm tên của nó dưới dạng một lớp vào 51. Ngoài ra, nếu trình duyệt không hỗ trợ tính năng này, nó sẽ thêm tiền tố vào lớp được thêm vào bằng 53 (e. g. , 54 trong ví dụ 0 của chúng tôi). Điều này có nghĩa là chúng ta có thể viết quy tắc có điều kiện của mình trong biểu định kiểu như sau 5Ngoài ra, chúng tôi có thể sao chép chuỗi các biểu thức 35 trong Modernizr như sau 3Vì Modernizr chạy bằng JavaScript (và không sử dụng bất kỳ API trình duyệt gốc nào), nó được hỗ trợ hiệu quả trên hầu hết các trình duyệt. Điều này có nghĩa là bằng cách tận dụng các lớp như 57 và 58, chúng tôi có thể bao gồm tất cả các cơ sở của mình cho Internet Explorer 8, trong khi vẫn cung cấp CSS tiên tiến nhất cho các trình duyệt mới nhấtĐiều quan trọng cần lưu ý là kể từ khi phát hành Modernizr 3. 0, chúng tôi không còn có thể tải xuống tệp 59 tiêu chuẩn chứng khoán với mọi thứ ngoại trừ bồn rửa trong nhà bếp. Thay vào đó, chúng tôi phải tạo rõ ràng mã Modernizr tùy chỉnh của riêng mình thông qua trình hướng dẫn của họ (để sao chép hoặc tải xuống). Điều này rất có thể là để đáp ứng với sự tập trung toàn cầu ngày càng tăng vào hiệu suất web trong vài năm qua. Kiểm tra nhiều tính năng hơn góp phần tải nhiều hơn, vì vậy Modernizr muốn chúng tôi chỉ kiểm tra những gì chúng tôi cầnVì vậy, tôi nên luôn luôn sử dụng Modernizr?Cho rằng Modernizr được hỗ trợ hiệu quả trên tất cả các trình duyệt, liệu có bất kỳ điểm nào trong việc sử dụng các truy vấn tính năng CSS không? Đầu tiên và quan trọng nhất, việc Modernizr không cắm trực tiếp vào API trình duyệt là điểm mạnh nhất của nó—nó không phụ thuộc vào tính khả dụng của một API trình duyệt cụ thể. Tuy nhiên, lợi ích này đi kèm với chi phí và chi phí đó là chi phí bổ sung cho một số thứ mà hầu hết các trình duyệt hỗ trợ thông qua 35—đặc biệt là khi bạn phân phối chi phí bổ sung này cho tất cả người dùng một cách bừa bãi để hướng tới một lượng nhỏ người dùng biên. Điều quan trọng cần lưu ý là, trong ví dụ của chúng tôi ở trên, Internet Explorer 8 hiện chỉ đứng ở mức 0. 18% sử dụng toàn cầu)So với cảm ứng nhẹ của 35 thì Modernizr có những nhược điểm sau
Cho rằng các truy vấn tính năng đã được triển khai rộng rãi trên toàn bộ trình duyệt, (bao gồm khoảng 93. 42% trình duyệt toàn cầu tại thời điểm viết), tôi đã sử dụng Modernizr được một thời gian rồi. Tuy nhiên, thật tốt khi biết rằng nó tồn tại dưới dạng tùy chọn nếu chúng tôi gặp phải các hạn chế của 35 hoặc nếu chúng tôi cần hỗ trợ người dùng vẫn bị khóa trong các trình duyệt hoặc thiết bị cũ hơn vì nhiều lý do tiềm ẩnHơn nữa khi sử dụng Modernizr thường kết hợp với 35 như sau 4Điều này kích hoạt những điều sau đây xảy ra
Tương lai của tính năng phát hiện tính năng CSSCho đến thời điểm này, tôi đã tránh nói về việc phát hiện tính năng trong một thế giới đang bị JavaScript nuốt chửng, hoặc thậm chí có thể là một thế giới hậu JavaScript. Có lẽ thậm chí cố ý như vậy, vì các lần lặp lại hiện tại ở giao điểm giữa CSS và JavaScript cực kỳ gây tranh cãi và chia rẽ
Tuy nhiên, tôi nghĩ rằng việc khám phá cách áp dụng tính năng phát hiện trong chuỗi công cụ CSS-in-JS hiện đại có thể có giá trị như sau
Với suy nghĩ này, chúng ta hãy bắt đầu bằng cách kiểm tra việc triển khai cửa sổ bật lên của mình bằng thư viện CSS-in-JS được sử dụng rộng rãi nhất (ít nhất là tại thời điểm viết bài), Styled Components Đây là giao diện của nó trong Internet Explorer 8 Trong các ví dụ trước của chúng tôi, chúng tôi đã có thể thực thi các quy tắc CSS một cách có điều kiện dựa trên sự hỗ trợ của trình duyệt của 0 (thông qua Modernizr) và 45 (thông qua 35). Tuy nhiên, bằng cách tận dụng JavaScript, chúng tôi có thể tiến xa hơn nữa. Vì cả 35 và Modernizr đều hiển thị API của họ thông qua JavaScript, nên chúng tôi có thể tải toàn bộ các phần của cửa sổ bật lên của mình một cách có điều kiện chỉ dựa trên sự hỗ trợ của trình duyệtHãy nhớ rằng bạn có thể sẽ cần phải thực hiện rất nhiều công việc nặng nhọc để React và Styled Components hoạt động trong một trình duyệt thậm chí không hỗ trợ 0 (kiểm tra 49 có thể hợp lý hơn trong ngữ cảnh này), nhưng vì mục đích duy trì Trong ví dụ trên, bạn sẽ nhận thấy rằng chúng tôi đã tạo một thành phần, được gọi là 80. Thành phần này trả về một nút có thể nhấp để tăng số lượt thích khi nhấp. Nếu bạn đang xem ví dụ trên trình duyệt cũ hơn một chút, bạn có thể nhận thấy rằng thay vì nút, bạn sẽ thấy danh sách thả xuống có giá trị từ 0 đến 9Để đạt được điều này, chúng tôi chỉ trả lại phiên bản nâng cao của thành phần theo điều kiện nếu các điều kiện sau được đáp ứng 8Điều hấp dẫn về cách tiếp cận này là thành phần 80 chỉ hiển thị hai tham số
1Nói cách khác, logic của thành phần hoàn toàn tách biệt với cách trình bày của nó. Bản thân thành phần sẽ quyết định nội bộ bản trình bày nào hoạt động tốt nhất với ma trận hỗ trợ của trình duyệt. Bản thân phần trình bày có điều kiện được trừu tượng hóa bên trong thành phần sẽ mở ra cơ hội cho những cách mới thú vị để xây dựng giao diện tương thích với nhiều trình duyệt khi làm việc trong nhóm thiết kế và/hoặc giao diện người dùng Đây là sản phẩm cuối cùng …và nó sẽ trông như thế nào về mặt lý thuyết trong Internet Explorer 8 Tài nguyên bổ sungNếu bạn muốn tìm hiểu sâu hơn về những điều trên, bạn có thể truy cập các tài nguyên sau
Schalk là một nhà phát triển/nhà thiết kế front-end người Nam Phi đam mê công nghệ vai trò và web có thể đóng vai trò là động lực cho những điều tốt đẹp ở quê hương của anh ấy. Anh ấy làm việc toàn thời gian với một nhóm các nhà phát triển có đầu óc công nghệ dân sự tại một tổ chức phi lợi nhuận của Nam Phi có tên là OpenUp Anh ấy cũng giúp quản lý một không gian cộng tác có tên Codebridge, nơi các nhà phát triển được khuyến khích đến và thử nghiệm công nghệ như một công cụ để thu hẹp khoảng cách xã hội và giải quyết các vấn đề cùng với cộng đồng địa phương Làm cách nào để kiểm tra tính tương thích của trình duyệt trong CSS?3 kỹ thuật CSS để cải thiện khả năng tương thích giữa các trình duyệt . Đặt màu gradient trên div trong các trình duyệt khác nhau. Trước khi bắt đầu, hãy hiểu gradient là gì. . Đặt bán kính đường viền trong Trình duyệt phổ biến (Mozilla, Chrome, Safari, Opera). Đặt hình nền cho các thẻ được chọn trong Chrome CSS3 có được hỗ trợ đầy đủ bởi tất cả các trình duyệt không?Cho đến bây giờ, hầu hết CSS mà bạn đã học đều được hỗ trợ đầy đủ trên tất cả các trình duyệt . Đối với các thuộc tính mới hơn, từ CSS3 trở lên, điều đó không phải lúc nào cũng đúng. Điều quan trọng là phải kiểm tra tính tương thích của một thuộc tính để biết liệu bạn có nên sử dụng nó hay không.
Làm cách nào để phát hiện trình duyệt Safari trong CSS?Giống như một dự án thực sự, hãy sử dụng những dòng này ở đầu CSS của bạn để nhập chúng dưới dạng phần phụ thuộc. . @import "susy" Thêm. Giới thiệu về Susy. . @import "điểm ngắt" Thêm. Giới thiệu về Điểm dừng. . @import "color-schemer" Thêm. Giới thiệu về Máy phối màu. . @nhập "bourbon@5. *" Cộng. Về Bourbon. . @import "gọn gàng@4. *" Cộng. Về gọn gàng. . @nhập "mô-đun@3. *" Cộng Trình duyệt nào hỗ trợ lưới CSS?Các trình duyệt hỗ trợ
. Safari, Chrome, Opera, Firefox and Edge. |