CSS預處理器
1.基於CSS的另一種語言
2.通過工具編譯成CSS
3.添加了很多CSS不具備的特性
4.能提升CSS文件的組織
提供功能:1.嵌套 反映層級和約束 2.變量和計算,減少重復戴拿 3.Extend 和 Mixin 代碼片段
4.循環 適用於復雜有規律的樣式 5.import CSS 文件模塊化
知識點:
1.less(嵌套)
body{
padding:0;
margin:0;
}
.wrapper{
background:white;
.nav{
font-size: 12px;
}
.content{
font-size: 14px;
&:hover{
background:red;
}
}
}
2.sass 嵌套
body {
padding: 0;
margin: 0;
}
.wrapper {
background: white;
}
.wrapper .nav {
font-size: 12px;
}
.wrapper .content {
font-size: 14px;
}
.wrapper .content:hover {
background: red;
}
3.less 變量
@fontSize: 12px;
@bgColor: red;
body{
padding:0;
margin:0;
}
.wrapper{
background:lighten(@bgColor, 40%);
.nav{
font-size: @fontSize;
}
.content{
font-size: @fontSize + 2px;
&:hover{
background:@bgColor;
}
}
}
需要改動變量時,只需改動變量的值然后編譯成 css 文件即可,一次定義,多次使用,方便維護
4.sass 變量
$fontSize: 12px;
$bgColor: red;
body{
padding:0;
margin:0;
}
.wrapper{
background:lighten($bgColor, 40%);
.nav{
font-size: $fontSize;
}
.content{
font-size: $fontSize + 2px;
&:hover{
background:red;
}
}
}
sass 和 css 不兼容,盡量避免混淆,@在css 中是有意義的,故使用 $.
5.less mixin
有一段代碼想公共使用(復用)的情況下:
@fontSize: 12px;
@bgColor: red;
.box{
color:green;
}
.box1{
.box();
line-height: 2em;
}
.box2{
.box();
line-height: 3em;
}
.block(@fontSize){
font-size: @fontSize;
border: 1px solid #ccc;
border-radius: 4px;
}
body{
padding:0;
margin:0;
}
.wrapper{
background:lighten(@bgColor, 40%);
.nav{
.block(@fontSize);
}
.content{
.block(@fontSize + 2px);
&:hover{
background:red;
}
}
}
編譯成css
.box {
color: green;
}
.box1 {
color: green;
line-height: 2em;
}
.box2 {
color: green;
line-height: 3em;
}
body {
padding: 0;
margin: 0;
}
.wrapper {
background: #ffcccc;
}
.wrapper .nav {
font-size: 12px;
border: 1px solid #ccc;
border-radius: 4px;
}
.wrapper .content {
font-size: 14px;
border: 1px solid #ccc;
border-radius: 4px;
}
.wrapper .content:hover {
background: red;
}
6. sass mixin
$fontSize: 12px;
$bgColor: red;
@mixin block($fontSize){
font-size: $fontSize;
border: 1px solid #ccc;
border-radius: 4px;
}
body{
padding:0;
margin:0;
}
.wrapper{
background:lighten($bgColor, 40%);
.nav{
@include block($fontSize);
}
.content{
@include block($fontSize + 2px);
&:hover{
background:red;
}
}
}
與 less 不同點:1. less 需要 @mixin 2.參數名稱不一樣 3.不需要class,直接指定其名字
編譯成 css
body {
padding: 0;
margin: 0;
}
.wrapper {
background: #ffcccc;
}
.wrapper .nav {
font-size: 12px;
border: 1px solid #ccc;
border-radius: 4px;
}
.wrapper .content {
font-size: 14px;
border: 1px solid #ccc;
border-radius: 4px;
}
.wrapper .content:hover {
background: red;
}
7.less extend
解決重復代碼問題,減少 css 體積
@fontSize: 12px;
@bgColor: red;
.block{
font-size: @fontSize;
border: 1px solid #ccc;
border-radius: 4px;
}
body{
padding:0;
margin:0;
}
.wrapper{
background:lighten(@bgColor, 40%);
.nav:extend(.block){
color: #333;
}
.content{
&:extend(.block);
&:hover{
background:red;
}
}
}
mixin 是把代碼直接復制過來,extend 是把選擇器提取出來,把公共樣式寫到一起
編譯成 css
.block,
.wrapper .nav,
.wrapper .content {
font-size: 12px;
border: 1px solid #ccc;
border-radius: 4px;
}
body {
padding: 0;
margin: 0;
}
.wrapper {
background: #ffcccc;
}
.wrapper .nav {
color: #333;
}
.wrapper .content:hover {
background: red;
}
8. sass extend
$fontSize: 12px;
$bgColor: red;
.block{
font-size: $fontSize;
border: 1px solid #ccc;
border-radius: 4px;
}
body{
padding:0;
margin:0;
}
.wrapper{
background:lighten($bgColor, 40%);
.nav{
@extend .block;
color: #333;
}
.content{
@extend .block;
&:hover{
background:red;
}
}
}
編譯成 css
.block, .wrapper .nav, .wrapper .content {
font-size: 12px;
border: 1px solid #ccc;
border-radius: 4px;
}
body {
padding: 0;
margin: 0;
}
.wrapper {
background: #ffcccc;
}
.wrapper .nav {
color: #333;
}
.wrapper .content:hover {
background: red;
}
sass 中 div 沒有換行,其余再無區別,在樣式表中就可以完全完成樣式變更的操作,更加集中地維護代碼
9.less loop (循環)
高度有規律的情況(網格) 采用遞歸,出口就是 n <= 0 時,跳出循環
.gen-col(@n) when (@n > 0){
.gen-col(@n - 1);
.col-@{n}{
width: 1000px/12*@n;
}
}
.gen-col(12);
編譯成 css
.col-12 {
width: 1000px;
}
.col-11 {
width: 916.66666667px;
}
.col-10 {
width: 833.33333333px;
}
.col-9 {
width: 750px;
}
.col-8 {
width: 666.66666667px;
}
.col-7 {
width: 583.33333333px;
}
.col-6 {
width: 500px;
}
.col-5 {
width: 416.66666667px;
}
.col-4 {
width: 333.33333333px;
}
.col-3 {
width: 250px;
}
.col-2 {
width: 166.66666667px;
}
.col-1 {
width: 83.33333333px;
}
10. sass loop
@mixin gen-col($n){
@if $n > 0 {
@include gen-col($n - 1);
.col-#{$n}{
width: 1000px/12*$n;
}
}
}
@include gen-col(12);
這是類比上面 less 的寫法,但 sass 還有更簡便的寫法,因為 sass 支持 for,故
@for $i from 1 through 12 {
.col-#{$i} {
width: 1000px/12*$i;
}
}
編譯成 css
.col-1 {
width: 83.33333px;
}
.col-2 {
width: 166.66667px;
}
.col-3 {
width: 250px;
}
.col-4 {
width: 333.33333px;
}
.col-5 {
width: 416.66667px;
}
.col-6 {
width: 500px;
}
.col-7 {
width: 583.33333px;
}
.col-8 {
width: 666.66667px;
}
.col-9 {
width: 750px;
}
.col-10 {
width: 833.33333px;
}
.col-11 {
width: 916.66667px;
}
.col-12 {
width: 1000px;
}
11. less import
解決 css 模塊化 問題
6-import-variable
@themeColor: blue; @fontSize: 14px;
6-import-module1
.module1{
.box{
font-size:@fontSize + 2px;
color:@themeColor;
}
.tips{
font-size:@fontSize;
color:lighten(@themeColor, 40%);
}
}
6-import-module2
.module2{
.box{
font-size:@fontSize + 4px;
color:@themeColor;
}
.tips{
font-size:@fontSize + 2px;
color:lighten(@themeColor, 20%);
}
}
less import(可以跨文件使用)
@import "./6-import-variable"; @import "./6-import-module1"; @import "./6-import-module2";
編譯成 css
.module1 .box {
font-size: 16px;
color: blue;
}
.module1 .tips {
font-size: 14px;
color: #ccccff;
}
.module2 .box {
font-size: 18px;
color: blue;
}
.module2 .tips {
font-size: 16px;
color: #6666ff;
}
12.sass import
6-import-variable
$themeColor: blue; $fontSize: 14px;
6-import-module1
.module1{
.box{
font-size:$fontSize + 2px;
color:$themeColor;
}
.tips{
font-size:$fontSize;
color:lighten($themeColor, 40%);
}
}
6-import-module2
.module2{
.box{
font-size:$fontSize + 4px;
color:$themeColor;
}
.tips{
font-size:$fontSize + 2px;
color:lighten($themeColor, 20%);
}
}
sass import(可以跨文件使用)
@import "./6-import-variable"; @import "./6-import-module1"; @import "./6-import-module2";
編譯成 css
.module1 .box {
font-size: 16px;
color: blue;
}
.module1 .tips {
font-size: 14px;
color: #ccccff;
}
.module2 .box {
font-size: 18px;
color: blue;
}
.module2 .tips {
font-size: 16px;
color: #6666ff;
}
