有些 CSS 屬性較新,像是 CSS grid 等,不一定每個瀏覽器都會支援此 CSS 屬性,為了讓不同版本的瀏覽器都能正確顯示該 CSS 樣式,需在 CSS 屬性前加上瀏覽器前綴詞讓瀏覽器可兼容此 CSS 屬性
不同瀏覽器有不同的 CSS 前綴詞,寫法是在前綴詞前後加上 -
參考此文章列出不同瀏覽器前綴詞
Vendor Prefix - MDN Web Docs Glossary: Definitions of Web-related terms | MDN
最常看到的會是 -webkit-
,適用於 chrome、Safari、新版的 Opera 瀏覽器、大部分的 iOS 瀏覽器,以及其他以 WebKit 為引擎的瀏覽器
其他還有 -moz-
適用於 Firefox;-o-
適用於未以 WebKit 為引擎的 Opera 瀏覽器;-ms
- 適用於 Internet Explorer and Microsoft Edge
若有 CSS 屬性需兼容各瀏覽器,以 transition 屬性為例,就會寫成以下
-webkit-transition: all 4s ease;
-moz-transition: all 4s ease;
-ms-transition: all 4s ease;
-o-transition: all 4s ease;
transition: all 4s ease;
因此若看到這樣的寫法,看似同一個屬性重複寫很多次,是正常的
自己在寫 CSS 時,其實不常使用到前綴詞,但是在看其他像是 bootstrap 的 CSS 時,會常看到前綴詞的使用
https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.css
像是 .btn 的 user-select
.btn {
display: inline-block;
font-weight: 400;
color: #212529;
text-align: center;
vertical-align: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-color: transparent;
border: 1px solid transparent;
padding: 0.375rem 0.75rem;
font-size: 1rem;
line-height: 1.5;
border-radius: 0.25rem;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
前綴詞也可以加在屬性值的前面,例如 bootstrap 的 flex 會加上 -ms- 前綴詞兼容 IE 或 Eage
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
需注意若有前綴詞的屬性,要先寫有前綴詞的樣式,再寫無前綴詞的樣式,這樣若適用無前綴詞的樣式才能吃到設定
參考資料:
https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix
css - What are -moz- and -webkit-? - Stack Overflow