Share vì hữu ích

autoprefixer là công cụ giúp tự động tạo ra các prefix tương thích trình duyệt trong CSS của bạn, được sử dụng trong Node và gulp flow.

autoprefixer là gì?

Hãy lật ngược vấn đề. Nếu không dùng autoprefixer , mỗi dòng code của bạn sẽ cần viết tay thêm (trừ trường hợp xài các IDE như phpStorm có sẵn phần tạo này) khá nhiều các dòng code với prefix như -webkit, -moz,… cho mỗi trình duyệt.

Các trình duyệt phổ biến nhất

Với autoprefixer, cuộc đời bạn sẽ nở hoa. Bạn không cần nghĩ tới việc tạo ra các prefix để tránh bị bug trên các trình duyệt nữa. Mọi thứ sau khi được viết gọn gàng trong SASS/SCSS, LESS hoặc postCSS, sẽ được tự động thêm prefix trước khi output ra code CSS cuối cùng. Thật tuyệt phải không?

Hãy tưởng tượng, bạn chỉ cần gõ:

.box { display: flex; }

Và kết quả cuối cùng sau khi sử dụng autoprefixer sẽ cho bạn kết quả:

.box {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}

Ngược lại, nếu có 1 prefix nào đó cũ và không cần trong code source của bạn vì các trình duyệt đều đã hỗ trợ, autoprefixer cũng sẽ gỡ bỏ nó.

Bạn có thể thử kiểm tra package này bằng cách nhập thử code CSS ở đây nữa nhé.

Package tuyệt vời này còn có sẵn trên codepen.io nữa nhé để khi bạn làm nháp (không cần localhost) thì vẫn hỗ trợ các trình duyệt.

Cài đặt autoprefixer

Làm việc với gulp: Trong project đã cài Nodenpm install, bạn chạy dòng lệnh:

npm install --save-dev gulp-autoprefixer

Trong file gulpfile.js, bạn sẽ thiết lập như sau nhé:

var autoprefixer = require('gulp-autoprefixer');
gulp.task('style', function() {
  .src('src/scss/main.scss')
  .pipe(sass().on('error', sass.logError))
  .pipe(autoprefixer({
    browsers: [
      'last 3 versions',
      'iOS >= 8',
      'Safari >= 8',
      'ie 11',
    ]
  }))
  .pipe(gulp.dest('dist/css'))
})

Tuỳ chọn: Với option như ở trên, bạn sẽ thấy nó hỗ trợ IE11+, hệ điều hành iOS 8.4 trở lên. Để thiết lập các tuỳ chọn này, bạn cần đọc browserlist nhé.

Ngoài package dành cho gulp, nếu bạn muốn chạy với các thư viện khác thì có thể tham khảo trên Github.

Những mẹo hay sử dụng với autoprefixer

Tắt autoprefixer cho một số thành phần nhất định

Chẳng hạn, nếu bạn gặp 1 project mà có các thành phần sử dụng từ thư viện khác đã có sẵn autoprefixer và không muốn sử dụng ở các module có liên quan, ta sẽ làm như sau:

.hero {
  transition: 1s; /* it will be prefixed by default */
}
.pricing-table {
 /* autoprefixer: off */
  transition: 1s; /* it will not be prefixed */
}

Hỗ trợ autoprefixer trên các trình duyệt

Nếu bạn không sử dụng gulp package cài đặt ở trên nhưng vẫn muốn tính năng auto prefix này xuất hiện trong trình sửa code, bạn có thể tham khảo các plugin hỗ trợ dưới đây:

Kết luận

Nếu bạn vẫn phải tìm cách để code CSS hoạt động trên các trình duyệt như Firefox hay Safari, đã tới lúc thay đổi! Hãy để autoprefixer giúp bạn tối ưu hoá và giảm thời gian code thừa, code lặp nhé!

Share vì hữu ích

Tác giả: Khôi 'Pro' Nguyễn

Technical Lead tại Solis Lab. Quản lý ngôn ngữ tại vi.wordpress.org.

Trả lời