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

資訊專欄INFORMATION COLUMN

sass筆記-3|Sass基礎(chǔ)語(yǔ)法之樣式復(fù)用和保持簡(jiǎn)潔

SmallBoyO / 1351人閱讀

摘要:區(qū)別在于,類是在中運(yùn)用的,混合器是在樣式表中使用的?;居梅ㄟx擇器繼承,用去繼承一個(gè)選擇器定義的所有樣式。繼承背后的基本實(shí)現(xiàn)思路背后最基本的想法是,如果繼承了,那么樣式表中的任何一處選擇器都會(huì)用這一選擇器組進(jìn)行替換和打開(kāi)。

上一篇詳述了Sass如何嵌套、導(dǎo)入和注釋這3個(gè)基本方式來(lái)保持條理性和可讀性,這一篇更進(jìn)一步地闡述sass保持樣式復(fù)用和簡(jiǎn)潔的方式——混合器和選擇器繼承——這兩種方式都能復(fù)用樣式,使用它們也不難,但一定要注意什么時(shí)候該用什么。

零. 混合器——樣式層上復(fù)用

當(dāng)你需要一直復(fù)用大段樣式的時(shí)候,可以考慮下混合器。

1. 基本用法

混合器使用@mixin標(biāo)識(shí)符定義,然后通過(guò)@include引入,簡(jiǎn)單的說(shuō)就是用@mixin定義一個(gè)混合器,它具有一個(gè)名字和一堆包含在花括號(hào)中的規(guī)則,用@include引入這個(gè)混合器(通過(guò)混合器的名字),混合器中的樣式規(guī)則就會(huì)被提取到調(diào)用@include的地方。

此外,混合器中也可以包含CSS規(guī)則,可以包含選擇器和選擇器中的規(guī)則,甚至可以用父選擇器標(biāo)識(shí)符&。

@mixin rounded-corners{
    -moz-border-radius:5px;
    -webkit-border-redius:5px;
    border-radius:5px;
}

.notice{
    background-color:green;
    border:2px solid #0a0;
    @include rounded-corners;
}

//導(dǎo)出的css如下
.notice{
    background-color:green;
    border:2px solid #0a0;
    -moz-border-radius:5px;
    -webkit-border-redius:5px;
    border-radius:5px;
}
2. 可以給混合器傳參

混合器復(fù)用樣式的時(shí)候,可以通過(guò)傳參改變混合器中的具體屬性值,和function很像。

混合器定義時(shí),參數(shù)名稱必須以變量名形式指定,此外,可選的是,參數(shù)可以有默認(rèn)值,只需要在參數(shù)名后面以冒號(hào):分隔后寫上默認(rèn)屬性值,如果你了解各類編程語(yǔ)言函數(shù)的默認(rèn)參數(shù)值,這應(yīng)該不會(huì)陌生。

引入含有參數(shù)的選擇器時(shí),有兩種傳入?yún)?shù)的形式,一種是僅僅傳入?yún)?shù)值,這要求傳入?yún)?shù)值的順序和混合器定義的參數(shù)順序一致,另一種則是通過(guò)$name:value的形式指定傳入?yún)?shù)的名字和值,這就不要求順序。

以下代碼定義了一個(gè)有3個(gè)參數(shù)的選擇器來(lái)設(shè)置一個(gè)鏈接各個(gè)狀態(tài)的顏色樣式,其中常規(guī)樣式的顏色$normal有一個(gè)默認(rèn)值#233,另外兩個(gè)參數(shù)沒(méi)有默認(rèn)值:

@mixin link-col($hover, $visited, $normal:#233){
    color:$normal;
    &:hover { color:$hover; }
    &:visited { color:$visited; }
}

當(dāng)引入這個(gè)混合器的時(shí)候,可以有以下兩種方式引入:

//可以這么引入,因?yàn)樽詈笠粋€(gè)參數(shù)默認(rèn),可以不傳入
a{
    @include link-col(red, gray);
}
//也可以這樣,就不用管順序
a{
    @include link-col($visited:gray, $hover:red);
}
3. 混合器的使用場(chǎng)景——注意和類的區(qū)別

如果發(fā)現(xiàn)一直在不停復(fù)用一段樣式,應(yīng)該考慮把這段樣式構(gòu)造成一個(gè)混合器,尤其是它本身可能是一組有意義的樣式組合,并且考慮進(jìn)參數(shù)的設(shè)置,讓混合器更加智能。

判斷一組選擇器是否應(yīng)該組合在一起組成一個(gè)混合器,一條經(jīng)驗(yàn)法則:能否為這個(gè)混合器想出一個(gè)能概括它的好名字。如果能想出一個(gè)短名字來(lái)描述這幾條樣式組合的作用,那么往往能構(gòu)造出一個(gè)合適的混合器。

混合器和CSS類很像,css類也可以復(fù)用樣式,一段樣式給一個(gè)類,然后那里需要這一段樣式去修飾,就在哪里添加這個(gè)類。

區(qū)別在于,類是在HTML中運(yùn)用的,混合器是在樣式表中使用的。這意味著,“類”具有語(yǔ)義化的含義,而混合器僅僅是有關(guān)樣式的,僅僅是描述展示出來(lái)是什么樣子的。

能區(qū)分這兩者微妙的區(qū)別,并且有意地去選擇更合適的方式去復(fù)用樣式,這能讓你的代碼保持可讀性和可維護(hù)性。誠(chéng)然,現(xiàn)在很多流行框架,依舊在用類去復(fù)用樣式,但是語(yǔ)義和樣式的解耦絕對(duì)是趨勢(shì)。

一. 選擇器繼承——語(yǔ)義化關(guān)系上復(fù)用樣式

剛描述完混合器和類的差別,在于“語(yǔ)義”和“展示樣式”,又突然到了建立在語(yǔ)義化關(guān)系上復(fù)用樣式的選擇器繼承,似乎有點(diǎn)繞,為什么不用類而要用選擇器繼承呢?

實(shí)際上,選擇器繼承最常用的場(chǎng)景就是和類一起工作的。

1. 基本用法

選擇器繼承,用@extend去繼承一個(gè)選擇器定義的所有樣式。以下代碼,.seriousError將會(huì)繼承.error定義的所有樣式。

.error{
    border: 1px red;
    background-color: #fdd;
}
.seriousError{
    @extend .error;
    border-width: 3px;
}

//輸出的CSS代碼是這樣的
.error, .seriousError{
    border: 1px red;
    background-color: #fdd;
}
.seriousError{
    border-width: 3px;
}

是的,平時(shí)我們完全可以寫輸出的純CSS代碼,多寫一個(gè)選擇器名字和多寫一行@extend命令,我們覺(jué)得差不多。

但是,在上面的例子中,.seriousError不僅會(huì)繼承.error自身的所有樣式(就像上面的那樣),任何和.error有關(guān)的組合選擇器樣式也會(huì)被.seriousError以組合選擇器的形式繼承。

比如,在上面的樣式代碼是這樣的:

.error{
    border: 1px red;
    background-color: #fdd;
}
.seriousError{
    @extend .error;
    border-width: 3px;
}
.error a{
    color:red;
    font-weight:bold;
}
h1.error{
    font-size:1.3em;
}

//輸出的CSS是這樣的,注意看下面的選擇器
.error, .seriousError{
    border: 1px red;
    background-color: #fdd;
}
.seriousError{
    border-width: 3px;
}
.error a, .seriousError a{
    color:red;
    font-weight:bold;
}
h1.error, h1.seriousError{
    font-size:1.3em;
}

這個(gè)時(shí)候,如果我們不借助Sass的選擇器繼承,而用純CSS來(lái)寫,是不是就會(huì)有一些繁瑣了。

我們?cè)賮?lái)想一下這幾段代碼的含義:我們描述了一個(gè).error類來(lái)整體修飾錯(cuò)誤提示都應(yīng)該有的樣式,然后.seriousError.error類的細(xì)化,描述了一個(gè)嚴(yán)重的錯(cuò)誤應(yīng)該有的進(jìn)一步的樣式。所以.seriousError應(yīng)該有.error相關(guān)的所有樣式,而這就是選擇器繼承幫助我們做的事。

2. 繼承背后的基本實(shí)現(xiàn)思路

@extend背后最基本的想法是,如果.seriousError繼承了.error,那么樣式表中的任何一處.error選擇器都會(huì)用.error, .seriousError這一選擇器組進(jìn)行替換和打開(kāi)。

3. 繼承的使用場(chǎng)景

繼承是建立在語(yǔ)義化的關(guān)系上的,當(dāng)一個(gè)元素?fù)碛械念惐砻魉菍儆诹硪粋€(gè)類時(shí)(是另一個(gè)類的細(xì)化時(shí)),在這種情況下需要復(fù)用樣式時(shí)使用,它的本質(zhì)作用還是樣式復(fù)用。

它和混合器相比,繼承生成的代碼量會(huì)相對(duì)較少,因?yàn)槔^承僅僅重復(fù)選擇器,而混合器是重復(fù)一段樣式。

另外,可以看到,一般它和類一起協(xié)同工作,當(dāng)你在構(gòu)建一些有關(guān)系的類時(shí),在寫這些具有層級(jí)關(guān)系的類的樣式的時(shí)候,選擇器繼承可以幫你嚴(yán)謹(jǐn)?shù)赝瓿赡承邮降膹?fù)用,無(wú)論是這個(gè)選擇器本身,還是隱藏在其他復(fù)雜選擇器中的目標(biāo)選擇器。

4. 繼承的高級(jí)用法

既然這被稱為選擇器繼承,不是“類”繼承,那么必然繼承是可以針對(duì)類之外的選擇器使用的,只是繼承類是最常用的使用場(chǎng)景。

還有一種場(chǎng)景是,繼承一個(gè)HTML元素的樣式,如定一個(gè).disabled類,樣式修飾讓它看上去像一個(gè)灰掉的鏈接,通過(guò)繼承a這一元素實(shí)現(xiàn):

.disabled{
    color: gray;
    @extend a;
}

還有一些關(guān)于復(fù)雜選擇器的繼承規(guī)則:

如果繼承了一個(gè)復(fù)雜的選擇器,那么只會(huì)繼承這個(gè)復(fù)雜選擇器命中的樣式, 比如.seriousError @extend .important.error,那么被繼承的.important.error被看做一個(gè)整體,多帶帶的.important或者.error是不會(huì)被繼承的;

如果一個(gè)選擇器序列繼承了另一個(gè)選擇器,那么只會(huì)完全命中序列選擇器的才會(huì)繼承,比如(#main .seriousError) @extend .error最好不要這么做),那么前者的#main .seriousError也被看做一個(gè)整體,只有完全命中這個(gè)選擇器的才會(huì)繼承;

以逗號(hào)分隔的選擇器序列是不能被繼承的,因?yàn)檫@和繼承其中任何一個(gè)選擇器效果一樣。

5. 使用繼承時(shí)注意后代選擇器

可以放心地繼承有后代選擇器修飾的選擇器,但不用用后代選擇器去繼承別的選擇器。即放心地用.serious { @extend (.main .error) },但是不要用.something .serious { @exten .error }

為什么,因?yàn)椴贿@么做可能會(huì)導(dǎo)致繼承迅速變復(fù)雜,sass可能會(huì)遺漏一些情況,考慮:

.foo .bar { @extend .baz; }
.bip .baz { a:b; }

當(dāng)下面那條規(guī)則應(yīng)用到.foo .bar時(shí),有3種情況:

...
...
...

所以sass必須要生成3種組合選擇器才能覆蓋這3種情況,但遺憾的是,sass并不總是會(huì)生成所有情況,另外,這樣做,選擇器的個(gè)數(shù)會(huì)迅速增加,所以最好的方式是不要這么用。

三. 小結(jié)

Sass保持樣式復(fù)用和簡(jiǎn)潔的兩個(gè)方式,一是混合器,混合器主要用于樣式展示層的復(fù)用,可以給混合器傳參從而在復(fù)用代碼的同時(shí)保持靈活性,二是選擇器繼承,一般和類一起使用,主要用于建立在語(yǔ)義化關(guān)系上的樣式復(fù)用,注意繼承可能引發(fā)的問(wèn)題。

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

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

相關(guān)文章

  • 通用 CSS 筆記、建議與指導(dǎo)

    摘要:如下區(qū)塊標(biāo)題前綴可以讓我們使用命令查找標(biāo)題名時(shí)將搜索范圍限制在區(qū)塊標(biāo)題中。 在參與規(guī)模龐大、歷時(shí)漫長(zhǎng)且參與人數(shù)眾多的項(xiàng)目時(shí),所有開(kāi)發(fā)者遵守如下規(guī)則極為重要: 保持 CSS 易于維護(hù) 保持代碼清晰易懂 保持 CSS 的可拓展性 為了實(shí)現(xiàn)這一目標(biāo),我們要采用諸多方法。 本文檔第一部分將探討語(yǔ)法、格式以及分析 CSS 結(jié)構(gòu);第二部分將圍繞方法論、思維框架以及編寫與規(guī)劃 CSS 的看法...

    lushan 評(píng)論0 收藏0
  • sass筆記-2|Sass基礎(chǔ)語(yǔ)法樣式表更具條理性可讀性

    摘要:這個(gè)時(shí)候小明如果僅僅引入不想改,那么就是這個(gè)值,如果他想改,就可以在任何一處重新聲明這個(gè)變量,那么就會(huì)變成小明的值。 這一篇主要詳述保持sass條理性和可讀性的3個(gè)最基本方法——嵌套、導(dǎo)入和注釋。 零. 變量 變量本身的作用是為了保持屬性值的可維護(hù)性,把所有需要維護(hù)的屬性值放在同一個(gè)地方,快速更改,處處生效,可謂售后無(wú)憂。 1.變量聲明 變量用$符號(hào)開(kāi)頭進(jìn)行聲明,任何可以用作CSS屬性...

    CloudDeveloper 評(píng)論0 收藏0
  • SASS學(xué)習(xí)記錄

    摘要:前言很久沒(méi)有用文章記錄自己的學(xué)習(xí)歷程了,主要是因?yàn)閷?shí)在寫的不行,相比大牛寫的博客,我這只能算是東拼西湊或者說(shuō)是讀書筆記。以前我只使用外部,現(xiàn)在的更加好用,所以在學(xué)習(xí)過(guò)程中記了一些筆記。在后面加一個(gè)感嘆號(hào),表示這是重要注釋。 前言 很久沒(méi)有用文章記錄自己的學(xué)習(xí)歷程了,主要是因?yàn)閷?shí)在寫的不行,相比大牛寫的博客,我這只能算是東拼西湊或者說(shuō)是讀書筆記。但是今天還是拾起筆來(lái)了,雖然沒(méi)什么干貨,但...

    tylin 評(píng)論0 收藏0
  • SASS學(xué)習(xí)記錄

    摘要:前言很久沒(méi)有用文章記錄自己的學(xué)習(xí)歷程了,主要是因?yàn)閷?shí)在寫的不行,相比大牛寫的博客,我這只能算是東拼西湊或者說(shuō)是讀書筆記。以前我只使用外部,現(xiàn)在的更加好用,所以在學(xué)習(xí)過(guò)程中記了一些筆記。在后面加一個(gè)感嘆號(hào),表示這是重要注釋。 前言 很久沒(méi)有用文章記錄自己的學(xué)習(xí)歷程了,主要是因?yàn)閷?shí)在寫的不行,相比大牛寫的博客,我這只能算是東拼西湊或者說(shuō)是讀書筆記。但是今天還是拾起筆來(lái)了,雖然沒(méi)什么干貨,但...

    HollisChuang 評(píng)論0 收藏0
  • sass筆記-1|Sass是如何幫你又快又好地搞定CSS的

    摘要:輸出的是這樣的可以看到,當(dāng)用繼承的樣式時(shí),和也完全套用了的樣式,而且你會(huì)發(fā)現(xiàn),規(guī)則并沒(méi)有被重復(fù)輸出,而且這樣的方式更符合我們對(duì)于這幾個(gè)選擇器的認(rèn)知如果你之前用過(guò)面向?qū)ο缶幊痰脑挕? Sass學(xué)習(xí)筆記持續(xù)整理中,開(kāi)篇不講怎么安裝,sass是什么,這些搜索引擎會(huì)告訴你,我們從sass的作用開(kāi)始講起,知道sass用來(lái)干什么,有什么作用,我們才能相信用sass的好處,并且時(shí)時(shí)刻刻想著sass的設(shè)...

    xiaolinbang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<