前 言css
JReduweb
LESS 是一門 CSS 預處理語言,它擴展了 CSS 語言,增長了變量、Mixin、函數等特性,使 CSS 更易維護和擴展。less
LESS 爲 Web 開發者帶來了福音,它在 CSS 的語法基礎之上,引入了變量,Mixin(混入),運算以及函數等功能,大大簡化了 CSS 的編寫,而且下降了 CSS 的維護成本,就像它的名稱所說的那樣,LESS 可讓咱們用更少的代碼作更多的事情。Sass 是一款強化 CSS 的輔助工具,它在 CSS 語法的基礎上增長了變量 (variables)、嵌套 (nested rules)、混合 (mixins)、導入 (inline imports) 等高級功能,這些拓展令 CSS 更增強大與優雅。使用 Sass 以及 Sass 的樣式庫(如 Compass)有助於更好地組織管理樣式文件,以及更高效地開發項目。函數
1 LESS預編譯語言 |
一、聲明變量:@變量名:變量值;
使用變量:@變量名
>>>變量使用的原則:
屢次頻繁出現的值,後期須要統一修改的值,或者牽扯到數值運算的值,推薦使用變量
>>>LESS中的變量類型
在CSS中出現的屬性值,在less中均可以用做變量名
① 數值類:不帶單位的 123 帶單位的 1px
② 字符串類型:帶引號的"hahah" 不帶引號的 red #ff000
③ 顏色類:red #ff000 rgb(255,255,0)
④ 值列表類型:多個值用逗號或空格分隔 10px solid red工具
@color:#ff0000;
@length:100px;
#div1{
width: @length;
height: @length*2;
background-color: @color;
}
二、混合(Mixins)spa
①、無參混合
聲明 .class{}
調用:在選擇器中使用.class 直接調用
code
//無參混合
.borderRadius{
border-radius: 10px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
}
//調用
.class{
width: 10px;
height: 10px;
.borderRadius();
}blog
② 有參無默認值混合
聲明.class(@param)
調用:.class(paramValue)//有參無默認值混合繼承
//有參無默認值混合
.borderRadius1(@radius){ border-radius: @radius; -webkit-border-radius: @radius; -moz-border-radius: @radius; }
//調用
.class{
width: 10px;
height: 10px;
.borderRadius1(20px);
}事件
③ 有參有默認值混合
聲明:.class(@param:10px)
調用:.class(paramValue) 或 .class()
//有參有默認值混合
.borderRadius2(@radius:10px){
border-radius: @radius;
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
}
.class{
width: 10px;
height: 10px;
.borderRadius2();
}
>>>若是聲明時沒有給參數賦默認值,則調用時必須賦值,不然報錯
>>>無參混合實際上就是一個普通的class選擇器,會被編譯到css文件中,
而有參混合在編譯時,不會出如今css文件中
三、less中的匹配模式:相似於switch 結構
① 聲明: @pipei(條件一,參數) {} @pipei(條件二,參數) {} @pipei(@_,參數) {}
② 調用:@pipei(條件的值,參數的值){}
③ 匹配規則:
根據調用時輸入的條件值,去尋找與之匹配的混合執行,
@_無論匹配成功與否,都會執行的選項。
.pipei(lefts,@width:10px){
margin-left: @width;
}
.pipei(rights,@width:10px){
margin-right: @width;
}
.pipei(tops,@width:10px){
margin-top: @width;
}
.pipei(bottoms,@width:10px){
margin-bottom: @width;
}
.pipei(@_,@width:10px){
padding: 10px;
}
//@_無論匹配成功與否,都會執行的選項。
@position:leftss;
.class1{
.pipei(@position,20px);
}
四、arguments特殊變量
在混合中,@arguments表示混合傳入的全部參數.@arguments中的全部參數之間,用空格分隔。
.argu(@width,@style,@color){
border: @arguments;--> border: @width @style @color;
}
.argu(@width,@style,@color){
//border: @width @style @color;
border: @arguments;
}
.class2{
.argu(10px,solid,red);
}
五、less中加減乘除運算:
less中的全部變量和數值,能夠進行加減乘除運算
須要注意的是,當顏色值運算時,紅綠藍分三組運算,組內單獨計算,組間互不干涉。
六、less中的嵌套
less容許CSS選擇器按照HTML代碼的結構進行嵌套
section{
>p{}
ul{
&:hover
}
}
① less中的嵌套默認是後代選擇器,若是須要子代選擇器,須要在前面加>
② &符號,表示這個&所在的上一層選擇器,好比上述&表示section ul:hover
1.2 SCSS預編譯語言 |
/註釋一:編譯時不會被編譯到CSS文件中
/*
* 註釋二:在非compressed模式下,會被編譯到CSS文件中。
*
*/
/*!
* 註釋三:重要註釋,在各類壓縮模式下,都會被編譯到CSS文件中。
*/
!scss基礎語法
一、scss中的變量
① 聲明變量 $變量名:變量值;
scss 中容許將變量嵌套在字符串中,可是變量必須使用井{}包裹
eg:border-井{$left}:10px solid red;
$width:100px;
$position:left;
#div1{
width: $width;
height: $width;
background-color: red;
border-#{$position}:10px solid green ;
}
二、scss中的運算:會將單位進行運算。使用時需注意最終的單位是否正確。
eg:10px*10px=100 px*px
三、scss中的嵌套:選擇器嵌套 屬性嵌套 僞類嵌套
① 選擇器嵌套 ul{li{}}
嵌套默認表示後代選擇器,若是須要子代選擇器,能夠在選擇器前加>
能夠在選擇器的{}中,使用&表示上一層的選擇器
② 僞類嵌套 :li{&:hover{}}
在選擇器的{}中,使用&配合僞類事件,能夠表示當前選擇器的僞類
③ 屬性嵌套 font:{size:18px;} -->font-size:18px
對於屬性名有-分隔爲多段的屬性,可使用屬性嵌套,屬性名的前半部分必須緊跟一個:,才能使用{}包裹屬性的後半部分。
section{
background-color: #CCCCCC;
p{
color: red;
}
ul{
padding: 0px;
li{
list-style: none;
font:{
size: 16px;
weight:bold;
family:"微軟雅黑";
style:"italic";
}
//& =="section ul li"
}
}
}
對應的CSS文件:
section {
background-color: #CCCCCC;
}
section p {
color: red;
}
section ul {
padding: 0px;
}
section ul li {
list-style: none;
font-size: 16px;
font-weight: bold;
font-family: "微軟雅黑";
font-style: "italic";
}
四、 混合宏 繼承 佔位符
① 混合宏 使用@mixin聲明混合宏,在其餘選擇器中使用@include調用混合宏
eg: @mixin hunhe($param:value){} .class{ @include hunhe(value); }
@mixin hunhe{$param:value} .class{@include hunhe();}
>>>聲明時,能夠有參數,也能夠沒有參數。參數能夠有默認值,也能夠沒有默認值。
可是調用時,必須符合聲明時的要求。與less中 的混合相同
>>>優勢:① 能夠傳參 ② 不會產生同名的class
>>>缺點:調用時,會把混合宏中的全部代碼copy到選擇器中,產生大量冗餘代碼
//混合宏
@mixin hunhe($color:red){
color: $color;
}
.class3{
@include hunhe;
background-color: yellow;
}
.class4{
@include hunhe;
background-color: blue;
}
② 繼承:聲明一個普通的class,在其餘選擇器中使用@extend 繼承這個class
.class1{} .class2{@extend .class1;}
>>>優勢:將相同的代碼,提取到並集選擇器,減小冗餘代碼
>>>缺點:①不能傳參;②會生出一個多餘的class
//繼承
.class1{
color: red;
}
.class{
@extend .class1;
background-color: yellow;
}
③佔位符:使用%聲明佔位符,在其餘選擇器中使用@extend繼承佔位符;
%class{} .class1{@extend %class;}
>>>優勢:①將相同代碼,提取到並集選擇器,減小冗餘代碼 ② 不會產生同名的class
>>>缺點:不能傳參
%class1{
color: red;
}
.class4{
@extend %class1;
background-color: yellow;
}
五、if條件結構
條件結構須要寫在選擇器裏面,條件結構的{}直接包裹樣式屬性。
@if 條件{
@else{}
}
//scss中的條件語句
.class6{
width: 100px;
height: 100px;
@if 1>2 {
background-color: yellow;
}
@else{
background-color: green;
}
}
六、for循環
@for $i from 1 to 10{} 不包含10
@for $i from 1 through 10{} 包含10
@for $i from 1 to 10{
.border-#{$i}{
border: #{$i}px solid red;
}
}
七、while循環
$i:0;
@while $i<10{
$i:$i+1;
}
$i:0; @while $i<10{ .while-#{$i}{ border: #{$i}px solid red; } $i:$i + 1; }
八、 each 循環遍歷
@each $item in a,b,c,d{
//$item 表示 a,b,c,d中的每一項
}
//each 循環遍歷
@each $item in c1,c2,c3,c4{
$i:$i+1;
.#{$item}{
border: #{$i}px solid red;
}
}