站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        深入了解css變量(整理總結(jié))

        本篇文章給大家?guī)砹岁P(guān)于css變量的相關(guān)知識,在原生css中已經(jīng)開始逐漸支持嵌套和變量以及函數(shù)功能,希望對大家有幫助。

        深入了解css變量(整理總結(jié))

        用過sass或less的都知道,主要他們可以有嵌套和變量以及函數(shù)功能,其實在原生css中,已經(jīng)開始逐漸支持,誠然目前只有你我熟知,而他人還處在萌芽中,了解css變量,你會發(fā)現(xiàn)CSS從此變得異常強大。

        變量的聲明

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

        // 局部聲明 body {   --foo: #ed145b;   --bar: #F7EFD2; } // 全局聲明 :root{   --foo: #ed145b;   --bar: #F7EFD2; }

        例如上面我們申明了2個變量:–foo和–bar,其實你只需要把它們理解成css自定義屬性看待,它們與color、font-size等正式屬性沒有什么不同,只是沒有默認含義,注意css變量名稱是區(qū)分大小寫的,通常我們寫的css是不區(qū)分。

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

        命名規(guī)范

        關(guān)于命名這個東西,各種語言都有些顯示,例如CSS選擇器不能是數(shù)字開頭,JS中的變量是不能直接數(shù)值的,但是,在CSS變量中,這些限制通通沒有,如:

        :root {   --1: #369; } body {   background-color: var(--1); }

        不能包含$,[,^,(,%等字符,普通字符局限在只要是“數(shù)字[0-9]”“字母[a-zA-Z]”“下劃線_”和“短橫線-”這些組合,但是可以是中文,日文或者韓文,例如:

        body {   --深藍: #369;   background-color: var(--深藍); }

        var()函數(shù)

        聲明了變量后我們自然是想要去獲取并且使用,那么var()函數(shù)就是用于讀取變量

        p {   color: var(--foo);   border::1px solid var(--bar); }

        var()第二個參數(shù)

        color: var(--foo, #ED145B); //第二個參數(shù)就是默認值,假設(shè)--foo為空情況下,會使用#ED145B

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

        :root {   --primary-color: red;   --logo-text: var(--primary-color); // 上面剛聲明,這里就可以使用 }

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

        .foo {   --side: margin-top;   /* 很顯然,下面是無效的 */   var(--side): 20px; }

        變量值類型

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

        --bar: 'hello'; --foo: var(--bar)' world'; // 示例 body:after {   content: '--screen-category : 'var(--screen-category); }

        如果變量值是數(shù)值,不能與數(shù)值單位直接連用

        foo {   --gap: 20;   /* 下面無效 */   margin-top: var(--gap)px;  /* 通過calc去計算,下面有效 */   margin-top: calc(var(--gap) * 1px); }

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

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

        作用域

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

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

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

        兼容性處理

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

        a {   color: #7F583F;   color: var(--primary); // 應(yīng)該很好理解,如果這里讀不出值,那么并不會覆蓋上面的color }

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

        a { @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變量的寫法如下

        // 設(shè)置變量 document.body.style.setProperty('--primary', '#7F583F'); //局部 document.documentElement.style.setProperty('--primary', '#7F583F'); //全局 // 讀取變量 document.body.style.getPropertyValue('--primary').trim(); /局部 document.documentElement.style.getPropertyValue('--primary').trim(); /全局 getComputedStyle(document.documentElement).getPropertyValue('--time'); // 全局,如果是在css表中設(shè)置的需要這種方式獲取 // '#7F583F' // 刪除變量 document.body.style.removeProperty('--primary'); //局部 document.documentElement.style.removeProperty('--primary'); //全局

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

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

        這意味著,JavaScript 可以將任意值存入樣式表。下面是一個監(jiān)聽事件的例子,事件信息被存入 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 讀取。這意味著,可以把樣式設(shè)置寫在 CSS 變量中,讓 JavaScript 讀取。所以,CSS 變量提供了 JavaScript 與 CSS 通信的一種途徑。

        小結(jié)

        瀏覽器原生特性,無需經(jīng)過任何轉(zhuǎn)譯就可直接運行

        DOM對象一員,極大便利了CSS與JS之間的聯(lián)系

        并不妨礙你用Sass/Less,完全可以結(jié)合使

        (學(xué)習視頻分享:css視頻教程)

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 成人国产精品秘 果冻传媒在线| 久久精品免费大片国产大片| 国产一在线精品一区在线观看| 国产精品日本一区二区在线播放 | 国产高清精品一区| 久久亚洲欧美国产精品| 久久久精品久久久久久| 99久久99久久精品国产片果冻| 99精品热这里只有精品| 久久久无码人妻精品无码| 亚洲国产精品国产自在在线| 国内精品99亚洲免费高清| 99久久99久久精品国产片| 日本精品卡一卡2卡3卡四卡| 99久久精品毛片免费播放| 久久精品九九亚洲精品| 中文字幕久久精品无码| 无码国内精品久久人妻麻豆按摩| 国产小呦泬泬99精品| 国产99视频精品免费视频76 | 欧美精品人爱a欧美精品| 国产精品青草视频免费播放| 99久久免费国产精品| 国内精品久久久久影院免费| 国产亚洲精品岁国产微拍精品| 无码精品日韩中文字幕| 自拍偷自拍亚洲精品情侣 | 欧美久久久久久午夜精品| 精品国产香蕉伊思人在线在线亚洲一区二区 | 精品国偷自产在线视频| 国产精品VIDEOSSEX久久发布| 93精91精品国产综合久久香蕉 | 亚洲av午夜精品一区二区三区| 久久国产综合精品五月天| 精品人妻少妇一区二区三区| 精品偷自拍另类在线观看丰满白嫩大屁股ass | 久久久精品久久久久特色影视| 久久精品国产亚洲精品| 久久er国产精品免费观看8| 久久久久成人精品无码| 四虎影视永久在线精品免费|