国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

切換頁(yè)面主題樣式研究及l(fā)ess教程

DangoSky / 3494人閱讀

摘要:具體操作如下這樣我們就可以自由的切換主題啦。這個(gè)時(shí)候只需要引入一份就行了,要切換樣式的時(shí)候修改的類標(biāo)簽。,有沒(méi)有更好的切換主題的方案呢,求大佬指點(diǎn)參考

某一天,一個(gè)頭條的大佬問(wèn)我,聽說(shuō)你之前在項(xiàng)目里面弄過(guò)主題切換,你當(dāng)時(shí)是怎么實(shí)現(xiàn)的可以詳說(shuō)一下嗎?

如果已經(jīng)對(duì)less了如指掌,直接從這里開始。

從less說(shuō)起 使用

Node.js 環(huán)境中使用 Less :

npm install -g less
> lessc styles.less styles.css

在瀏覽器環(huán)境中使用 Less :


不過(guò)比較推薦的還是通過(guò)webpack或者gulp等工具先將less編譯成css,然后再引入使用。

變量
@nice-blue: #5B83AD;
@light-blue: @nice-blue + #111;

#header {
  color: @light-blue;
}
混合

常用

.bordered {
  border-top: dotted 1px black;
  &:hover {
    border: 1px solid red;
  }  // 同樣可以包含選擇器混用
}
.post a {
  color: red;
  .bordered !important;  // 可以在屬性后面都加上!important
}

編譯后不輸出至css文件

.my-other-mixin() {
  background: white;
}

作用域混合

#outer {
  .inner() {
    color: red;
  }
}
#outer1 {
  .inner() {
    color: blue;
  }
}
.c {
  #outer > .inner;
}

輸出

.c {
  color: red;
}

擁有前置條件的作用域混合,更多詳情

@mode: little;
#outer when (@mode=huge) {
  .inner {
    color: red;
  }
}
#outer when (@mode=little) {
  .inner {
    color: blue;
  }
}
.c {
  #outer > .inner;
}

輸出(可以看到?jīng)]有通過(guò)前置條件的樣式被過(guò)濾了)

#outer .inner {
  color: blue;
}
.c {
  color: blue;
}

帶參數(shù)混合,可以指定默認(rèn)值,可以帶多個(gè)參數(shù),使用時(shí)可以通過(guò)名稱賦值

.mixin(@color: black; @margin: 10px; @padding: 20px) {
  color: @color;
  margin: @margin;
  padding: @padding;
}
.class1 {
  .mixin(@margin: 20px; @color: #33acfe);
}
.class2 {
  .mixin(#efca44; @padding: 40px);
}

使用@arguments

.mixin(@a; @b) {
  margin: @arguments; 
  right:extract(@arguments,2); 
  top:@b;
}
p {.mixin(1px; 2px);}

輸出

p {
  margin: 1px 2px;
  right: 2px;
  top: 2px;
}

使用@rest參數(shù)

// 方式1
.mixin(@listofvariables...) {
  border: @listofvariables;
}
p {
  .mixin(1px; solid; red);
}
// 方式2
.mixin(@a; ...) { color: @a;}
.mixin(@a) { background-color: contrast(@a); width:100%;}
.mixin(@a; @b;) { background-color: contrast(@a); width:@b;}
p {
.mixin(red);
}
p.small {
.mixin(red,50%);
}

輸出

/*方式1*/
p {
  border: 1px solid red;
}
/*方式2*/
p {
  color: red;
  background-color: #ffffff;
  width: 100%;
}
p.small {
  color: red;
  background-color: #ffffff;
  width: 50%;
}

模式匹配混合

.mixin(dark; @color) {
  color: darken(@color, 10%);
}
.mixin(light; @color) {
  color: lighten(@color, 10%);
}
.mixin(@_; @color) {
  display: block;
}
@switch: light;
.class {
  .mixin(@switch; #888);
}

輸出

.class {
  color: #a2a2a2;
  display: block;
}

規(guī)則集混合

// declare detached ruleset
@detached-ruleset: { background: red; };

// use detached ruleset
.top {
    @detached-ruleset(); 
}

函數(shù)

類似于先函數(shù)運(yùn)算計(jì)算出變量的值,再通過(guò)變量的值設(shè)置屬性。

.mixin() {
  @width:  100%;
  @height: 200px;
}

.caller {
  .mixin();
  width:  @width;
  height: @height;
}

輸出

.caller {
  width:  100%;
  height: 200px;
}
繼承

繼承另外一個(gè)選擇器的屬性,更多詳情

nav ul {
  &:extend(.inline);
  background: blue;
}  // &是父類型選擇器,指代的是nav ul
.inline {
  color: red;
}

輸出

nav ul {
  background: blue;
}
.inline,
nav ul {
  color: red;
}
嵌套
#header {
  color: black;
  .navigation {
    font-size: 12px;
  }
  .logo {
    width: 300px;
  }
}
引入
@import "foo";      // foo.less is imported
@import "foo.less"; // foo.less is imported
@import "foo.php";  // foo.php imported as a less file
@import "foo.css";  // statement left in place, as-is
參數(shù)

@import (keyword) "filename";

reference: use a Less file but do not output it

inline: include the source file in the output but do not process it

less: treat the file as a Less file, no matter what the file extension

css: treat the file as a CSS file, no matter what the file extension

once: only include the file once (this is default behavior)

multiple: include the file multiple times

optional: continue compiling when file is not found

循環(huán)
.generate-columns(4);

.generate-columns(@n, @i: 1) when (@i =< @n) {
  .column-@{i} {
    width: (@i * 100% / @n);
  }
  .generate-columns(@n, (@i + 1));
}

輸出

.column-1 {
  width: 25%;
}
.column-2 {
  width: 50%;
}
.column-3 {
  width: 75%;
}
.column-4 {
  width: 100%;
}
合并

逗號(hào)合并

.mixin() {
  box-shadow+: inset 0 0 10px #555;
}
.myclass {
  .mixin();
  box-shadow+: 0 0 20px black;
}

輸出

.myclass {
  box-shadow: inset 0 0 10px #555, 0 0 20px black;
}

空格合并

.mixin() {
  transform+_: scale(2);
}
.myclass {
  .mixin();
  transform+_: rotate(15deg);
}

輸出

.myclass {
  transform: scale(2) rotate(15deg);
}

切換主題樣式 方案1

當(dāng)幾種主題布局類似,幾乎只是顏色不同時(shí),可以使用這種。

通過(guò)對(duì)less的了解(可以進(jìn)行許多額外的騷操作哦),我們這里最簡(jiǎn)單地編寫出如下less文件。

基礎(chǔ)樣式模版style.less,里面主要通過(guò)變量設(shè)置各個(gè)樣式

愛國(guó)紅樣式patriotic-red.less,設(shè)置變量的值

天空藍(lán)樣式sky-blue.less,設(shè)置不同的變量值

...

style.less里樣式類似這樣

a,
.link {
  color: @link-color;
}
a:hover {
  color: @link-color-hover;
}
.widget {
  color: #fff;
  background: @link-color;
}

patriotic-red.less里樣式類似這樣

@import "style";
@link-color: #f03818; 
@link-color-hover: darken(@link-color, 10%);

sky-blue.less里樣式類似這樣

@import "test";
@link-color: #428bca;
@link-color-hover: darken(@link-color, 10%);

利用相關(guān)工具(或原始人手動(dòng)lessc)提前編譯成patriotic-red.csssky-blue.css文件。

這里簡(jiǎn)單的假設(shè)頁(yè)面header中只引入了默認(rèn)愛國(guó)紅——

同時(shí)存在一個(gè)按鈕,用戶點(diǎn)擊時(shí)切換主題。首先我們給按鈕綁定點(diǎn)擊事件,當(dāng)用戶點(diǎn)擊時(shí)刪除當(dāng)前導(dǎo)入的樣式,然后再引入另外一個(gè)樣式。具體操作如下:

  function toggleThemeClick() {
    let a = document.getElementsByTagName("link");
    let aHref = a[0].getAttribute("href").slice(2, -4);
    a[0].parentElement.removeChild(a[0]);
    let b = document.createElement("link");
    b.setAttribute("rel", "stylesheet");
    if ("patriotic-red" === aHref) {
      b.setAttribute("href", "./sky-blue.css");
    } else {
      b.setAttribute("href", "./patriotic-red.css");
    }
    document.getElementsByTagName("head")[0].appendChild(b);
  }

這樣我們就可以自由的切換主題啦。

方案2

我們還可以通過(guò)給body添加類標(biāo)簽來(lái)進(jìn)行主題的切換。

新建一個(gè)style-mixin.less,里面內(nèi)容如下——

.patriotic-red {
  @import "patriotic-red";
}
.sky-blue {
  @import "sky-blue";
}

這里需要注意的是,在sky-blue.less或者patriotic-red.less中引入style.less時(shí),需要使用(multiple)參數(shù),否則會(huì)只編譯出一份樣式。編譯出來(lái)的樣式會(huì)自動(dòng)加上.patriotic-redsky-blue前綴。

這個(gè)時(shí)候只需要引入一份style-mixin.css就行了,要切換樣式的時(shí)候修改body的類標(biāo)簽。

document,getElementsByTagName("body")[0].className="xxx"

題外話

頭條大佬似乎并不是很認(rèn)可方案1,他認(rèn)為方案1會(huì)導(dǎo)致之前引入的樣式和后來(lái)的沖突?我沒(méi)有明白具體是什么意思,由于時(shí)間關(guān)系他也沒(méi)有解釋得很清楚,希望知道問(wèn)題出在哪里的同學(xué)告訴我一下哦。

ps,有沒(méi)有更好的切換主題的方案呢,求大佬指點(diǎn)~

參考

lesscss.cn

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/114455.html

相關(guān)文章

  • 切換頁(yè)面主題樣式研究less教程

    摘要:具體操作如下這樣我們就可以自由的切換主題啦。這個(gè)時(shí)候只需要引入一份就行了,要切換樣式的時(shí)候修改的類標(biāo)簽。,有沒(méi)有更好的切換主題的方案呢,求大佬指點(diǎn)參考 某一天,一個(gè)頭條的大佬問(wèn)我,聽說(shuō)你之前在項(xiàng)目里面弄過(guò)主題切換,你當(dāng)時(shí)是怎么實(shí)現(xiàn)的可以詳說(shuō)一下嗎? 如果已經(jīng)對(duì)less了如指掌,直接從這里開始。 從less說(shuō)起 使用 Node.js 環(huán)境中使用 Less : npm install -g...

    taoszu 評(píng)論0 收藏0
  • 切換頁(yè)面主題樣式研究less教程

    摘要:具體操作如下這樣我們就可以自由的切換主題啦。這個(gè)時(shí)候只需要引入一份就行了,要切換樣式的時(shí)候修改的類標(biāo)簽。,有沒(méi)有更好的切換主題的方案呢,求大佬指點(diǎn)參考 某一天,一個(gè)頭條的大佬問(wèn)我,聽說(shuō)你之前在項(xiàng)目里面弄過(guò)主題切換,你當(dāng)時(shí)是怎么實(shí)現(xiàn)的可以詳說(shuō)一下嗎? 如果已經(jīng)對(duì)less了如指掌,直接從這里開始。 從less說(shuō)起 使用 Node.js 環(huán)境中使用 Less : npm install -g...

    hosition 評(píng)論0 收藏0
  • 應(yīng)用vue2+vuex+vue-router+webpack2+es6+express+mysql技

    摘要:其實(shí)這里還是有漏洞的,坐等高手指出來(lái)微笑臉后臺(tái)沒(méi)有用生成一個(gè)完整的架構(gòu)。來(lái)自不同視圖的行為需要變更同一狀態(tài)。 最近對(duì)vue很感興趣,趁閑暇時(shí)間,模仿了wunderlist里面的部分功能,編寫了前后端分離的基于vue技術(shù)棧和express的todolist小項(xiàng)目。寫這篇博文來(lái)總結(jié)思考下。項(xiàng)目所在github,可以自行參考克隆。 本人博客 總體概覽 整個(gè)項(xiàng)目最終做成的樣子如下: showI...

    voidking 評(píng)論0 收藏0
  • vue開發(fā)項(xiàng)目完全指南

    摘要:有兩種方法,一種是在開發(fā)環(huán)境中設(shè)置通過(guò)的,另一種是在服務(wù)器上修改的配置設(shè)置。這樣我們以后使用訪問(wèn)接口就可以不加了,打包后訪問(wèn)也不用手動(dòng)去除統(tǒng)一管理在項(xiàng)目開發(fā)過(guò)程中,會(huì)涉及到很多接口的處理,當(dāng)項(xiàng)目足夠大時(shí),就需要統(tǒng)一管理接口。 這篇文章總結(jié)了vue項(xiàng)目的所遇到的問(wèn)題,包括跨域、用戶認(rèn)證、接口統(tǒng)一管理、路由配置、兼容性處理,性能優(yōu)化等內(nèi)容。 項(xiàng)目github地址 : 前端 https:...

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

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

0條評(píng)論

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