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

資訊專欄INFORMATION COLUMN

SASS @extend官方文檔剖析

宋華 / 3311人閱讀

摘要:但是這兩個(gè)其實(shí)都是相差無幾的,只是有細(xì)微的差別。目前就先這樣理解,其實(shí)這個(gè)實(shí)現(xiàn)的方式是跟我們現(xiàn)實(shí)邏輯顛倒的。但是為了避免不必要的重復(fù)。和會(huì)調(diào)換位置,換完之后在省略重復(fù)的。

@extend用法剖析

提醒:建議繼承那些干凈的無后代寫法的樣式

我們經(jīng)常會(huì)遇到這樣的情況,當(dāng)我們?cè)陂_發(fā)頁面時(shí)候一個(gè)class需要包含前一個(gè)class的所有樣式,但是又必須有他自己特殊新增的樣式。但是這兩個(gè)class其實(shí)都是相差無幾的,只是有細(xì)微的差別。比如錯(cuò)誤提示的樣式(.error和.specialerror),既然后著只是比前者多一兩句樣式,為何還要寫兩個(gè)class呢,因?yàn)槲覀儾幌氚亚罢?error的樣式重新在寫一遍,無聊極了。但是這樣帶來一個(gè)問題,就是html標(biāo)簽上會(huì)多出好幾個(gè)class。

為了解決這個(gè)問題,sass里提供了@extend的解決方法
先看一個(gè)例子:

Oh no! You"ve been hacked!

我們的css如下

.error {
  border: 1px #f00;
  background-color: #fdd;
}
.specialerror {
  border-width: 3px;
}

這里就出現(xiàn)我們剛說的問題了,其實(shí)我們心里是十萬個(gè)不愿意就這么在后面唐突的加個(gè)specialerror的,因?yàn)槿绻粚憇pecialerror,就丟失了前面的樣式(為什么呢,因?yàn)槲覀儧]有在specialerror里復(fù)寫error的樣式,只是新增了)

通過Sass的@extend,一個(gè)選擇器將繼承另一個(gè)選擇器的樣式
例如:

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

被編譯為:

.error, .specialerror {
  border: 1px #f00;
  background-color: #fdd;
}

.specialerror {
  border-width: 3px;
}

意味著.error所有的樣式都會(huì)加到.specialerror上,這樣.specialerror就會(huì)有.error的樣式了。這樣我們就可以只寫.specialerror了。目前就先這樣理解,其實(shí)這個(gè)@extend實(shí)現(xiàn)的方式是跟我們現(xiàn)實(shí)邏輯顛倒的。

但是如果改成這樣:

 .error {
      border: 1px #f00;
      background-color: #fdd;
    }
    .specialerror {
      @extend .error;
      border-width: 3px;
    }
    .error.intrusion {
      background-image: url("/image/hacked.png");
    }

加上面這段樣式后

就會(huì)加上和
一樣的背景

怎么做到的呢

.error {
      border: 1px #f00;
      background-color: #fdd;
    }
    
.error.intrusion {
  background-image: url("/image/hacked.png");
}

.specialerror {
  @extend .error;
  border-width: 3px;
}

被編譯為:

.error, .specialerror {
  border: 1px #f00;
  background-color: #fdd; }

.error.intrusion, .specialerror.intrusion {
  background-image: url("/image/hacked.png"); }

.specialerror {
  border-width: 3px; }

這里需要重點(diǎn)講解下,其實(shí)我們正常理解增加擴(kuò)充添加就是copy然后paste,是的,這樣思考其實(shí)也是對(duì)的,就像文章一開始那個(gè)最簡(jiǎn)單的例子。但是為了避免不必要的重復(fù)。@extend的邏輯稍稍不同。你可以這樣認(rèn)為,使用@extend時(shí)候sass會(huì)將.error相關(guān)樣式先拷貝一份,

 .specialerror {
      @extend .error;
      border-width: 3px;
    }

然后把字符“specialerror”存儲(chǔ)在@extend里,遇到”error“字符就進(jìn)行替換,這樣.specialerror就有了.error的樣式啦!這也就能解釋,為什么會(huì)出現(xiàn)下面.specialerror.intrusion的原因了。

  .error.intrusion, .specialerror.intrusion {
      background-image: url("/image/hacked.png"); }

當(dāng)組合選擇器的樣式時(shí), @extend 能夠很聰明得避免不必要的重復(fù),例如.seriousError.seriousError會(huì)被轉(zhuǎn)換成.seriousError。不會(huì)生成類似#main#footer的不可用選擇器。

求證例子:

.hoverlink {
  @extend a:hover;
}
a:hover {
  text-decoration: underline;
}

被編譯為:

a:hover, .hoverlink {
  text-decoration: underline; }

就像上面的.error.intrusion ,任何使用 a:hover 都會(huì)替換為 .hoverlink,即使中間包含其他選擇器。例如:

.hoverlink {
  @extend a:hover;
}
.comment a.user:hover {
  font-weight: bold;
}

被編譯為:

.comment a.user:hover, .comment .user.hoverlink {
  font-weight: bold; }

Multiple Extends

一個(gè)選擇器還可以擴(kuò)充多個(gè)選擇器的樣式例如:

.error {
  border: 1px #f00;
  background-color: #fdd;
}
.attention {
  font-size: 3em;
  background-color: #ff0;
}
.seriousError {
  @extend .error;
  @extend .attention;
  border-width: 3px;
}

被編譯為:

.error, .seriousError {
  border: 1px #f00;
  background-color: #fdd; }

.attention, .seriousError {
  font-size: 3em;
  background-color: #ff0; }

.seriousError {
  border-width: 3px; }

對(duì)于下面這種只需注意下就行,就是.criticalError內(nèi) “@extend .seriousError”這句話。在運(yùn)行這句語句時(shí)候,sass會(huì)檢測(cè)到.seriousError內(nèi)有“@extend .error”。
所以.criticalError既有.error的樣式也有.seriousError的樣式,故criticalError需要替換的是error和seriousError。

.error {
  border: 1px #f00;
  background-color: #fdd;
}
.seriousError {
  @extend .error;
  border-width: 3px;
}
.criticalError {
  @extend .seriousError;
  position: fixed;
  top: 10%;
  bottom: 10%;
  left: 10%;
  right: 10%;
}

被編譯為:

.error, .seriousError, .criticalError {
  border: 1px #f00;
  background-color: #fdd; }

.seriousError, .criticalError {
  border-width: 3px; }

.criticalError {
  position: fixed;
  top: 10%;
  bottom: 10%;
  left: 10%;
  right: 10%; }

選擇器序列
例如.foo .bar或者 .foo + .bar, 目前還不能擴(kuò)展. 但是對(duì)于嵌套的選擇器還是可以使用@extend添加到其他選擇器的 例如:

#fake-links .link {
  @extend a;
}

a {
  color: blue;
  &:hover {
    text-decoration: underline;
  }
}

編譯為:

a, #fake-links .link {
  color: blue; }
  a:hover, #fake-links .link:hover {
    text-decoration: underline; }

當(dāng)兩個(gè)沒有共同點(diǎn)的序列擴(kuò)充組合時(shí)候, 將會(huì)產(chǎn)生兩個(gè)不同的選擇器: 一種是第一個(gè)序列在前,另一種是第二個(gè)序列在前例如: #admin .tabbar會(huì)和#demo .overview調(diào)換位置。

#admin .tabbar a {
  font-weight: bold;
}
#demo .overview .fakelink {
  @extend a;
}

被編譯為:

#admin .tabbar a,
#admin .tabbar #demo .overview .fakelink,
#demo .overview #admin .tabbar .fakelink {
  font-weight: bold; }

如果另個(gè)序列有一些共同的選擇器,這些選擇器將會(huì)被組合在一起而且只有不同的將會(huì)保留下來。下面這個(gè)例子中, 每個(gè)寫都包含id #admin, 所以產(chǎn)生的選擇器就會(huì)合并這兩個(gè)#admin。#admin .tabbar和 #admin .overview會(huì)調(diào)換位置,換完之后在省略重復(fù)的。

  #admin .tabbar a {
      font-weight: bold;
    }
    #admin .overview .fakelink {
      @extend a;
    }

這被編譯為:

 #admin .tabbar a,
    #admin .tabbar .overview .fakelink,
    #admin .overview .tabbar .fakelink {
      font-weight: bold; }




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

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

相關(guān)文章

  • 【React 實(shí)戰(zhàn)教程】從0到1 構(gòu)建 github star管理工具

    摘要:公司的前端技術(shù)棧是,而筆者之前使用的是,因此正好想利用的自己構(gòu)建個(gè)的管理項(xiàng)目來加深的使用。會(huì)出現(xiàn)不在尾部的問題。 前言 在日常使用github中,除了利用git進(jìn)行項(xiàng)目版本控制之外,最多的用處就是游覽各式的項(xiàng)目,在看到一些有趣或者有用的項(xiàng)目之后,我們通常就會(huì)順手star,目的是日后再看。但是當(dāng)我們star了許多項(xiàng)目之后,回過頭想找一個(gè)的項(xiàng)目就會(huì)發(fā)現(xiàn),很難在短時(shí)間內(nèi)找到它,官方也并沒有提...

    Charlie_Jade 評(píng)論0 收藏0
  • gulp-work-flow 前端工作流原來可以這么簡(jiǎn)單

    摘要:話不多說,今天的主題是使用打造傳統(tǒng)項(xiàng)目的前端工作流。是一個(gè)廣泛使用的轉(zhuǎn)碼器,可以將代碼轉(zhuǎn)為代碼,從而在現(xiàn)有環(huán)境執(zhí)行。這意味著,你可以用的方式編寫程序,又不用擔(dān)心現(xiàn)有環(huán)境是否支持。 概述 最近前端一直是一個(gè)火熱的話題,前端技術(shù)棧也是伴隨著nodejs的出現(xiàn)而更替的飛快,導(dǎo)致大部分前端開發(fā)者曾一度迷茫在這各種技術(shù)選型上,比如前端自動(dòng)化工具就有Grunt,Gulp,Webpack,F(xiàn)is3等...

    weakish 評(píng)論0 收藏0
  • sass的基本使用

    摘要:本文所有的例子都是在中編譯,而可以自行編譯,具體可以查看該鏈接配置的概念定義是的一種預(yù)處理器,文件后綴名為,可以用中的來轉(zhuǎn)成樣式。 最近在項(xiàng)目中利用到了css預(yù)處理器(sass),而之前沒接觸過的本博主出于好奇心,就在業(yè)余的時(shí)間里搜了一些資料來看看,看完后覺得sass挺不錯(cuò),就想簡(jiǎn)單的介紹一下sass的基本使用方法(ps:本文只介紹sass的一些基本使用,而這些內(nèi)容都是本博主覺得比較有...

    alighters 評(píng)論0 收藏0
  • React+TypeScript+Mobx+AntDesignMobile進(jìn)行移動(dòng)端項(xiàng)目搭建

    摘要:通過裝飾器或者利用時(shí)調(diào)用的函數(shù)來進(jìn)行使用下面代碼中當(dāng)或者發(fā)生變化時(shí),會(huì)監(jiān)聽數(shù)據(jù)變化確保通過觸發(fā)方法自動(dòng)更新。只能影響正在運(yùn)行的函數(shù),而無法影響當(dāng)前函數(shù)調(diào)用的異步操作參考官方文檔用法裝飾器函數(shù)遵循中標(biāo)準(zhǔn)的綁定規(guī)則。 前言: 本文基于React+TypeScript+Mobx+AntDesignMobile技術(shù)棧,使用Create-React-App腳手架進(jìn)行一個(gè)移動(dòng)端項(xiàng)目搭建,主要介紹項(xiàng)...

    lindroid 評(píng)論0 收藏0
  • wepy - 一個(gè)小程序的組件化開發(fā)框架

    摘要:主要解決問題開發(fā)模式轉(zhuǎn)換在原有的小程序的開發(fā)模式下進(jìn)行再次封裝,更貼近于現(xiàn)有框架開發(fā)模式。官方代碼獲取應(yīng)用實(shí)例事件處理函數(shù)基于的實(shí)現(xiàn)支持組件化開發(fā)。根組件,一般都是頁面父組件小程序?qū)ο笞咏M件列表方法參數(shù)返回值說明組件初始化。 小程序框架wepy文檔 Github地址 快速入門 項(xiàng)目創(chuàng)建與使用 安裝wepy 以下安裝都通過npm安裝 安裝 wepy 命令行工具。 npm install ...

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

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

0條評(píng)論

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