目錄
示例
基础
自定义属性
var()函数
:root伪类
CSS变量的好处
可维护性
提高CSS的可读性
要注意的事
大小写敏感
自定义属性值的解析
回退值
无效值
浏览器对CSS变量的支持
首頁 web前端 html教學 CSS中的变量使用详解_html/css_WEB-ITnose

CSS中的变量使用详解_html/css_WEB-ITnose

Jun 24, 2016 am 11:42 AM

CSS中的变量给了我们诸多优点:方便、代码重用、更可靠的代码库和提升防错能力。

示例

:root { --base-font-size: 16px; --link-color: #6495ed; }p { font-size: var( --base-font-size ); }a { font-size: var( --base-font-size ); color: var( --link-color ); }
登入後複製

基础

当使用CSS变量时,你应该了解的三个主要组成:

  • 自定义属性
  • var()函数
  • :root伪类
  • 自定义属性

    你已经知道了一些CSS的标准属性,如color,margin,width和font-size。
    下面的示例使用了CSS的color属性:

    body { color: #000000; /* The "color" CSS property */ }
    登入後複製

    自定义属性仅意味着我们(创建CSS文件的人)去定义属性的名字。
    为了自定义一个属性名,我们需要用--作为前缀。
    如果我们要创建一个值为黑色的、名为text-color的自定义属性,可以这样做:

    :root { --text-color: #000000; /* A custom property named "text-color" */ }
    登入後複製

    var()函数

    为了应用自定义属性,需要利用var()函数,否则浏览器不知道他们代表什么。
    如果想要在p、h1和h2中的样式中使用--text-color,可以这样使用var()函数:

    :root { --text-color: #000000; }p { color: var( --text-color ); font-size: 16px; }h1 { color: var( --text-color ); font-size: 42px; }h2 { color: var( --text-color ); font-size: 36px; }
    登入後複製

    其等价于:

    p { color: #000000; font-size: 16px; }h1 { color: #000000; font-size: 42px; }h2 { color: #000000; font-size: 36px; }
    登入後複製

    :root伪类

    我们需要一个地方来放置自定义属性。虽然可以在任何样式规则中指定自定义属性,但到处定义属性并不是一个好主意,这对CSS的可维护性和可阅读性是一个挑战。
    :root 伪类代表了HTML文档的根元素,这是一个放置自定义属性的好位置,因为我们可以通过其他更具特异性的选择器来覆盖自定义属性值。

    CSS变量的好处

    可维护性

    在一个Web开发项目中,我们经常重复使用一个特定的CSS属性值:

    h1 { margin-bottom: 20px; font-size: 42px; line-height: 120%; color: gray; }p { margin-bottom: 20px; font-size: 18px; line-height: 120%; color: gray; }img { margin-bottom: 20px; border: 1px solid gray; }.callout { margin-bottom: 20px; border: 3px solid gray; border-radius: 5px; }
    登入後複製

    当需要改变某些属性值时,问题就会暴露出来了。
    如果我们手动的改变属性值,尤其是当CSS文件很大时,不仅会花费大量时间,还可能会范一些错误。同样的,如果我们执行一个批处理查找和替换,就可能会无意中影响其他样式规则。
    我们可以使用CSS变量重写:

    :root { --base-bottom-margin: 20px; --base-line-height: 120%; --text-color: gray; }h1 { margin-bottom: var( --base-bottom-margin ); font-size: 42px; line-height: var( --base-line-height ); color: var( --text-color ); }p { margin-bottom: var( --base-bottom-margin ); font-size: 18px; line-height: var( --base-line-height ); color: var( --text-color ); }img { margin-bottom: var( --base-bottom-margin ); border: 1px solid gray; }.callout { margin-bottom: var( --base-bottom-margin ); border: 1px solid gray; border-radius: 5px; color: var( --text-color ); }
    登入後複製

    假设你现在的客户说由于文本颜色太亮,导致文本难以阅读,想要改变文本颜色,此时,我们只需要更新一行CSS规则:

    --text-color: black;
    登入後複製

    提高CSS的可读性

    自定义属性会使样式表更加易读,也会使CSS属性声明更有语义。
    将这个声明

    background-color: yellow;font-size: 18px;
    登入後複製

    和下面的声明比较一下

    background-color: var( --highlight-color );font-size: var( --base-font-size );
    登入後複製

    像yellow和18px一类的属性值并没有给我们任何有用的上下文信息,但是当我们阅读如--base-font-size和--highlight-color一样的属性名时,即便在其他人的代码,我们都能马上知道这个属性值是在做什么。

    要注意的事

    大小写敏感

    自定义属性是大小写敏感的(和普通的CSS规则不一样)

    :root { --main-bg-color: green; --MAIN-BG-COLOR: RED; }.box { background-color: var( --main-bg-color ); /* green background */ }.circle { BACKGROUND-COLOR: VAR(--MAIN-BG-COLOR ); /* red background */ border-radius: 9999em; }.box,.circle { height: 100px; width: 100px; margin-top: 25px; box-sizing: padding-box; padding-top: 40px; text-align: center; }
    登入後複製

    自定义属性值的解析

    当重复声明自定义属性时,其赋值遵循通常的CSS层叠和继承规则。例如下面的示例:
    HTML

    <body>  <div class="container">    <a href="">Link</a>  </div></body>
    登入後複製

    CSS

    :root { --highlight-color: yellow; }body { --highlight-color: green; }.container { --highlight-color: red; }a { color: var( --highlight-color ); }
    登入後複製

    当移除.container规则时,链接的颜色值将是green。

    回退值

    当使用var()函数时,可以分配一个回退的属性值,其作为一个额外参数和第一个参数用,隔开。看下面的示例:
    HTML

    <div class="box">A Box</div>
    登入後複製

    CSS

    div { --container-bg-color: black; }.box { width: 100px; height: 100px; padding-top: 40px; box-sizing: padding-box; background-color: var( --container-bf-color, red ); color: white; text-align: center; }
    登入後複製

    因为给var()传递了一个回退值参数,所以div的背景色最中被渲染成红色。

    无效值

    谨防给CSS属性分配错误类型的值。
    在下面的示例中,由于自定义属性--small-button被赋予一个长度单位,它被用在.small-button样式中是无效的(译者注:因为color的属性类型值出错)

    :root { --small-button: 200px; }.small-button { color: var(--small-button); }
    登入後複製

    避免这种情况的一个好方式是想出具有描述性的自定义属性名称。例如将上面的自定义属性命名为--small-button-width

    浏览器对CSS变量的支持

    CSS变量用起来很方便,但是浏览器对其支持情况不太好:

    或者戳此链接:var supported

    本文根据@Jacob Gube的《Introduction to CSS Variables》所译,整个译文带有我自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://sixrevisions.com/css/variables/。

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳圖形設置
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您聽不到任何人,如何修復音頻
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25:如何解鎖Myrise中的所有內容
    4 週前 By 尊渡假赌尊渡假赌尊渡假赌

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    &gt; gt;的目的是什麼 元素? &gt; gt;的目的是什麼 元素? Mar 21, 2025 pm 12:34 PM

    本文討論了HTML&lt; Progress&gt;元素,其目的,樣式和與&lt; meter&gt;元素。主要重點是使用&lt; progress&gt;為了完成任務和LT;儀表&gt;對於stati

    &lt; datalist&gt;的目的是什麼。 元素? &lt; datalist&gt;的目的是什麼。 元素? Mar 21, 2025 pm 12:33 PM

    本文討論了html&lt; datalist&gt;元素,通過提供自動完整建議,改善用戶體驗並減少錯誤來增強表格。Character計數:159

    &lt; meter&gt;的目的是什麼。 元素? &lt; meter&gt;的目的是什麼。 元素? Mar 21, 2025 pm 12:35 PM

    本文討論了HTML&lt; meter&gt;元素,用於在一個範圍內顯示標量或分數值及其在Web開發中的常見應用。它區分了&lt; meter&gt;從&lt; progress&gt;和前

    HTML5中跨瀏覽器兼容性的最佳實踐是什麼? HTML5中跨瀏覽器兼容性的最佳實踐是什麼? Mar 17, 2025 pm 12:20 PM

    文章討論了確保HTML5跨瀏覽器兼容性的最佳實踐,重點是特徵檢測,進行性增強和測試方法。

    如何使用HTML5表單驗證屬性來驗證用戶輸入? 如何使用HTML5表單驗證屬性來驗證用戶輸入? Mar 17, 2025 pm 12:27 PM

    本文討論了使用HTML5表單驗證屬性,例如必需的,圖案,最小,最大和長度限制,以直接在瀏覽器中驗證用戶輸入。

    視口元標籤是什麼?為什麼對響應式設計很重要? 視口元標籤是什麼?為什麼對響應式設計很重要? Mar 20, 2025 pm 05:56 PM

    本文討論了視口元標籤,這對於移動設備上的響應式Web設計至關重要。它解釋瞭如何正確使用確保最佳的內容縮放和用戶交互,而濫用可能會導致設計和可訪問性問題。

    &lt; iframe&gt;的目的是什麼。 標籤?使用時的安全考慮是什麼? &lt; iframe&gt;的目的是什麼。 標籤?使用時的安全考慮是什麼? Mar 20, 2025 pm 06:05 PM

    本文討論了&lt; iframe&gt;將外部內容嵌入網頁,其常見用途,安全風險以及諸如對象標籤和API等替代方案的目的。

    Gitee Pages靜態網站部署失敗:單個文件404錯誤如何排查和解決? Gitee Pages靜態網站部署失敗:單個文件404錯誤如何排查和解決? Apr 04, 2025 pm 11:54 PM

    GiteePages靜態網站部署失敗:404錯誤排查與解決在使用Gitee...

    See all articles