整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          什么是 CSS 變量,如何使用它們?

          SS 變量(正式術語稱為 CSS 自定義屬性),其行為與其他編程語言中的變量非常相似。可以用來將 CSS 文檔中那些重復的特定值命名為變量。CSS 變量以兩個破折號(--)為前綴(例如--my-color: black)來定義變量。

          要訪問變量,您可以使用該var()函數(例如color: var(--my-color))。CSS 變量對于在不同元素和組件之間共享樣式非常有用。

          最常見的用例之一是制作網站主題。CSS 變量在整個網站上創建公共的主題,并輕松將其換成不同的主題。這通常是將一個類應用于一個共同的祖先元素(例如<body>元素)來實現的。此示例演示了:root根元素中定義的全局變量,然后再body元素從其父級繼承值:

          /* 在根元素上定義公共的主題變量*/
          :root {
            --bg-color: #fff;
            --main-color: #000;
            --secondary-color: #222;
          }
          /*在body元素上使用這些變量 */
          body {
            background-color: var(--bg-color);
            color: var(--main-color);
          }
          small {
            color: var(--secondary-color);
          }
          /* 定義另一個暗黑主題,可以覆蓋默認主題*/
          body.dark {
            --bg-color: #080808;
            --main-color: #fff;
            --secondary-color: #ccc;
          }

          另一個示例,在制作組件時定義不同的樣式,比如下面按鈕組件:

          .btn {
            --bg-color: #002299;
            --text-color: #fff;
            --highlight-color: #669900;
          
            background-color: var(--bg-color);
            color: var(--text-color);
          }
          /* .btn 按鈕子元素使用 --highlight-color 顏色 */
          .btn .highlight {
            color: var(--highlight-color);
          }
          /* 定義警告按鈕的樣式, 覆蓋默認變量 */
          .btn-danger {
            --bg-color: #dd4a68;
            --text-color: #000;
            --highlight-color: #990055;
          }

          最后,請記住在使用 CSS 變量時要注意事項:

          • 您可以通過向var()函數提供第二個參數來定義備用值(例如var(--text-color, black),如果--text-color未定義時,默認為black)。
          • CSS 變量區分大小寫,因此請注意大小寫。它們也可以在 HTML 內聯樣式中使用(例如<div style="--text-color: red">)。
          • 您可以嵌套var()調用,使用另一個變量作為備用值(例如var(--main-color, var(--other-color)))。
          • 也可以將它們傳遞給其他函數,例如calc()函數(例如calc(--width - 10px))。
          • 甚至將一個變量分配給另一個變量(例如--text-color: var(--main-color))。

          篇文章是阮一峰老師發表于2017年(《CSS 變量教程 - 阮一峰的網絡日志),雖然以及過去6年有余,但至今讀來依然非常棒,今天搜索一個css變量相關的知識再次讀到,分享在這里,大家一起學習下,也推薦大家經常去讀一讀阮老師的分享!

          一、變量的聲明

          聲明變量的時候,變量名前面要加兩根連詞線(--)。

          
          body {
            --foo: #7F583F;
            --bar: #F7EFD2;
          }

          上面代碼中,body選擇器里面聲明了兩個變量:--foo和--bar。

          它們與color、font-size等正式屬性沒有什么不同,只是沒有默認含義。所以 CSS 變量(CSS variable)又叫做"CSS 自定義屬性"(CSS custom properties)。因為變量與自定義的 CSS 屬性其實是一回事。

          你可能會問,為什么選擇兩根連詞線(--)表示變量?因為$foo被 Sass 用掉了,@foo被 Less 用掉了。為了不產生沖突,官方的 CSS 變量就改用兩根連詞線了。

          各種值都可以放入 CSS 變量。

          :root{
            --main-color: #4d4e53;
            --main-bg: rgb(255, 255, 255);
            --logo-border-color: rebeccapurple;
          
            --header-height: 68px;
            --content-padding: 10px 20px;
          
            --base-line-height: 1.428571429;
            --transition-duration: .35s;
            --external-link: "external link";
            --margin-top: calc(2vh + 20px);
          }

          變量名大小寫敏感,--header-color和--Header-Color是兩個不同變量。

          二、var() 函數

          var()函數用于讀取變量。

          a {
            color: var(--foo);
            text-decoration-color: var(--bar);
          }

          var()函數還可以使用第二個參數,表示變量的默認值。如果該變量不存在,就會使用這個默認值。

          color: var(--foo, #7F583F);

          第二個參數不處理內部的逗號或空格,都視作參數的一部分。

          var(--font-stack, "Roboto", "Helvetica");
          var(--pad, 10px 15px 20px);

          var()函數還可以用在變量的聲明。

          :root { 
            --primary-color: red; 
            --logo-text: var(--primary-color);
          }

          注意,變量值只能用作屬性值,不能用作屬性名

          .foo { 
            --side: margin-top;
            /* 無效 */ 
            var(--side): 20px; 
          }

          上面代碼中,變量--side用作屬性名,這是無效的。

          三、變量值的類型

          如果變量值是一個字符串,可以與其他字符串拼接。

          --bar: 'hello'; 
          --foo: var(--bar)' world';

          利用這一點,可以 debug(例子)。

          body:after { 
            content: '--screen-category : 'var(--screen-category); 
          }

          如果變量值是數值,不能與數值單位直接連用。

          .foo { 
            --gap: 20; 
            /* 無效 */ margin-top: var(--gap)px;
          }

          上面代碼中,數值與單位直接寫在一起,這是無效的。必須使用calc()函數,將它們連接。

          .foo { 
            --gap: 20; 
            margin-top: calc(var(--gap) * 1px);
          }

          如果變量值帶有單位,就不能寫成字符串。

          /* 無效 */
          .foo {
            --foo: '20px';
            font-size: var(--foo);
          }
          
          /* 有效 */
          .foo {
            --foo: 20px;
            font-size: var(--foo);
          }

          四、作用域

          同一個 CSS 變量,可以在多個選擇器內聲明。讀取的時候,優先級最高的聲明生效。這與 CSS 的"層疊"(cascade)規則是一致的。

          下面是一個例子。

          <style>
            :root { --color: blue; }
            div { --color: green; }
            #alert { --color: red; }
            * { color: var(--color); }
          </style>
          
          <p>藍色</p>
          <div>綠色</div>
          <div id="alert">紅色</div>

          上面代碼中,三個選擇器都聲明了--color變量。不同元素讀取這個變量的時候,會采用優先級最高的規則,因此三段文字的顏色是不一樣的。

          這就是說,變量的作用域就是它所在的選擇器的有效范圍。

          body { 
            --foo: #7F583F;
          } 
          .content { 
            --bar: #F7EFD2; 
          }

          上面代碼中,變量--foo的作用域是body選擇器的生效范圍,--bar的作用域是.content選擇器的生效范圍。

          由于這個原因,全局的變量通常放在根元素:root里面,確保任何選擇器都可以讀取它們。

          :root { --main-color: #06c; }

          五、響應式布局

          CSS 是動態的,頁面的任何變化,都會導致采用的規則變化。

          利用這個特點,可以在響應式布局的media命令里面聲明變量,使得不同的屏幕寬度有不同的變量值。

          body {
            --primary: #7F583F;
            --secondary: #F7EFD2;
          }
          
          a {
            color: var(--primary);
            text-decoration-color: var(--secondary);
          }
          
          @media screen and (min-width: 768px) {
            body {
              --primary:  #F7EFD2;
              --secondary: #7F583F;
            }
          }

          六、兼容性處理

          對于不支持 CSS 變量的瀏覽器,可以采用下面的寫法。

          a {
            color: #7F583F;
            color: var(--primary);
          }

          也可以使用@support命令進行檢測。

          @supports ( (--a: 0)) {
            /* supported */
          }
          
          @supports ( not (--a: 0)) {
            /* not supported */
          }

          七、JavaScript 操作

          JavaScript 也可以檢測瀏覽器是否支持 CSS 變量。

          const isSupported =
            window.CSS &&
            window.CSS.supports &&
            window.CSS.supports('--a', 0);
          
          if (isSupported) {
            /* supported */
          } else {
            /* not supported */
          }

          JavaScript 操作 CSS 變量的寫法如下。

          // 設置變量
          document.body.style.setProperty('--primary', '#7F583F');
          
          // 讀取變量
          document.body.style.getPropertyValue('--primary').trim();
          // '#7F583F'
          
          // 刪除變量
          document.body.style.removeProperty('--primary');

          這意味著,JavaScript 可以將任意值存入樣式表。下面是一個監聽事件的例子,事件信息被存入 CSS 變量。

          const docStyle = document.documentElement.style;
          
          document.addEventListener('mousemove', (e) => {
            docStyle.setProperty('--mouse-x', e.clientX);
            docStyle.setProperty('--mouse-y', e.clientY);
          });

          那些對 CSS 無用的信息,也可以放入 CSS 變量。

          --foo: if(x > 5) this.width = 10;

          上面代碼中,--foo的值在 CSS 里面是無效語句,但是可以被 JavaScript 讀取。這意味著,可以把樣式設置寫在 CSS 變量中,讓 JavaScript 讀取。

          所以,CSS 變量提供了 JavaScript 與 CSS 通信的一種途徑。

          八、參考鏈接

          • Winning with CSS Variables | hey it's violet
          • CSS Variables: Why Should You Care? https://developers.google.com/web/updates/2016/02/css-variables-why-should-you-care
          • It's Time To Start Using CSS Custom Properties https://www.smashingmagazine.com/2017/04/start-using-css-custom-properties/
          • Why I'm Excited About Native CSS Variables https://philipwalton.com/articles/why-im-excited-about-native-css-variables/

          原文地址:《CSS 變量教程》 作者: 阮一峰 日期: 2017年5月 9日 https://www.ruanyifeng.com/blog/2017/05/css-variables.html

          家好,在本篇文章中,我們將深入了解JavaScript變量的方方面面。無論你是初學者還是有一定經驗的開發者,本文都將為你揭開JavaScript變量的奧秘,讓你輕松掌握這門重要的編程語言。

          一、變量是什么?

          在JavaScript中,變量是存儲數據的容器,它們允許你在程序中存儲和操作各種類型的值。使用變量可以使你的代碼更加靈活和可維護,因為你可以在程序中多次使用同一個值,而不需要重復輸入。通俗的理解變量就是使用【特定符號】來代表【特定數據】。

            <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <title>變量</title>
          </head>
          <body>
              <script>
                    x = 1
                    y = 2
                  // x和y兩個符號分別表示了數字1和2
                      
                  //舉例:使用變量記錄數據
                  // 將用戶輸入的內容保存在 num 這個變量(容器)中
                    num = prompt('請輸入一數字!')
                    // 通過 num 變量(容器)將用戶輸入的內容輸出出來
                    alert(num)
                    document.write(num)
                  </script>
          </body>
          </html>

          二、聲明變量:

          要使用變量,首先需要聲明它。在JavaScript中,有三種聲明變量的方式:使用varletconst關鍵字。這些關鍵字的選擇取決于變量的作用域和是否允許重新賦值。

          聲明(定義)變量有兩部分構成:聲明關鍵字、變量名(標識)

          關鍵字

          關鍵字也叫保留字,是 JavaScript 中內置的一些英文詞匯(單詞或縮寫),它們代表某些特定的含義。以下是JavaScript常見的一些關鍵字。

          case       else       new         var
          
          catch      export     return      void
          
          class      extends    super       while
          
          const      finally    switch      with
          
          continue   for        this        yield
          
          debugger   function   throw
          
          default    if         try
          
          enum       await      implements  protected
          
          interface  public     package     static
          
          import     from       as
          

          這些關鍵字在JavaScript的語法中有特定的用途,例如:

          • ifelseswitchcasedefault:條件語句和分支邏輯的控制。
          • forwhiledo:循環結構。
          • function:用于聲明函數。
          • varletconst:用于聲明變量。
          • classextendssuper:用于創建和擴展類。
          • return:用于從函數中返回值。
          • breakcontinue:用于控制循環和語句塊的執行流程。

          聲明變量和賦值

          聲明變量:關鍵字+變量名

          賦值:變量名 = XX數據

          <!DOCTYPE html>
          <html lang="en">
          <head>
            <meta charset="UTF-8">
            <title>變量聲明和賦值</title>
          </head>
          <body>
            
            <script> 
              // 聲明(定義)變量有兩部分構成:聲明關鍵字、變量名(標識)
              // let 即關鍵字,所謂關鍵字是系統提供的專門用來聲明(定義)變量的詞語
              // age 即變量的名稱,也叫標識符
              let age
              // 賦值,將 25 這個數據存入了 age 這個“容器”中
              age = 25
              // 這樣 age 的值就成了 25
              document.write(age)
              
              // 也可以聲明和賦值同時進行
              let str = '你好,謐夜星球!'
              alert(str);
            </script>
          </body>
          </html>

          let、var和const聲明變量的部分區別

          作用域:

          • var:使用 var 聲明的變量具有函數作用域,在函數內部聲明的 var 變量在函數外部仍然可以訪問。它也具有變量提升(hoisting)的特性,變量聲明會被提升到作用域的頂部。
          • letconst:使用 letconst 聲明的變量具有塊級作用域,這意味著在代碼塊(如循環、條件語句等)內部聲明的變量只能在該塊內部訪問。

          變量提升:

          • var 存在變量提升,這意味著變量聲明會被提升到作用域的頂部,但賦值操作不會提升。這可能導致在變量聲明之前就使用變量,其值為 undefined
          • letconst 存在變量提升,但在聲明之前使用變量會引發暫時性死區(Temporal Dead Zone,TDZ)錯誤,即在聲明之前訪問會拋出錯誤。

          變量重復聲明:

          • var 允許在同一作用域內重復聲明同名的變量,不會拋出錯誤。
          • letconst 不允許在同一作用域內重復聲明同名的變量,否則會拋出錯誤。

          可變性:

          • varlet 聲明的變量可以重新賦值。
          • const 聲明的變量是常量,一旦賦值后就不能再被重新賦值。

          全局對象屬性:

          • var 聲明的全局變量會成為全局對象的屬性(在瀏覽器環境中是 window 對象的屬性)。
          • letconst 聲明的全局變量不會成為全局對象的屬性。

          初始化:

          • varletconst 在聲明時都可以不進行初始化,此時變量的初始值都將是 undefined

          適用場景:

          • var 在現代 JavaScript 中使用較少,因為它具有函數作用域和變量提升的特性,容易引發一些意外行為。在循環中使用 var 可能會導致閉包問題。
          • let 是塊級作用域的變量聲明方式,適合大多數情況,尤其是需要在循環中使用的情況。
          • const 用于聲明常量,適用于那些不希望被重新賦值的變量。

          綜上所述,letconst 是在現代 JavaScript 中更常見和推薦的變量聲明方式,可以更好地控制作用域、避免一些潛在問題,并提高代碼的可讀性和可維護性。

          三、變量的命名規則:

          在命名變量時,需要遵循一些規則:

          • 變量名必須以字母、下劃線(_)或美元符號($)開頭,不能以數字開頭。
          • 變量名可以包含字母、數字、下劃線和美元符號。
          • 變量名區分大小寫,例如myVarmyvar是不同的變量。
          • JavaScript 內部已占用于單詞(關鍵字或保留字)不允許使用
          • 盡量保證變量具有一定的語義,見字知義

          四、變量的作用域:

          變量的作用域指的是變量在代碼中的可訪問范圍。JavaScript中有兩種主要的作用域:全局作用域和局部作用域。

          • 全局作用域中聲明的變量可以在整個程序中訪問。
          • 局部作用域中聲明的變量只能在聲明它的代碼塊內部訪問。

          常量

          概念:使用 const 聲明的變量稱為“常量”。

          使用場景:當某個變量永遠不會改變的時候,就可以使用 const 來聲明,而不是let。

          命名規范:和變量一致

          const PI = 3.14

          注意: 常量不允許重新賦值,聲明的時候必須賦值(初始化)

          總結:

          本文深入介紹了JavaScript變量的各個方面,從聲明變量到變量的作用域、命名規則以及使用方法等。通過學習這些基礎知識,你將能夠更好地理解和運用JavaScript變量,為你的編程之路鋪平道路。

          希望本文能夠幫助你更深入地理解JavaScript變量,讓你在編程的旅程中游刃有余。如果你有任何關于JavaScript變量的疑問,歡迎在評論區提出,我將竭誠為你解答!

          感謝閱讀本文,希望能夠對你有所幫助。記得點贊、分享!持續更新中!


          主站蜘蛛池模板: 区三区激情福利综合中文字幕在线一区亚洲视频1 | 无码人妻精品一区二区三区不卡 | 国产精品无圣光一区二区 | 无码精品人妻一区二区三区免费看| 国产成人精品一区二区A片带套| 色多多免费视频观看区一区| 精品无码人妻一区二区三区品| 精品一区二区三区视频在线观看| 一区二区三区四区精品视频 | 夜夜爽一区二区三区精品| 亚洲av乱码一区二区三区香蕉 | 99久久精品午夜一区二区| 精品一区二区久久久久久久网站| 成人精品一区二区三区中文字幕| 无码一区二区三区在线| 亚洲一区二区三区播放在线| 久久精品免费一区二区三区| 国产丝袜美女一区二区三区 | 日韩电影一区二区三区| 国产在线精品一区二区夜色| 中文字幕在线观看一区二区| 国产亚洲情侣一区二区无| 国产波霸爆乳一区二区| 无码AV天堂一区二区三区| 亚洲国产一区二区三区青草影视| 久久精品国内一区二区三区 | 综合激情区视频一区视频二区| 亚洲日韩AV一区二区三区四区 | 精品一区二区三区影院在线午夜| 国产在线观看一区二区三区四区| 色妞色视频一区二区三区四区 | 韩国精品一区二区三区无码视频| 天堂Av无码Av一区二区三区| 四虎成人精品一区二区免费网站| 国产成人av一区二区三区不卡| 国产另类ts人妖一区二区三区| 亚洲无线码一区二区三区| 2020天堂中文字幕一区在线观| 无码人妻久久一区二区三区免费丨| 日本一区二区三区爆乳| 制服美女视频一区|