成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

CSS基礎(chǔ)篇--CSS/CSS3中的原生變量var詳解

sanyang / 882人閱讀

摘要:但由于預(yù)處理器不在瀏覽器中運行并且無法看到標記,它們不能這樣做??绮煌墓ぞ呒蛏贤泄艿牡谌綐邮奖砉蚕眍A(yù)處理器變量是不可能或至少不容易的。原生的自定義屬性可以與任何預(yù)處理器或純文件一起使用。

使用語法

首先我們先來看一個例子:
html代碼:

這是一段文字

css代碼:

.element {
  width:200px;
  height:200px;
  --main-bg-color: #000;
  color:#fff;
  background-color: var(--main-bg-color);
}

實現(xiàn)效果:

結(jié)果是該DOM元素背景變成了黑色。

CSS中原生的變量定義語法是:--*,變量使用語法是:var(--*),其中*表示我們的變量名稱。關(guān)于命名這個東西,各種語言都有些顯示,例如CSS選擇器不能是數(shù)字開頭,JS中的變量是不能直接數(shù)值的,但是,在CSS變量中,這些限制通通沒有,例如:

:root{
    --main-bg-color: #000;
}
.element {
    background-color: var(--main-bg-color);
}

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

.element {
  width:200px;
  height:200px;
  --黑色: #000;
  color:#fff;
  background-color: var(--黑色);
}

css變量完整語法:
CSS變量使用的完整語法為:var( [, ]? ),用中文表示就是:var( <自定義屬性名> [, <默認值 ]? ),也即是如果我們沒有定義變量名稱,那么就會使用后面的值作為其默認屬性值。
如下:

.element {
    background-color: var(--new-bg-color,#EE0000);
}

得到的結(jié)果當(dāng)然是后面顏色的值的背景。

我們來看一下如果變量名稱不合法會出現(xiàn)什么結(jié)果,看下面例子:

body {
  --color: 20px;
  background-color: #369;
  background-color: var(--color, #cd0000);
}

請問,此時的背景色是?

A. transparent

B. 20px

C. #369

D. #cd0000

答案是:A. transparent
CSS變量中,果發(fā)現(xiàn)變量值是不合法的,例如上面背景色顯然不能是20px,則使用背景色的缺省值,也就是默認值代替,于是,上面CSS等同于:

body {
    --color: 20px;
    background-color: #369;
    background-color: transparent;
}
css變量在js中的應(yīng)用

看如下例子,html代碼:

這是一段文字

css代碼:

#jsDom {
    --my-varwidth: 200px;
    background-color: #000;
    color:#fff;
    width:var(--my-varwidth);
    height:200px;
}

js代碼:

var element = document.getElementById("jsDom");
var curWidth = getComputedStyle(element).getPropertyValue("--my-varwidth");
console.log(curWidth); //200px

//設(shè)置過后該DOM元素的寬度變?yōu)榱?00px
element.style.setProperty("--my-varwidth", "300px");

如果樣式是寫到行間呢?那么進行如下操作:
html代碼:

這是一段文字

js代碼:

var element = document.getElementById("jsDom");
var curWidth = element.style.getPropertyValue("--my-varwidth");
console.log(curWidth); //400px
瀏覽器兼容

瀏覽器的兼容如圖所示:

到目前位置IE11也不支持該css變量。

說到這兒感覺這個css變量也是很強大的,那么它跟預(yù)處理器比較,你覺得哪個更好?下面講一下預(yù)處理器的劣勢。

預(yù)處理器劣勢 預(yù)處理器變量不是實時的

也許令新手驚訝的是,預(yù)處理器局限性最常見的情況是Sass無法在媒體查詢中定義變量或使用@extend。

$gutter: 1em;
@media (min-width: 30em) {
     $gutter: 2em; 
} 
 .Container { 
     padding: $gutter; 
 }

上面代碼將編譯為:

.Container { 
     padding: 1em;
 }

上面結(jié)果可以看出來,媒體查詢塊被丟棄,變量賦值被忽略。

由于無法在匹配@media規(guī)則的基礎(chǔ)上改變變量,所以唯一的選擇是為每個媒體查詢分配一個唯一的變量,并多帶帶編寫每個變體。

預(yù)處理器變量不能級聯(lián)

每當(dāng)使用變量,作用域的問題就不可避免的出現(xiàn)。這個變量應(yīng)該設(shè)置為全局變量嗎?是否應(yīng)該限定其范圍為文件或模塊?是否應(yīng)該限制在塊中?

由于CSS最終目的是為HTML添加樣式,事實證明還有另一種有效的方法給變量限定作用域:DOM元素。但由于預(yù)處理器不在瀏覽器中運行并且無法看到標記,它們不能這樣做。

假設(shè)有一個網(wǎng)站,面對偏好較大文字的用戶,就向元素添加類user-setting-large-text。當(dāng)設(shè)置了這個類時,應(yīng)當(dāng)應(yīng)用較大的$font-size變量賦值:

$font-size: 1em;
.user-setting-large-text {
    $font-size: 1.5em;
} 
body { 
    font-size: $font-size; 
}

但同樣,就像上面的媒體塊示例,Sass完全忽略了該變量的賦值,這意味著這是不可能發(fā)生的。編譯后的代碼如下:

body { 
    font-size: 1em;
}
預(yù)處理器變量不繼承

雖然繼承嚴格說來是級聯(lián)的一部分,之所以把它多帶帶分出來講,是因為多次想調(diào)用這個特性卻不得。

假設(shè)一種情況,要在DOM元素上基于其父元素應(yīng)用的顏色而設(shè)置樣式:

.alert {
    background-color: lightyellow;
}
.alert.info {
    background-color: lightblue;
}
.alert.error {
    background-color: orangered;
}

.alert button {
    border-color: darken(background-color, 25%);
}

上面的代碼并不是有效的Sass(或CSS),但你應(yīng)該明白它想達到什么目的。

最后一句聲明試圖在

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/115575.html

相關(guān)文章

  • CSS基礎(chǔ)--你知道的display的值有多少?用了多少?

    摘要:與屬性的值不同,其不為被隱藏的對象保留其物理空間指定對象為內(nèi)聯(lián)元素。指定對象作為塊元素級的表格。類同于標簽指定對象作為表格行組。伸縮盒過渡版本將對象作為彈性伸縮盒顯示。伸縮盒最新版本新增屬性可能存在描述錯誤及變更,僅供參考。 它的語法如下: display:none | inline | block | list-item | inline-block | table | inline...

    wangdai 評論0 收藏0
  • css - 收藏集 - 掘金

    摘要:絕對底部前端掘金來自國外的設(shè)計達人,純,可以實現(xiàn)當(dāng)正文內(nèi)容很少時,底部位于窗口最下面。有效解決圖片使用單位邊角缺失的問題前端掘金起因在移動端使用布局時圖片也需要用單位。 CSS 絕對底部 - 前端 - 掘金來自國外的設(shè)計達人,純CSS,可以實現(xiàn): 當(dāng)正文內(nèi)容很少時,底部位于窗口最下面。當(dāng)改變窗口高度時,不會出現(xiàn)重疊問題。甚至,創(chuàng)造該CSS的人還專門成立一個網(wǎng)站介紹這個CSS底部布局方案...

    phpmatt 評論0 收藏0
  • 面試知識點總結(jié)

    摘要:最近面試幾家前端職位,想知道目前的前端面試題是偏向哪一塊,都主要問到的是語法,閉包,原型鏈,繼承那一塊。并且將面試題的知識點匯總一下。參考網(wǎng)站面試題圖片過多的時候如何優(yōu)化圖標很多的時候可以用雪碧圖圖片過大時候可以壓縮一下。 最近面試幾家前端職位,想知道目前的前端面試題是偏向哪一塊,都主要問到的是ES6語法,閉包,原型鏈,繼承那一塊。并且將面試題的知識點匯總一下。有助于下次面試。 1.H...

    王晗 評論0 收藏0
  • 面試知識點總結(jié)

    摘要:最近面試幾家前端職位,想知道目前的前端面試題是偏向哪一塊,都主要問到的是語法,閉包,原型鏈,繼承那一塊。并且將面試題的知識點匯總一下。參考網(wǎng)站面試題圖片過多的時候如何優(yōu)化圖標很多的時候可以用雪碧圖圖片過大時候可以壓縮一下。 最近面試幾家前端職位,想知道目前的前端面試題是偏向哪一塊,都主要問到的是ES6語法,閉包,原型鏈,繼承那一塊。并且將面試題的知識點匯總一下。有助于下次面試。 1.H...

    CrazyCodes 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<