javascript
javascript
javascript
  • Lấy vị trí người dùng với javascript
  • [Problem] Lấy key đầu tiên tìm thấy chứa giá trị cần tìm (ok)
  • 🥸Đoạn mã JavaScript để thêm ký tự đặc biệt vào đầu mỗi dòng trong văn bản nhiều dòng (ok)
  • 😍Tạo ra font in đậm và copy đến website để sử dụng (ok)
  • Hiệu ứng mở sách cực đẹp
  • 🤩JS: Scroll Animation using Intersection Observer API 🤩 (ok)
  • 😅Draw svg on scroll Full (ok)
  • 😄Install Linguise on any domain dịch tự động (ok)
  • 😅Sử dụng ajax tạo popup cho các bài viết wordrpess mattervn.com (ok)
  • 😆PWA - beforeinstallprompt toplusgames.com (ok)
  • How to Use the HTML5 Full-Screen API (Again) (ok)
  • [ERROR GAME] fix lỗi không load iframe gamedistribution.com for toplusgames.com (ok)
  • 😅jQuery Plugin To Create Animated Placeholders - placeholderTypewriter (ok)
  • 😍Làm chức năng thông báo khách hàng đăng ký namkhoahanoi.vn (ok)
  • Tencent Captcha Demo (ok)
  • 😉Send Mail same javascript elasticemail (ok)
  • 🥳Các tool phong thuỷ (ok)
  • 😇Nice Select A lightweight Vanilla JavaScript plugin (ok)
  • Merge objects with the same id but sum values of the objects (ok)
  • 😅Page: DOMContentLoaded, load, beforeunload, unload phần 1 (ok)
  • 😍Scripts: async, defer phần 2(ok)
  • 😂Javascript Array chunkArrayInGroups(arr, size)
  • Sequentially Resolve Promises Works, Giải quyết tuần tự các lời hứa hoạt động (ok)
  • Using Async / Await with the Array Reduce Method API (ok)
  • Flatten an array of arrays,merge, làm phẳng một mảng các mảng (ok)
  • 😌Dependent Dropdown Full (ok)
  • 🥳Select Box Change Dependent Options dynamically (JavaScript Object)
  • 🤩Add elements dynamically full (ok)
  • 😅👌Multiple versions jquery (ok)
  • 😍Cách sử dụng jQuery trong sweetAlert2 là chúng ta phải sử dụng didOpen full (ok)
  • 😁😁 mdbgo.io, mdbootstrap.com full (ok)
  • 🤪Chú ý nếu lỗi cảnh báo từ khóa new nếu dùng trong js thường chúng ta sẽ sử dụng trong mudule (ok)
  • 😝reCAPTCHA javascript (ok)
  • Firework Simulator v2 Phao Hoa (ok)
  • Active scroll center (ok)
  • 🤪Sort array of objects by string property value (ok)
  • 😏findIndex, find index in Array object (ok)
  • 😂Sử dụng nhiều toán tử 3, multiple Ternary Operators (ok)
  • 😅A simple and easy to use library that creates fullscreen scrolling websites fullPage.js (ok)
  • Xây dựng ứng dụng CRUD sử dụng Vue.js trong Laravel (ok)
  • [Chart] Morris.js Line & Area Charts,Bar Charts, Donut Charts, graph (ok)
  • [Chart] Chart.js
  • Multi select checkbox table bootstrap (ok)
  • 😀jquery new, jquery old, jquery migrate (ok)
  • Popup slide up from the bottom overflowing other div blocks (ok)
  • ASYNC JavaScript (CALLBACK, PROMISES, ASYNC AWAIT) video (ok)
  • === START jQuery Mobile ===
  • Data Attributes full (ok)
  • Viết một ứng dụng Restaurant Picke sử dụng "back menu" (ok)
  • Viết một ứng dụng thời tiết, Weather sử dụng panel (ok)
  • jQuery Mobile Tutorial w3schools.com (ok)
  • jQuery Mobile
  • jQuery Mobile - Events (ok)
  • Back button in jquery mobile (ok)
  • === END jQuery Mobile ===
  • removeDuplicates, Remove duplicate values from JS array, remove all duplicates an array object (ok)
  • Sử dụng thư viện jquery.hoverdir.js để làm hiệu ứng hover tuyệt đẹp (ok)
  • Modernizr là gì ? Sử dụng nó cho những trình duyệt cũ ra sao? (ok)
  • Nhận biết tính năng CSS: Modernizr hay Feature Queries? (ok)
  • [SALESFORCE] Remote Action function in Visualforce Page (ok)
  • ScrollIt.js menu (ok)
  • Cách sử dụng scrollTo vanilla cực chất 😘 (ok)
  • Một bài toán xử lý bất đồng bộ trong kintone để lấy số requet quá giới hạn (OK)
  • hexagon thư viện tạo avatar Canvas (ok)
  • 😅Sử dụng Object.assign và để copy dữ liệu, edit, input, form (ok)
  • Một cách đặt và gán giá trị trong mảng, object cự ngắn gọn (ok)
  • [LAZY] jQuery.Lazy và tạo background-loading cực chất (ok)
  • Ví dụ Sử dụng sẵn thư viện masonry của wordpres (ok)
  • Ảnh base64 dùng làm src, placeholder (ok)
  • Kiểm tra hình ảnh đã được tải với thư viện imagesLoaded (ok)
  • Check if Function Exists before Calling? (ok)
  • Async/Await Javascript Full Example (ok)
  • Thenables in JavaScript phục vụ cho bài viết trên (ok)
  • Script distance, khoảng cách (ok)
  • Time, Date full (ok)
  • Function getAllDatesOfMonth (ok)
  • How do I make a placeholder for a 'select' box? (ok)
  • Library choise (ok)
  • jQuery - Redirect with post, Get data php (ok)
  • How to pass data from one page to another page html (ok)
  • how to send data onClick() to another php for processing using post or get?
  • draw grid, vẽ grid (ok)
  • Fullscreen Horizontal Page Slider with jQuery and CSS3 - HSlider scroll template html (ok)
  • _.template, UnderscoreJS Templates Full (ok)
  • Character limit on tag type input number (ok)
  • How to set maximum length in input type=number (ok)
  • ========= START JEST =======
  • Getting Started (ok)
  • Using Matchers (ok)
  • Testing Asynchronous Code
  • Setup and Teardown (ok)
  • Mock Functions
  • Jest Platform
  • Jest tutorial
  • Testing trong Javascript với Jest (Phần 1) (ok)
  • Testing trong Javascript với Jest (Phần 2)
  • Giới thiệu về Jest (Delightful JavaScript Testing)
  • Thử nghiệm phát triển theo hướng phản ứng với Jest và Enzyme
  • Cách kiểm tra các thành phần phản ứng với Jest và Enzyme, Phần 1
  • Cách kiểm tra thành phần phản ứng với Jest và Enzyme, Phần 2
  • Jest js mock jquey and lib
  • Unit testing Các thành phần React với Enzyme và Jest
  • Hướng dẫn viết unit test React với Jest và Enzyme (P1)
  • Tôi đã test các React component như thế nào? (phần 2)
  • Test component trong React với Jest
  • Test Component với Jest và Emzyme
  • Tổng quan về unit test cho dự án react redux saga với Jest Part 1
  • ========= END JEST =======
  • ======= START GULP TUTORIAL ======
  • [GULP] Tìm hiểu về Gulp.js
  • [GULP] Gulp Tutorial
  • [GULP] Gulp - Developing An Application (ok)
  • [GULP] Gulp - Combining Tasks (ok)
  • [GULP] Gulp - Watch (ok)
  • [GULP] Gulp - Live Reload
  • [GULP] Gulp - Optimizing CSS and JavaScript
  • [GULP] Gulp - Optimizing Images
  • [GULP] Gulp - Useful Plugins
  • [GULP] Gulp - Cleaning Unwanted Files
  • Đọc thêm những tài liệu trang khác
  • ======= END GULP TUTORIAL ======
  • Prevent form submission on Enter key press, keyCode (ok)
  • Lấy kích thước ảnh gốc image (ok)
  • 😆How to Center Carousel Slider (ok)
  • Putting Dots onto Owl Carousel Instead of below specialtouchgifts.com.au (ok)
  • Cách xây dựng một Full Screen Carousel với Owl.js
  • Lazy load với owl.carousel.js (ok)
  • Show half of the other item on Owl Carousel vinmec.com items: 1.5 (ok)
  • Show half of the other item on Owl Carousel vinmec.com stagePadding (ok)
  • ------------ Start Fetch -----------
  • Using Fetch Full
  • 😅Javascript Fetch JSON PHP Complete FormData phần 1(ok)
  • Một ví dụ quá đỉnh lấy dữ liệu của form submit trong js bằng đối tượng new FormData + php phần 2(ok)
  • Có một sự thật sử dụng async đồng nghĩa với trả về kết quả là PROMISE (ok)
  • 😅Promise.all full (ok)
  • All you need to know about Promise.all
  • [PROMISE] Promise.all()
  • [PROMISE] Tìm hiểu về promise trong ES6
  • [PROMISE] Introduction to Promises
  • jQuery off() Method (ok)
  • How to make HTTP requests with Axios
  • Axios vs Fetch - 2020 nên sử dụng thằng nào với những tính năng mới trong javascript
  • Get and Post method using Fetch API (ok)
  • Sử dụng JavaScript Fetch API với Async/Await (ok)
  • Xử lý lỗi cho fetch trong trường hợp không có kết nối hoặc kết nối lâu (ok)
  • ------------ End Fetch -----------
  • BigDataCloud Free Reverse Geocoding Javascript API Client (ok)
  • Vietmap API
  • 🥰Sử dụng API Giao hàng Nhanh để tính giá cước vận chuyển (ok)
  • photonsearch as you type with OpenStreetMap map (ok)
  • Leaflet - Một thư viện JS mã nguồn mở cho việc xây dụng ứng dụng bản đồ map (ok)
  • Xây dựng popup lấy vị trí map áp dụng pointfinder (ok)
  • Reverse Geocoding Convert Lat Long to Address map (ok)
  • Free Reverse Geocoding Javascript API map (ok)
  • [YAML] In Action Tutorial Series - General - Hướng dẫn sử dụng file YML YAML cơ bản
  • ----------------- Start Notification -----------------
  • Đối tượng caches object caches (ok)
  • Notification (ok)
  • Sử dụng indexedDB (ok)
  • Using the Notifications API (ok)
  • NotificationEvent (chưa có ví dụ :((
  • ServiceWorkerGlobalScope.onnotificationclick (ok)
  • ServiceWorkerRegistration.getNotifications(ok)
  • ServiceWorkerRegistration.showNotification(ok)
  • Giao tiếp giữa các cửa sổ với Window.postMessage API (ok)
  • Window open() Method (ok)
  • ----------------- End Notification -----------------
  • Example Cookie full (ok)
  • Thay đổi class active javascript bằng cách viết hàm (P1)
  • Thay đổi class active javascript bằng cách viết hàm (P2)
  • jQuery Mockjax Plugin (chưa học cách sử dụng)
  • jQuery Ajax X-editable bootstrap plugin (chưa học cách sử dụng)
  • Lọc theo điều kiện (filter) (ok)
  • Các ví dụ về filter
  • jQuery | grep() Method (ok)
  • Hai bài toán so sánh kinh điển trong javascript
  • Function random :)
  • Một cách sử dụng tab trong theme newspaper
  • Hiệu ứng scroll + animation + menu trượt mượt
  • Trigger a CSS animation on scroll xuongkhopbacninh.vn (ok)
  • App Css Loaded (scroll create link) (ok)
  • Hiệu tứng scroll cực chất (ok)
  • App Js Loaded (ok)
  • Sử dụng async và defer full (Oke)
  • Cách sử dụng Thuộc tính async và defer trong JavaScript hay
  • ReferenceError: Can't find variable: requestAnimationFrame
  • Đoạn code check lỗi PHP trong Ajax
  • [SELECT2] Sử dụng Select2 để thay thế select boxes
  • Một cách sử dụng lazyload khi addclass thật khó khăn...
  • Hiệu ứng croll chuột và % cực đẹp :_
  • Tạo chức năng tự động hoàn tất nhập liệu với thư viện jQuery UI Autocomplete (Phần 1)
  • Tạo chức năng tự động hoàn tất nhập liệu với thư viện jQuery UI Autocomplete (Phần 2)
  • JavaScript String split() Method (OK)
  • Sử dụng thư viện displace để làm menu kéo thả (ok):)))
  • Menu cực chất :)))
  • Sử dụng thư viện slick (ok)
  • vertical scroll, Vertical carousel (ok)
  • Google-like Thanos disintegration (ok)
  • Dùng thư viện jspdf
  • Công thức Toán học cho website
  • Fix lỗi tự động làm thay đổi độ cao :( vieclam123.vn :(
  • Sử dụng window.addEventListener để resize và responsive <3
  • Javascript create, read, and delete cookies (ok)
  • Tự động submit bằng javscript :))) (ok)
  • avoid form warning if user clicks refresh (ok)
  • Một cách truy cập phần tử bằng js thông qua id lạ :)))
  • Meta Refresh
  • Truyền dữ liệu từ javascript sang php
    • Sử dụng form để truyền sang php (ok)
    • Truyền giá trị theo file bằng đường dẫn (ok)
    • Dùng json để truyền sang php
  • auto-refresh page once only after first load – Using JavaScript / JQuery
    • auto-refresh page once only after first load – Using JavaScript / JQuery (ok)
  • Sticky Scroller
    • Sticky Scroller phần 1 (ok)
    • Sticky Scroller phần 2 (ok)
    • owl carousel with dotsContainer (Dots + Text) (ok)
    • Owl Carousel 2 Thumbnails plugin (ok)
  • easy_background Background Slideshow (ok) dev.vieclam123.vn
  • scroll cực chất timviec365.vn, vieclam123.vn (ok)
  • Thư viện lightslider-master gần giống với Owl Carousel
  • Thư viện lightGallery để làm những bộ Sưu tập Gallery
  • Tự viết click slide (ok)
  • Draggable & Touch-friendly Slider Carousel In Pure JS (ok)
  • Slider owl được viết dưới dạng Thumnail (0k)
  • jquery.js:5092 [Violation] Added non-passive event listener to a scroll-blocking 'touchstart' (ok)
  • Added non-passive event listener to a scroll-blocking 'touchstart' event (ok)
  • sticky-mobile-menu-burger-menu (ok)
  • How can I add class to the first and last item among the visible items of Owl Carousel 2? (ok)
  • Owl-carousel2 DEMO - items in 2 rows (oke)
  • How can I create a carousel slick with multiple rows? (ok)
  • Một cách sử dụng create <style> để thêm style (ok)
  • Two Rows Olw Carousel (ok) vieclam123.vn
  • Chức năng tự gọi Javascript (ok) tự động auto
  • Click Next Javascript Base (ok)
  • Slider owl được viết dưới dạng Thumnail viết trên jsfiddle (0k)
  • 😆Creating a Countdown Timer, dakhoathienhoa.com.vn (oK)
  • 🥸NumScroller, Counter From Zero To Value - Javascript Animation (ok)
  • Click Button background-hover white (ok)
  • CodePen HomeLazy Loading Images (Ok)
  • Custom Date Javasript (job247.vn)
  • Tooltip
  • button thay đổi thẻ tags button và span trong Owl Carousel thành thẻ khác :)) (ok)
  • Thêm class vào navigation Owl Carousel (ok)
  • Click lần đầu sử event.preventDefault(); lầu sau not event.preventDefault();
  • landscape && landscape (ok)
  • Landscape && Portrait (ok) job247.vn
  • Hammer thư viện JavaScript chạm cho màn hình cảm ứng
  • jQuery Plugin To Add CSS3 Scrolling Effects On Your Web Page - Smoove menu (ok)
  • 😃Auto Expanding Table Of Contents Plugin - Dynamic Content menu (ok)
  • Tornis - watch and respond
  • scroll-manager
  • Xem thêm
  • Hướng dẫn nấu món "Lazy loading image" theo chuẩn 5 sao Google
  • Welcome to jquery-confirm!
    • jQuery Message Box Plugin Demo Page
  • Magnific-Popup Popup img
  • Slider Swiper Slider-Swiper dùng viết slider giống app
  • Magnific Popup Documentation
  • filter search (ok)
  • Is it possible to convert a select menu to buttons? (ok)
  • Changing selected option on button click select (ok) homef.vn hoặc inop.vyanh.net
  • scrooll animation (job247.vn) (ok)
  • Select2 tutorial
    • Single select boxes (ok)
  • [SELECT2] Disabling a Select2 control (ok)
  • Disabling options (ok)
  • placeholder (ok)
  • Hiển thị nút xóa các giá trị đã chọn + allowClear (ok)
  • Đọc dữ liệu từ một mảng, Data sources (ok)
  • Sử dụng database + php (ok)
  • [SELECT2] Sử dụng form + select2 + ajax + get value (ok)
  • Đọc dữ liệu từ nguồn khác sử dụng AJAX (ok)
  • Thiết lập giá trị mặc định ban đầu trên HTML như bình thường (ok)
  • Sử dụng Ajax để tải dữ liệu từ một nguồn khác (ok)
  • change form
Powered by GitBook
On this page
  • Nhận biết tính năng bằng cách sử dụng Modernizr
  • Nhận biết tính năng sử dụng Feature Queries

Was this helpful?

Nhận biết tính năng CSS: Modernizr hay Feature Queries? (ok)

https://webdesign.tutsplus.com/vi/tutorials/css-feature-detection-modernizr-or-feature-queries--cms-23508

PreviousModernizr là gì ? Sử dụng nó cho những trình duyệt cũ ra sao? (ok)Next[SALESFORCE] Remote Action function in Visualforce Page (ok)

Last updated 3 years ago

Was this helpful?

Trong hướng dẫn này, tôi sẽ đi qua hai phương pháp tiếp cận để nhận biết một trình duyệt có hỗ trợ các tính năng nào đó của CSS hay không. Cái đầu tiên là tận dụng , một thư viện JavaScript phổ biến và cái thứ hai là , giải pháp CSS đầy hứa hẹn.

Vậy, chúng ta hãy bắt đầu!

Nhận biết tính năng bằng cách sử dụng Modernizr

Như đã đề cập ở trên, Modernizr là một thư viện JavaScript nhẹ dùng để nhận biết tính năng HTML5 và CSS3 trong trình duyệt của bạn. Ngay khi trang web của bạn được tải, nó chạy nền và thực hiện các kiểm tra tính năng. Sau đó, nó lưu trữ các kết quả như là các thuộc tính của một đối tượng JavaScript và các lớp của các phần tử html. Chúng ta sẽ tìm hiểu nhiều hơn về điều đó sau.

Để cài đặt và sử dụng Modernizr, bạn có thể truy cập vào và tải về phiên bản mong muốn.

Lưu ý: tại thời điểm viết bài, phiên bản hiện tại của Modernizr là 2.8.3, mặc dù phiên bản 3 là hầu như đã sẵn sàng. Trong thực tế, nhóm đứng đằng sau thư viện mong muốn phát hành nó trong những tuần lễ sắp tới. Tổng quan về phiên bản mới này có thể được tìm thấy . Hơn nữa, bạn có thể lấy phiên bản beta của nó bằng cách truy cập .

Sau khi tải về, đặt các tập tin JavaScript trong dự án của bạn và thêm nó vào trong <head> của trang html. Cuối cùng nhưng không kém phần quan trọng, để kích hoạt các chức năng của Modernizr bạn nên thêm lớp no-js vào phần tử html.

Trong hai phần tiếp theo, tôi sẽ bao quát những cái cơ bản của Modernizr. Với các khái niệm sâu hơn hãy đảm bảo là bạn đọc .

Nhận biết tính năng thông qua CSS

Như đã đề cập ở trên, Modernizr thêm một số lớp vào phần tử html. Tên lớp tuỳ thuộc vào trình duyệt hỗ trợ. Nếu trình duyệt không nhận biết một số bài kiểm tra tính năng, thì Modernizr thêm tiền tố no- trước tên lớp có sẵn của nó. Ví dụ, giả sử chúng ta đang kiểm tra hiệu ứng reflection, phần tử html trên Chrome 40 trông giống như thế này:

Trong khi trên Firefox 35:

Đồng thời lưu ý lớp js. Khi Modernizr chạy, giả sử JavaScript đã được kích hoạt trong trình duyệt của chúng ta, nó sẽ thay thế lớp no-js cũ bằng cái mới.

Dựa trên kết quả có được từ các bài kiểm tra của Modernizr, chúng ta có thể tuỳ biến CSS của chúng ta.

Ví dụ

Để bắt đầu, đây là mã HTML cơ bản mà chúng ta sẽ sử dụng cho phần còn lại của hướng dẫn:

1

<h2 id="reflection">CSS Reflections</h2>

Sử dụng các lớp được cho bởi Modernizr, chúng ta sửa đổi phong cách của phần tử h2 như sau:

0102030405060708091011121314151617181920212223

h2 { color: #c0ccdb; font-size: 3em;} .cssreflections h2 { -webkit-box-reflect: below -.45em -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(0%, transparent), to(rgba(255, 255, 255, 0.75)));} .no-cssreflections h2 { text-shadow: 0 1px 0 #136ed1, 0 2px 0 #126ac9, 0 3px 0 #1160b6, 0 4px 0 #105cad, 0 5px 0 #0f56a2, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 10px 10px rgba(0,0,0,.2), 0 20px 20px rgba(0,0,0,.15);}

Các trình duyệt dựa trên WebKit hỗ trợ tính năng reflections sẽ hiển thị phần tử h2 như sau:

Đây là ví dụ trên Codepen:

Nhận biết tính năng thông qua JavaScript

Cách thứ hai để kiểm tra kết quả các bài test của Modernizr là thông qua JavaScript. Như đã đề cập, Modernizr sẽ tạo ra một đối tượng với tên thuộc tính của các tính năng mà được cấu hình để kiểm tra. Hầu hết, giá trị trả về của chúng hoặc là true hoặc false.

Hình minh hoạt dưới đây cho thấy cách Firefox 35 hiển thị các đối tượng Modernizr (Tab giao diện dòng lệnh):

Như chúng ta có thể thấy thuộc tính Modernzir.cssreflections trả về một giá trị false. Điều đó xảy ra bởi vì, Chrome, Safari, và Opera là trình duyệt duy nhất, mà hỗ trợ tính năng reflections (tại thời điểm viết bài).

Dưới đây là cách mà chúng ta có thể tạo lại các ví dụ trước với JavaScript, bằng cách thêm các lớp reflection và no-reflection vào phần tử <h2 id="reflection"> một cách thủ công:

123456

var element = document.getElementById('reflection');if (Modernizr.cssreflections) { element.className = 'reflection';} else { element.className = 'no-reflection';}

Sau đó định phong cách các mã CSS thích hợp:

1234567

.reflection { /* apply reflection property */} .no-reflection { /* apply text-shadow property */}

Và demo mới trên Codepen:

Advertisement

Nhận biết tính năng sử dụng Feature Queries

Sẵn sàng để khám phá chứ?

Nhận biết thông qua CSS

Để định nghĩa feature queries trong CSS, chúng ta phải sử dụng các luật @supports và @supports not. Cú pháp của chúng trông như thế này:

1234567

@supports(test condition) { /* apply rules */} @supports not(test condition) { /* apply rules */}

Điều kiện bao gồm cặp thuộc tính: giá trị của các tính năng mà chúng ta muốn kiểm tra. Những trình duyệt mà hỗ trợ các tính năng áp dụng các luật mong muốn, thì chúng ta chỉ định trong luật @supports. Nếu không, các phong cách bên trong luật @supports not được áp dụng.

Sử dụng toán tử logic AND và/hoặc OR chúng ta có thể tạo các bài kiểm tra phức tạp. Tuy nhiên, hãy nhớ rằng các toán tử này nên được tách ra bằng dấu ngoặc đơn.

Hãy xem hai ví dụ. Như chúng ta đã biết, HTML của chúng ta là rất giản! Nó chỉ là một phần tử h2.

  1. Trình duyệt có hỗ trợ feature queries, nhưng không hỗ trợ CSS variables.

  2. Các trình duyệt không hỗ trợ feature queries cũng như CSS variables.

Tùy thuộc vào những trường hợp này, phần tử body sẽ hiển thị một background-color khác nhau.

Đây là mã CSS dựa trên các trường hợp ở trên:

01020304050607080910111213141516

body { --bg-color: #98FB98; background-color: khaki;} @supports (background-color: var(--bg-color)) { body { background-color: var(--bg-color); }} @supports not(background-color: var(--bg-color)) { body { background-color: tomato; }}

Ví dụ trên Safari, thuộc về loại thứ ba phần tử của chúng ta sẽ trông như thế này:

Sau đó Chrome, có thể biên dịch Feature Query, nhưng không hỗ trợ CSS variable, thuộc về thể loại thứ hai:

Cuối cùng Firefox, nằm trong mục đầu tiên:

Và ví dụ được nhúng từ Codepen:

Một ví dụ khác

Trong trường hợp này, chúng ta sẽ mở rộng điều kiện kiểm tra để chứa một luật thứ hai. Cụ thể hơn, bây giờ chúng ta đang nhắm các trình duyệt mà hỗ trợ không chỉ là CSS reflection mà còn các hiệu ứng text-stroke.

Đây là đoạn mã cho hành vi đó:

0102030405060708091011121314

@supports ((/* reflections condition */) and (-webkit-text-stroke: 1px tomato)) { h2 { /* apply reflection property */ -webkit-text-stroke: 1px tomato; }} @supports not ((/* reflections condition */) and (/*stroke condition*/)){ h2 { /* apply text-shadow property */ }}

Ví dụ, các trình duyệt (tại thời điểm bài viết này chỉ Chrome 28+) hỗ trợ feature queries, reflection và các hiệu ứng text-stroke sẽ hiển thị các phần tử h2 như sau:

Ở dưới là ví dụ được nhúng từ Codepen:

Advertisement

Nhận biết tính năng thông qua JavaScript

Feature queries còn có thể được định nghĩa thông qua JavaScript. Để làm như vậy, chúng ta phải sử dụng phương thức CSS.supports. Dưới đây là các tham số cơ thể có:

123

CSS.supports(propertyName, propertyValue) CSS.supports(test condition)

Kết quả của phương thức này là một giá trị Boolean xác định trình duyệt có hỗ trợ các các tính năng hay không. Cuối cùng, chúng ta nên nhóm các tham số trong một dấu ngoặc đơn hoặc dấu ngoặc kép.

Sử dụng phiên bản JavaScript của feature queries, ví dụ cuối cùng có thể được tạo lại như sau:

12345678

var result = CSS.supports('(/*reflections condition*/) and (/*stroke condition*/)'); var element = document.getElementById('reflection');if(result) { element.className = 'reflection';} else { element.className = 'no-reflection';}

Bản demo tương ứng:

Trình duyệt hỗ trợ

Trong khi phần còn lại của chúng (ít nhất là thuộc tính text-shadow đó) sẽ áp dụng một hiệu ứng khác, dựa trên một :

Không nghi ngờ gì, Modernizr là một công cụ có giá trị cho các nhà phát triển front-end. Nhưng có tốt hơn không, nếu chúng ta có thể tạo lại các bài kiểm tra của Modernizr bằng CSS thuần tuý? Rất may, chúng ta có thể làm điều đó bằng cách sử dụng . Đây là những luật có điều kiện mà cho phép chúng ta áp dụng các phong cách khác nhau tùy thuộc vào trình duyệt hỗ trợ. Chúng làm việc giống như media queries. Và vâng, bên cạnh phiên bản CSS, chúng cũng đang có cho JavaScript.

Trong ví dụ đầu tiên này, chúng ta sử dụng thuộc tính background-color để xác định màu nền của phần tử body. Để làm cho các thứ thú vị hơn, chúng ta cũng tạo một . Trình duyệt hỗ trợ được chia thành các loại sau:

Các trình duyệt mà có hỗ trợ feature queries và (hiện chỉ Firefox 31+).

Nói chung, trình duyệt có hỗ trợ tốt cho feature queries. Tại thời điểm viết bài thì Firefox (22+), Crom (28+), và Opera (12.1+) tất cả đều hỗ trợ tính năng CSS này. Hy vọng rằng, các phiên bản sắp tới của trình duyệt IE sẽ hiểu các điều kiện () tương tự

hiệu ứng chữ 3D bởi Mark Otto
feature queries
CSS variable
CSS variables
họ đang làm việc với nó!
Modernizr
feature queries
trang web của nó
ở đây
liên kết này
tài liệu hướng dẫn