亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

詳解在React項目中安裝并使用Less(用法總結)

2024-05-06 16:49:12
字體:
來源:轉載
供稿:網友

less的安裝配置

安裝react-app-rewired,react-app-rewire-less,babel-plugin-import插件

執行命令:

npm install react-app-rewired --save-devnpm install react-app-rewire-less --save-devnpm install babel-plugin-import --save-dev

配置package.json文件 找到scripts屬性,修改start的值為react-app-rewired start,如下圖:

 

 

React,Less

根目錄下創建config-overrides.js文件

const { injectBabelPlugin } = require('react-app-rewired');const rewireLess = require('react-app-rewire-less');module.exports = function override(config, env) {   config = rewireLess.withLoaderOptions({   modifyVars: { "@primary-color": "#9F35FF" },})(config, env); return config;}

less的基本使用

LESS 做為 CSS 的一種形式的擴展,它并沒有閹割 CSS 的功能,而是在現有的 CSS 語法上,添加了很多額外的功能,了解完安裝過程,接下來看看less具體怎么使用

變量

在less中利用@符號進行變量的定義,很容易理解:復制代碼

@nice-blue: #5B83AD;@light-blue: @nice-blue + #111;#header { color: @light-blue; }

以上代碼編譯后輸出為:

#header { color: #6c94be; }

less中支持變量名定義為變量,例如:

@fnord: "I am fnord.";@var: 'fnord';content: @@var;

解析后:

content: "I am fnord.";

注意: LESS 中的變量為完全的 ‘常量' ,所以只能定義一次

混合

在 LESS 中我們可以定義一些通用的屬性集為一個class,然后在另一個class中去調用這些屬性. 下面有這樣一個class:

.bordered { border-top: dotted 1px black; border-bottom: solid 2px black;}

那如果我們現在需要在其他class中引入那些通用的屬性集,那么我們只需要在任何class中像下面這樣調用就可以:

#menu a { color: #111; .bordered;}.post a { color: red; .bordered;}

.bordered class里面的屬性樣式都會在 #menu a 和 .post a 中體現出來:

#menu a { color: #111; border-top: dotted 1px black; border-bottom: solid 2px black;}.post a { color: red; border-top: dotted 1px black; border-bottom: solid 2px black;}

任何 CSS class, id 或者 元素 屬性集都可以以同樣的方式引入.

帶參數混合

在 LESS 中,你還可以像函數一樣定義一個帶參數的屬性集合:

.border-radius (@radius) { border-radius: @radius; -moz-border-radius: @radius; -webkit-border-radius: @radius;}

然后在其他class中像這樣調用它:

#header { .border-radius(4px);}.button { .border-radius(6px); }

我們還可以像這樣給參數設置默認值:

.border-radius (@radius: 5px) { border-radius: @radius; -moz-border-radius: @radius; -webkit-border-radius: @radius;}

所以現在如果我們像這樣調用它的話:

#header { .border-radius; }

radius的值就會是5px. 你也可以定義不帶參數屬性集合,如果你想隱藏這個屬性集合,不讓它暴露到CSS中去,但是你還想在其他的屬性集合中引用,你會發現這個方法非常的好用:

.wrap () { text-wrap: wrap; white-space: pre-wrap; white-space: -moz-pre-wrap; word-wrap: break-word;}pre { .wrap }

輸出:

pre { text-wrap: wrap; white-space: pre-wrap; white-space: -moz-pre-wrap; word-wrap: break-word;}

@arguments 變量

@arguments 包含了所有傳遞進來的參數. 如果你不想單獨處理每一個參數的話就可以像這樣寫:

.box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #000) { box-shadow: @arguments; -moz-box-shadow: @arguments; -webkit-box-shadow: @arguments;}.box-shadow(2px, 5px);

將會輸出:

box-shadow: 2px 5px 1px #000;-moz-box-shadow: 2px 5px 1px #000;-webkit-box-shadow: 2px 5px 1px #000;

模式匹配和導引表達式

有些情況下,我們想根據傳入的參數來改變混合的默認呈現,比如下面這個例子:

.mixin (@s, @color) { ... }.class { .mixin(@switch, #888);}

如果想讓 .mixin 根據不同的 @switch 值而表現各異,如下這般設置:

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

現在,如果運行:

@switch: light;.class { .mixin(@switch, #888);}

就會得到下列CSS:

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

如上, .mixin 就會得到傳入顏色的淺色。如果 @switch 設為dark,就會得到深色. 具體實現如下:

第一個混合定義并未被匹配,因為它只接受 dark 做為首參 第二個混合定義被成功匹配,因為它只接受 light 第三個混合定義被成功匹配,因為它接受任意值

只有被匹配的混合才會被使用。變量可以匹配任意的傳入值,而變量以外的固定值就僅僅匹配與其相等的傳入值。 我們也可以匹配多個參數:

.mixin (@a) { color: @a;}.mixin (@a, @b) { color: fade(@a, @b);}

當我們想根據表達式進行匹配,而非根據值和參數匹配時,導引就顯得非常有用。如果你對函數式編程非常熟悉,那么你很可能已經使用過導引。

為了盡可能地保留CSS的可聲明性,LESS通過導引混合而非if/else語句來實現條件判斷,因為前者已在@media query特性中被定義。 以此例做為開始:

.mixin (@a) when (lightness(@a) >= 50%) { background-color: black;}.mixin (@a) when (lightness(@a) < 50%) { background-color: white;}.mixin (@a) { color: @a;}

when關鍵字用以定義一個導引序列(此例只有一個導引)。接下來我們運行下列代碼:

.class1 { .mixin(#ddd) }.class2 { .mixin(#555) }

就會得到:

.class1 { background-color: black; color: #ddd;}.class2 { background-color: white; color: #555;}

導引中可用的全部比較運算有: > >= = =< <。此外,關鍵字 true 只表示布爾真值,下面兩個混合是相同的:

.truth (@a) when (@a) { ... }.truth (@a) when (@a = true) { ... }

除去關鍵字true以外的值都被視示布爾假:

.class { .truth(40); // Will not match any of the above definitions.}

導引序列使用逗號‘ , '—分割,當且僅當所有條件都符合時,才會被視為匹配成功。

.mixin (@a) when (@a > 10), (@a < -10) { ... }

導引可以無參數,也可以對參數進行比較運算:

@media: mobile;.mixin (@a) when (@media = mobile) { ... }.mixin (@a) when (@media = desktop) { ... }.max (@a, @b) when (@a > @b) { width: @a }.max (@a, @b) when (@a < @b) { width: @b }

最后,如果想基于值的類型進行匹配,我們就可以使用is*函式:

.mixin (@a, @b: 0) when (isnumber(@b)) { ... }.mixin (@a, @b: black) when (iscolor(@b)) { ... }

下面就是常見的檢測函式:

  • iscolor
  • isnumber
  • isstring
  • iskeyword
  • isurl

如果你想判斷一個值是純數字,還是某個單位量,可以使用下列函式:

  • ispixel
  • ispercentage
  • isem

最后再補充一點,在導引序列中可以使用and關鍵字實現與條件:

.mixin (@a) when (isnumber(@a)) and (@a > 0) { ... }

使用not關鍵字實現或條件

.mixin (@b) when not (@b > 0) { ... }

嵌套規則

LESS 可以讓我們以嵌套的方式編寫層疊樣式. 讓我們先看下下面這段 CSS:

#header { color: black; }#header .navigation { font-size: 12px;}#header .logo { width: 300px;}#header .logo:hover { text-decoration: none;}

在 LESS 中, 我們就可以這樣寫:

#header { color: black; .navigation { font-size: 12px;} .logo { width: 300px; &:hover { text-decoration: none }}}

或者這樣寫:

 #header  { color: black; .navigation { font-size: 12px } .logo  { width: 300px; &:hover { text-decoration: none }}}

代碼更簡潔了,而且感覺跟 DOM 結構格式有點像. 注意 & 符號的使用—如果你想寫串聯選擇器,而不是寫后代選擇器,就可以用到 & 了. 這點對偽類尤其有用如 :hover 和 :focus 例如:

.bordered { &.float { float: left;} .top { margin: 5px;}}

會輸出

.bordered.float { float: left; }.bordered .top { margin: 5px;}

運算

任何數字、顏色或者變量都可以參與運算. 來看一組例子:

@base: 5%;@filler: @base * 2;@other: @base + @filler;color: #888 / 4;background-color: @base-color + #111;height: 100% / 2 + @filler;

LESS 的運算已經超出了我們的期望,它能夠分辨出顏色和單位。如果像下面這樣單位運算的話:

@var: 1px + 5;

LESS 會輸出 6px 括號也同樣允許使用:

width: (@var + 5) * 2;

并且可以在復合屬性中進行運算:

border: (@width * 2) solid black

命名空間

有時候,你可能為了更好組織CSS或者單純是為了更好的封裝,將一些變量或者混合模塊打包起來, 你可以像下面這 樣在 #bundle 中定義一些屬性集之后可以重復使用:

#bundle { .button () { display: block; border: 1px solid black; background-color: grey; &:hover { background-color: white }} .tab { ... } .citation { ... }}

你只需要在 #header a 中像這樣引入 .button :

#header a {   color: orange;   #bundle > .button;  }

字符串插值

變量可以用類似ruby和php的方式嵌入到字符串中,像 @{name} 這樣的結構:

@base-url: "http://assets.fnord.com";background-image: url("@{base-url}/images/bg.png");

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线视频日韩精品| 日韩亚洲精品视频| 久久青草精品视频免费观看| 久久精品99久久久香蕉| 国产一区深夜福利| 欧美视频中文字幕在线| 日韩av日韩在线观看| 国产不卡av在线免费观看| 中文字幕国产精品| 国产高清视频一区三区| 国产91精品不卡视频| 97免费视频在线| 高跟丝袜欧美一区| 96精品久久久久中文字幕| 亚洲最大的成人网| 亚洲第一区第一页| 欧美性猛交xxxx久久久| 久久天天躁夜夜躁狠狠躁2022| 亚洲欧美精品一区| 久久99亚洲热视| 国产丝袜一区二区三区免费视频| 欧美最猛黑人xxxx黑人猛叫黄| 性欧美在线看片a免费观看| 国产免费久久av| 国产精品久久久久久久久久ktv| 国产视频精品免费播放| 国产综合在线视频| 欧美日韩美女在线| 亚洲白虎美女被爆操| 亚洲国产天堂久久综合| 国产精品日韩一区| 欧美香蕉大胸在线视频观看| 国产精品视频xxxx| 亚洲成人教育av| 日韩在线免费视频观看| 久久久国产一区二区| 久久久国产精品免费| 久久久免费在线观看| 亚洲自拍偷拍在线| 成人中心免费视频| 亚洲综合中文字幕在线观看| 91欧美激情另类亚洲| 亚洲欧美中文日韩在线v日本| 亚洲片国产一区一级在线观看| 亚洲www在线观看| 欧美成人精品激情在线观看| 欧美日韩亚洲精品一区二区三区| 久久青草福利网站| 国产精品成人免费电影| 国产日韩欧美日韩| 国产91精品黑色丝袜高跟鞋| 欧美乱妇40p| 亚洲成人999| 大胆欧美人体视频| 久久精品视频99| 欧美日韩在线第一页| 日日噜噜噜夜夜爽亚洲精品| 国内精品国产三级国产在线专| 国产a∨精品一区二区三区不卡| 91网站在线看| 欧美激情精品久久久久久蜜臀| 久久综合国产精品台湾中文娱乐网| 午夜精品视频网站| 另类色图亚洲色图| 国产精品视频永久免费播放| 免费97视频在线精品国自产拍| 日韩高清电影免费观看完整版| 亚洲香蕉成人av网站在线观看| 91九色视频导航| 欧美日韩久久久久| 精品一区二区三区电影| 久久精品久久久久| 亚洲精品美女网站| 成人网在线免费观看| 欧美性猛交丰臀xxxxx网站| 日韩国产欧美精品一区二区三区| 国产欧美日韩免费| 亚洲一区二区国产| 国产精品久久久久福利| 国产精品久久久久免费a∨| 日韩av在线不卡| 欧美激情视频在线免费观看 欧美视频免费一| 日韩欧美亚洲范冰冰与中字| 韩国v欧美v日本v亚洲| 久久精品这里热有精品| 91免费福利视频| 91在线观看欧美日韩| 日韩美女免费视频| 国产精品电影在线观看| 狠狠躁18三区二区一区| 久久久久久久久国产| 色中色综合影院手机版在线观看| 日韩在线中文视频| 人九九综合九九宗合| www.午夜精品| 精品无码久久久久久国产| 91精品视频在线免费观看| 日韩国产在线看| 97人人做人人爱| 日韩精品极品视频| 欧洲成人性视频| 欧美巨猛xxxx猛交黑人97人| 国产精品劲爆视频| 亚洲第一页自拍| 色系列之999| 日韩一级黄色av| 精品五月天久久| 亚洲第一网中文字幕| 久久综合伊人77777尤物| 91精品久久久久久久久久久久久| 国产精品激情av在线播放| 国产精品视频免费观看www| 欧美成人午夜激情在线| 欧美午夜精品久久久久久人妖| 日韩在线一区二区三区免费视频| 欧洲亚洲免费在线| 欧美精品久久久久| 欧美国产在线电影| 色爱av美腿丝袜综合粉嫩av| 欧美大片免费观看| 欧美亚洲国产日本| 伦伦影院午夜日韩欧美限制| 国产欧美精品日韩| 国产精品免费久久久久久| 久久综合免费视频| 欧美日韩中国免费专区在线看| 日韩av在线直播| 色www亚洲国产张柏芝| 国产91精品网站| 亚洲加勒比久久88色综合| 91精品国产自产在线观看永久| 亚洲精品综合久久中文字幕| 欧美日韩中文字幕在线视频| 亚洲精品一区二区网址| 国产精品亚洲片夜色在线| 91精品视频网站| 日韩av第一页| 精品久久香蕉国产线看观看gif| 亚洲一级片在线看| 亚洲xxxxx电影| 国产精品久久久久久久9999| 久久久精品国产网站| 欧美黑人国产人伦爽爽爽| 亚洲人精选亚洲人成在线| 91久久综合亚洲鲁鲁五月天| 国产欧美va欧美va香蕉在线| 精品视频中文字幕| 午夜精品视频在线| 91在线观看免费观看| 成人欧美一区二区三区黑人| 国产精品99久久久久久久久| 国产综合香蕉五月婷在线| 亚洲人成电影在线播放| 色综合久综合久久综合久鬼88| 国产一区二区三区在线视频| 亚洲va欧美va国产综合久久| 亚洲第一中文字幕| 最近2019免费中文字幕视频三| 国产精品电影网站| 国产精品久久久久久亚洲影视| 中国china体内裑精亚洲片| 在线播放精品一区二区三区| 国产欧美精品日韩精品| 中文字幕欧美精品在线|