css预处理器
作用:
- 嵌套: 反应层级和约束
- 变量和计算 减少重复代码
- extend 和mixin代码片段
- 循环 适用于复杂有规律的样式
- import CSS 文件模块化
嵌套------------------无差异
less------- 后缀.less
.wrapper{
background:white;
.nav{
font-size:12px;
}
.content{
font-size:14px;
&.hover{
background:red;
}
}
}
sass嵌套------- 后缀.scss
.wrapper{
background:white;
.nav{
font-size:12px;
}
.content{
font-size:14px;
&.hover{
background:red;
}
}
}变量------------------差异less用@-----sass用$
less
@bgColor:green;
@fontSize:16px
.wrapper{
background:lighten(@bgColor,40%);
.nav{
font-size:@fontSize;
}
.content{
font-size:@fontSize + 2px;
&.hover{
background:red;
}
}
}sass
$bgColor:green;
$fontSize:16px
.wrapper{
background:lighten($bgColor,40%);
.nav{
font-size:$fontSize;
}
.content{
font-size:$fontSize + 2px;
&.hover{
background:red;
}
}
}mixin------------样式表中对样式复用
less
@bgColor:green;
@fontSize:16px
.block(@fontSize){
font-size:@fontSize;
border: 1px solid #ccc;
border-radius:4px;
}
.wrapper{
background:lighten(@bgColor,40%);
.nav{
.block(@fontSize); //复用
}
.content{
.block(@fontSize + 2px); //复用
&.hover{
background:red;
}
}
}sass
$bgColor:green;
$fontSize:16px
@mixin block($fontSize){ //区别:加@mixin,无 .
font-size:$fontSize;
border: 1px solid #ccc;
border-radius:4px;
}
.wrapper{
background:lighten($bgColor,40%);
.nav{
@include block(@fontSize); //区别:加@include
}
.content{
@include block($fontSize + 2px); //区别:加@include
&.hover{
@include background:red;
}
}
}extend
less
@bgColor:green;
@fontSize:16px
.block{
font-size:@fontSize;
border: 1px solid #ccc;
border-radius:4px;
}
body{
padding:0;
margin:0;
}
.wrapper{
background:lighten(@bgColor,40%);
.nav:extend(.block){ //复用
}
.content:extend(.block){ //复用
//&:extend(.block)
&:hover{
background:red;
}
}
}sass
$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; //区别@extend
color: #333;
}
.content{
@extend .block;
&:hover{
background:red;
}
}
}loop
less
.gen-col(@n) when (@n > 0){
.gen-col(@n - 1);
.col-@{n}{
width: 1000px/12*@n;
}
}
.gen-col(12); sass
// @mixin gen-col($n){
// @if $n > 0 {
// @include gen-col($n - 1);
// .col-#{$n}{
// width: 1000px/12*$n;
// }
// }
// }
// @include gen-col(12);
@for $i from 1 through 12 { //sass支持循环
.col-#{$i} {
width: 1000px/12*$i;
}
} import 模块化
less
@import "./6-import-variable";
@import "./6-import-module1";
@import "./6-import-module2";sass
@import "./6-import-variable";
@import "./6-import-module1";
@import "./6-import-module2";
css预处理框架
- SASS-Compass
- Less-Lesshat/EST
- 提供现成的mixin
- 类似JS类库 封装常用功能
--------------------------------------------------------------------------
all in all
有学习成本,会用一个熟练的就行,我用stylus <_<
---------------------------------------------------------------------------
css
overflow-wrap:normal;
word-break:normal; //中日韩 ||keep-all
white-space:no-wrap; //不换行font-weight:粗细 bold|normal|lighter
text-decoration:下划线
cursor:指针 point
权重
- !important 这货权重最高
- 内联样式 优先级高
- 雪碧图:位置来定位显示
base64:图片变成文本的一种方式,内嵌中css中
- 体积会变大
- 请求变少
伪类伪元素
- 伪类表状态 // :hover
- 伪元素真的有元素 // ::after
checkbox 优化
.checkbox input+label{
background:url(../123.png) left center no-repeat;
}
<input type="checkbox" id="handsome">
<label for="handsome" >写点啥显示出来</label>
布局
table
float+margin
inline-block
flexboxdisplay:
- inline
- inline-block
- block
position
- static
- relative
- absolute 脱离文档流,必须写明高度
- faixed
float
脱离文档流,但不脱离文字流(不遮文字,图文混排)float:left/right/bottom/top
形成BFC“块”。
- 对兄弟元素影响。上面贴非float元素、旁边贴float元素,
- 对父级元素的影响。高度塌陷
- 兼容性好,使用地方多
处理方法:父级尾元素处理
.container2::after{
content:''
clear:both; //保证这个元素的左右两边都是干净的
display:block;
height:0px;
visiblity:false;
}
常用操作:左右都float先布局好,后设置margin布局右面
flexbox弹性盒子
display:flex
flex:1//平分,自适应
width:50px//固定
flex:none
inline-block
display:inline-block
需要处理间隙问题 ,父类font-size=0做处理。
响应式布局
设计:隐藏+折行+自适应空间
rem/viewport/media query
- rem:根据html字体大小,来确定元素大小
- viewport:手工确定要放的多大
- media query:根据设备大小的处理
<meta name="viewport" content="width=device-width" initial-scale=1.0">
//标注:可视区大小等于屏幕大小,适配移动端step 1
//width值可设置,做等比例缩放
@media (max-width:640px){
.left{
display:none;
}
}
....
@media (max-width:640px){
.intro{
margin:7px auto; //发现是移动端设备的时候,做居中处理
display:block;
}
}rem方法-----换算不精准
html{
font-size:20px
}
@media (max-width:375px){//大屏放上面
html{
font-size:24px
}
}
@media (max-width:320px){
html{
font-size:20px
}
}...
.intro{
...
width:9rem; //...其他值用rem取代
}CSS效果
box-shadow //不占空间的边框
text-shadow
border-radius
clip-path:circle() //做容器内的动画,不改容器大小
//用矢量工具将图导成svg,svg就把图能抠出来
transform:translateX(...) scale()
transform-style:preserve-3d; perspective:500px;
CSS动画
补间动画 transition: width 1s
transition-delay:1s
关键帧动画:
animation: run 1s
@keyframes run{
0%{
width:100px
}
20%{
width:500px
}
100%{
width:800px
}
}
time-function:step(1)
PostCss
css ----> PostCss处理 -----> css
const atImport = require('postcss-import')
const cssnext= require('postcss-cssnext')
const cssnano= require('postcss-cssnano')
module.exports={
plugins:[
atImport,
cssnext, //实现较先进的属性
autoprefixed({
browsers:['>1%']
//browsers:['Firefox > 30']
}),
cssnano //css压缩
]
}
PostCss需要配合构建工具
webpack postcss-loader
Gulp gulp-postcss
Grunt grunt-postcss
Rollup rollup-postcsnpm i css-loader style-loader
css权重
css代码存放位置:内嵌样式>内部样式表>外联样式表.
样式选择器: !important >内嵌样式 > ID >类 > 标签 > 伪类