| 选择器
| 文字样式: text-shadow、word-break、word-wrap、font-face、wrod-spacing、letter-spacing、text-overflow
| 盒模型: calc计算属性值、box-sizing元素的宽高是否包括padding、border的值、box-shadow、box-reflect、resize
| 布局: dispay:flex布局、dispay:box 弹性盒模型
| 分栏布局: column-width、column-count、column-gap、column-rule
| 背景: background-clip、background-size
| 变形: transform: scale、skew、translate、rotate、matrix,transform-origin
| 动画: transition: transition-property、transition-duration、transition-timing-function、transition-delay,animation
选择器
一、基本选择器
1、 * 通配符: 用于html的所有结点 -> * { width:200px; }
2、 元素选择器: 页面的元素 -> li { border:1px #fff solid; }
3、 类选择器: 所有指定的类别 -> .cla { width:200px; height:30px; }
4、 id选择器: #k0 { background-color:#000; }
5、 m n{} 后代选择器: .nav li { width:200px; } // .nav下的所有li元素
6、 m > n 子选择器: ie6不支持 -> .nav > li { width:200px; } // 只匹配.nav下的子li元素,孙li不匹配
7、 m + n 相邻选择器: ie6不支持 -> .nav + div { background-color:#ccc; } // 匹配.nav相邻的div元素
8、 m ~ n 兄弟选择器: ie6不支持 -> .nav ~ li { background-color:#ccc; } // 与.nav所有的同辈元素
9、 m, m, m 群组选择器: .nav1, .nav2, .nav3 { width: 2000px; } // 群组选择器将每个选择器用","号分开
二、属性选择器
1、[attr]: 指定属性名
2、[attr==val]: 指定属性等于匹配
3、[attr*=val]: 匹配属性具有attr并且包含val指定值
4、[attr^=val]: 匹配指定属性的值,以val开头
5、[attr$=val]: 匹配指定属性的值,以val结尾 如果id="abc-1",匹配[attr $= \-1]使用转义\
三、元素
1、:first-line: 为某个元素第一行文字的使用样式
2、:first-letter: 用于首字母
3、:before: 用于在某个元素之前插入一些内容,如: 元素:before { content: "插入的文字" };
4、:after: 用于在某个元素之后插入一些内容,如: 元素:after{ content: "插入的文字" };
5、:root: 选择器将样式绑定到页面的根元素中,根元素是指位于文档树中最顶层结构的元素.
6、:not: 对某个结构元素使用样式,但排除这个结构元素下面子结构元素,让它不使用这个样式可以使用not。
7、:empty: 指定元素为空白时使用的样式
8、:target:
9、:first-child: 指定元素中第一个子元素
10、:last-child: 指定元素中的最后一个子元素
11、:nth-child(3): 指定元素中的第3个元素. li:nth-child(3) { background: yello; } 可以指定even奇数、odd偶数
12、:nth-last-child(3): 指定元素中从后数第3个元素
13、:nth-of-type: 找标签下指定的第几个子元素,例: .box p:nth-of-type(2): 找出个box下的第二个p元素
14、:nth-last-of-type(): 从后找
15、:only-child: 父元素中只有一个子元素.
*** nth-child与nth-of-type的区别 ***
nth-child 从子元素的第一个开始无论不会指定元素
nth-of-type 所有子元素的序列,而不是指定某一元素下查找
<style>
body { margin: 0; }
.box li:nth-child(2) { background-color: #ccc; } // 影响 <li>bbb</li>
.box li:nth-of-type(2) { background-color: #ccc; } // 只对子元素li的第2个 影响 <li>ccc</li>
</style>
<div class="box">
<ul>
<p>aaa</p>
<li>bbb</li>
<li>ccc</li>
<li>ddd</li>
</ul>
</div>
四、伪类选择器
什么是伪类选择器: 使用类选择器把相同元素定义成不同样式,如
p.right { text-align: right; }
p.left {text-align: lef; }
1、E:hover: 当鼠标指针移动到元素上所使用样式
2、E:active: 用来指定元素被激活(鼠标在元素上按下还没有松开)时使用样式
3、E:focus: 元素获得光标时使用
4、E:enabled: 元素可用时状态使用
5、E:disabled: 元素不可用状态时样式
6、E:read-only: 元素只处于只读状态下时使用
7、E:read-write: 元素处于非只读状态时使用
8、E:checked: 指定单选或多选
9、E:default: 用来指定当页面打开时默认处于选取状态的单选或多选框
10、E:indeterminate: 用来指定页面打开时,一组单选中任何一个单选框都没有设定为选取状态.
11、E::selection: 用来指定当元素处于选中状态时的样式
12、E:target: 显示的两条
13、~: 兄弟元素选择器
伪类与伪元素
伪类 - 用于已有元素处于某个状态,为其添加对应的样式,比如用户悬停 通过 :hover
伪元素 - 用于创建一些不在文档树中的元素,并为其添加样式,如 :before来在一个元素前增加一些文本
一、伪类 用于向某些选择器添加特殊效果
a:link: 未被访问过
a:visited: 已经被访问的链接
a:hover: 鼠标指针移动到的链接
a:active: 被点击的链接
:first-chidle: 向元素的第一个子元素添加样式
二、伪类元素 用于向某些选择器添加特殊效果
::first-letter: 设置第一个字符的样式属性
::first-line: 设置第一行的样式
::before 和 ::after: 用于在元素前和元素后配置content属性添加内容
.box::before { content: '这里是在box元素之前显示'}
.box::after { content: '这里是在box元素之后显示' }
三、css3规则伪类使用一个":", 伪元素使用两个"::"
: 用于css2的伪类,:: 用于css3的伪类
文字样式
一、text-shadow: 文字阴影 text-shadow: 横向 纵向 模糊半径 颜色
多阴影: text-shadow: 10px 10px 2px #ccc, 20px 20px 3px #c3c3c3; 以逗号分割.
二、word-break: 文字自动换行
normal: 使用浏览器的默认行为
keep-all: 只能在半角空格或连接符处换行
break-all: 允许在单词内换行
三、word-wrap: 长单词与URL地址自动换行
normal: 浏览器默认,只有在半角空格或连接符处换行
break-word: 长单词或URL地址内进行换行
四、@font-face: 服务器端字体
@font-face {
font-family: 'iconfont';
src: url('iconfont.eot'); /* IE9 */
src: url('iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('iconfont.woff') format('woff'), /* chrome、firefox */
url('iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
url('iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
}
// 使用字体
.iconfont{ font-family:"iconfont"; font-size:16px;font-style:nrmal; }
五、word-spacing: 设置单词字段间距, 修复 IE6、7 中始终存在的 1px 空隙,减少单词间的空白(即字间隔)
.main{
font-size:0;
*word-spacing:-1px;
}
六、letter-spacing: normal; /* 设置字母、字间距为0 */
七、text-overflow: 溢出的文本末尾加省略标记
clip: 不显示省略号
ellipsis: 文字溢出时显示 ...
ellipsis-word:
盒模型
一、display: 定义盒类型
block: 转成块元素
inline: 转成内联元素
inline-block: 属于block的一种,也具有inline的特点
inline-table:
flex、inline-flex: flex弹性布局
box、inline-box: box弹性盒模型,父元素上加此属性
二、box-sizing: 指定元素的宽与高度的计算方法
1、content-box: border和padding不计算width之内(标准盒模型)
2、border-box: border和padding计算入width之内,元素的宽高 = border + padding + content + width/height
3、padding-box: padding计算入内(怪异盒模型)
好处: 如果我设置两列都为50%,如果之前我加入了边距,加了内边距等,这个百分比计算就不好撑控了,
所以有了box-sizing就可以不用管内边距的值是多少边框值是多少,最后都为50%
-webkit-box-sizing、-moz-box-sizing、box-sizing
三、calc 给属性的值做计算
Android不支持
例: height: calc(100% - 80px);
rule:
使用“+”、“-”、“*” 和 “/”四则运算;
可以使用百分比、px、em、rem等单位;
可以混合使用各种单位进行计算;
表达式中有“+”和“-”时,其前后必须要有空格,如"width: calc(12%+5em)"这种没有空格的写法是错误的;
表达式中有“*”和“/”时,其前后可以没有空格,但建议留有空格。
四、盒相关属性
1、box-shadow: 盒阴影 box-shadow: 横向距离 纵向距离 模糊半径 颜色 inset(内阴影)
2、box-reflect: 倒影
box-reflect: 方向 距离 渐变
方向: above: 倒影在上边 below: 倒影在下边 left: 倒影在左边 right: 倒影在右边
Example: -webkit-box-reflect: below 0 -webkit-linear-gradient(transparent,transparent 50%,rgba(255,255,255,.3));
3、resize: 自由绽放, 可以使用当前元素用鼠标进行宽度的缩放
both: 水平垂直都可以缩放
horizontal: 水平方向可以缩放
vertical: 垂直都可以缩放
注意: 一定要加overflow: auto 才可以缩放
Flex 布局
布局分类: 1、静态 px 2、流式 fluid 3、自适应(弹性布局)flex 4、响应式 responsive
box-sizing是先出来的,flexbox是过渡版,flex最新语法,一个特性是flex没有的,文字可以垂直居中
.box{
display: -webkit-flex; /* Safari/Chrom */
display: flex;
}
任何一个容器都可以设置flex布局 # 父元素设置display: flex; 行内元素设置 display: inline-flex;
display: flex 或 inline-flex; // 注意,设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。
一、父容器上设置的属性:
1、flex-direction: 子元素的排列方向
row 水平方向,起点在左端 | row-reverse 水平方向,起点在右端 | column 垂直方向,起点在上沿 | column-reverse 垂直方向,起点在下沿
2、flex-wrap: 是否换行显示 nowrap 不换行 | wrap 换行第一行在上方 | wrap-reverse 换行,第一行在下方
3、flex-flow: flex-direction属性 和 flex-wrap
4、justify-content: 子元素的对齐方式
flex-start 左对齐 | flex-end 右对齐 | center 居中 | space-between 两端对齐 | space-around 每个项目两侧间隔相等
5、align-items: 主轴对齐方式,指定伸缩项目沿主轴对齐方式 (水平方向)
flex-start 交叉轴的起点对齐。
flex-end 交叉轴的终点对齐。
center 交叉轴的中点对齐。
baseline 项目的第一行文字的基线对齐。
stretch(默认值)如果项目未设置高度或设为auto,将占满整个容器的高度。
6、align-content: 侧轴对齐方式,指定伸缩项目沿着侧轴对齐方式 (垂直方向)
二、栏目的属性
1、order: 栏目排列顺序。数值越小,排列越靠前,默认为0
2、flex-grow: 放大比例,默认为0,即如果存在剩余空间,也不放大。
3、flex-shrink: 项目的缩小比例
4、flex-basis: 项目占据的主轴空间
5、flex: 设置列所在容器的比例
flex: 1,相当于flex: 1 1 auto, 如果想指定一个列的宽度,flex: 0 0 100px;
.boxA { flex:1 } .boxB{ flex: 2 }
6、align-flex: 允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。
7、align-self: 指定多行伸缩容器的对齐,可以单独伸缩子元素,会覆盖align-items
Example:
.row{width:200px;
height: 50px;
/*加上厂商前缀,目前使用方式都有三种写法: 1,旧的2,过度的3,新的*/
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;}
.row div{
width:50px;height:50px;
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
text-align: center;
line-height: 5rem;
background-color: #f69f75;
}
https://github.com/ccforward/cc/issues/60
http://www.alloyteam.com/2015/05/xi-shuo-flexbox-dan-xing-he-zi-bu-ju/
box弹性盒模型
一、display: box 父元素加值
display中加 box 或 inline-box: 使用弹性盒模型时使用
box-orient: 定义盒模型的布局方向 horizontal 水平显示 vertical 垂直显示
box-direction: 元素排列顺序 normal 正序 reverse 倒序
box-ordinal-group: 设置元素的具体位置
.box div:nth-of-type(1){ --webkit-box-ordinal-group: 2 } // 将第一个元素放到第二个位置显示
二、box-flex: 定义盒子的弹性空间
.boxB div { height: 100px; background-color: red; border: 1px #fff solid;}
.boxB div:nth-of-type(1){ -webkit-box-flex: 1; } // 这里可以写固定宽度
.boxB div:nth-of-type(2){ -webkit-box-flex: 2; }
.boxB div:nth-of-type(3){ -webkit-box-flex: 3; }
.boxB div:nth-of-type(4){ -webkit-box-flex: 4; }
.boxB div:nth-of-type(5){ -webkit-box-flex: 5; }
三、box-pack: 对盒子富裕空间管理,让盒子左侧、右侧还是居中显示,相当于float:left right
star: 所有子元素在盒左侧显示,富余空间在右侧
end: 所有子元素在盒右侧显示,富余空间在左侧
center: 所有子元素居中
justify: 富余空间在子元素之间平均分布
四、box-align: 垂直方向对元素的位置进行管理
start: 所有元素居顶
end: 所有元素居底
center: 所有元素居中
分栏布局
给要分栏内容的父级上加入下面属性对文字进行分栏显示
1、column-width: 栏目宽度
2、column-count: 栏目列数
3、column-gap: 栏目距离
4、column-rule: 栏目间隔线
mask蒙版
#box {
width: 100%;
height: 300px;
background: url(../img/eric.jpg) no-repeat;
-webkit-mask-repeat: no-repeat;
}
.mask_img_1 {
-webkit-mask-box-image: url(../img/apple.png) 10 20 30 40 round round;
}
1、mask-box-image: 定义图片遮罩
2、mask-composite: 定义同一个元素上有多个图片遮罩的顺序
3、mask-clip: 定义图片遮罩延伸的位置
4、mask-repeat: 定义遮罩是否重复
5、mask-size: 定义遮罩的大小
渐变
一、linear-gradient: 线性渐变
background: -webkit-linear-gradient(top, #000 0%, #fff 100%); // (起始位置, 开始颜色 占多少比例, 结束颜色 占多少比例)
1、起始位置可以写成 (top left) 从左上开始,也可以写成angle 角度值 45deg, background: -webkit-linear-gradient(45deg, #ccc 50%, #000 50%);
2、(left top, #ccc 50%, #000 50%) - 写成50%百分比两个颜色没有过渡,如果成写100px两个颜色有过渡色
简写: background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #000), color-stop(100%, #fff));
二、radial-gradient: 径向渐变
三、color-stop(透明度, reg): 从一个颜色到另一个颜色的渐变,需要color-stop
http://www.zhangxinxu.com/wordpress/2013/09/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3css3-gradient%E6%96%9C%E5%90%91%E7%BA%BF%E6%80%A7%E6%B8%90%E5%8F%98/
背景和边框
背景:
1、background-clip: 指定背影的范围
border-box 背景图以边框线为开始 padding-box 背景图已padding以开始 content-box 背景以内容为开始 text 文字中嵌背景图,文字外没有背景图
2、background-origin: 绘制背影图像起点
border-box 以边框线为起点 padding-box 以padding为起点 content-box 以内容区为起点
3、background-size: 指定背影图像的尺寸
auto: 背景图真实的大小
cover:背景图像缩放,保留图像原有的比例/长宽比,不管背景图像大于还是小于背景区域,都会覆盖背景区域,图像的宽度或高度等于或超过背景区域,再次,根据背景图像的比例是否匹配的背景区域,背景图像的某些部分可能不在背景区域内。
contain:背景图像缩放,同时保留图像原有的比例/长宽比,无论是图像的宽度或高度超过背景区域,以尽可能大的覆盖背景区域。因此,根据背景图像的比例是否匹配背景区域,可能会有一些背景图像覆盖不到背景地区。
指定值: background-size: 100px 200px; or background-size: 50% 80%;
4、background-break: 指定内联元素的背景平时循环方式
边框:
1、border-radius[ˈreɪdiəs]: 圆角的半径
2、border-image: 图像边框
transform 2D
一、transform分类:
1、缩放: scale(0.5) 0-1之间 transform: scale(0.5)
2、倾斜: skew实现文字或图像的倾斜 transform: skew(30deg, 30deg)
3、移动: translate移动元素 transform: translate(50px, 50px;)
4、旋转: rotate[ˈroʊteɪt]旋转元素 transform: rotate(45deg)
5、矩阵: matrix
二、旋转基准点:
transform-origin: left top; 以左上为基础点
transform 3D
一、transform-style: 指定3D空间呈现,主要有两个属性值: flat 和 preserve-3d。
1、flat: 值为默认值,表示所有子元素在2D平面呈现
2、preserve-3d: 表示所有子元素在3D空间中呈现
2)perspective: 景深
3)perspective-origin: 景深基点
4)backface-visibility: 隐藏背面
5)Transform中的3D:
二、perspective [pəˈspektɪv]: 200; 景深的远近,数越小景深越明显
三、perspective-origin: 50% 50%; 景深基点, 中间
四、backface-visibility: hidden 隐藏背面
五、3D元素
1、translateX、translateY、translateZ
2、rotateX、rotateY、rotateZ
transform: translate3d(x, y, z)
Example:
<style>
.container {
/* 告诉引擎使用的是3D */
-webkit-transform-style: -webkit-preserve-3d;
/* 设置景深和景深基点 */
-webkit-perspective: 200;
-webkit-erspective-origin: 50% 50%;
}
.boxA {
width: 200px;
height: 200px;
margin: 100px auto;
background-color: #7cb305;
transform: rotateX(45deg);
}
</style>
<div class="container">
<div class="boxA"></div>
</div>
https://www.qianduan.net/high-performance-css3-animations/
https://segmentfault.com/a/1190000005071819
css开启硬件加速
大多数电脑的显卡都支持硬件加速、可以发挥GPU的力量,CSS animations, transforms 以及 transitions 不会自动开启GPU加速,而是由浏览器的缓慢的软件渲染引擎来执行
一、开启硬件加速
将元素转成3D变化就可以来欺骗浏览器开启硬件加速
.cube {
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
二、解决使用transform或animator时页面闪烁的问题
.cube {
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-perspective: 1000;
-moz-perspective: 1000;
-ms-perspective: 1000;
perspective: 1000;
}
CSS3动画
一、transition 允许块级元素属性,在指定时间内平滑改变
transition: 过渡属性名 过渡时间 过渡模式 延迟时间
.box { transition: all 2s linear 3s; }
transition-property: all; // 设置过渡效果,all或指定一个css属性; 如果是all就是所有属性只要有变化的就执行过渡效果
transition-duration: 2s; // 动画完成的时间
transition-timing-function: // 过渡模式
transition-delay: 2s; // 延迟时间
# 多个过渡通过逗号分割 .box { transition: width 2s linear, height 3s linear 2s; }
# transition事件:
obj.addEventListener('transitionend', function(){}, false);
obj.addEventListener('WebkitTransitionend', function(){}, false);
过渡模式: ease、linear、ease-in、ease-out、ease-in-out
二、animation: 能够在样式中创建多个关键帧来编写样式
1、按百分比来做不同的样式处理
@-webkit-keyframes myColor {
0%{
background-color: red;
}
50%{
background-color: yellow;
}
100%{
background-color: red;
}
}
.box { animation: myColor 5s linear; }
三、from...to,从0%到100%
animation: inpEffect .4s linear;
@-webkit-keyframes inpEffect {
from { top:0px; }
to { top:200px; }
}
四、将animation动画执行到100%后停住,animation-fill-mode: forwards;
animation: inpEffect .4s linear; // 或者加到animation中 animation: inpEffect .4s linear forwards;
animation-fill-mode: forwards;
@-webkit-keyframes inpEffect {
to {
transform: scaleX(1);
}
}
兼容前缀
-webkit-: 指对chrome这种webkit内核的浏览器
-moz-: 指对Firefox浏览器
-o-: 指对Opera浏览器
Media Queries 查询媒体
一、<meta>标签
<meta name="viewport" content="width=device-width; initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
1、width=device-width: 宽度等于设备宽度
2、initial-scale: 初始缩放比例 initial[ɪˈnɪʃəl]
3、minimum-scale、maximum-scale: 允许用户缩放最小、大比例
4、user-scalable: 是否允许用户缩放
二、css定定义
媒体查询: @media 设备类型 and (设备特性) { 样式代码 }
1、设备类型:
1) all 所有媒体
2) braille 盲文触觉设备
3) embossed 盲文打印机
4) print 手持设备
5) projection 打印预览
6) screen 彩屏设备
7) speech '听觉'类似的媒体类型
8) tty 不适用像素的设备
9) tv 电视
2、and | not | only
3、min-width、max-width 最小、大宽度
4、device-width、device-height: 设备屏幕的宽、高度。 device[dɪˈvaɪs]
引用不同样式:
@media screen and (mim-width:480px){ // 窗口宽高大于480时调用下面样式
.ads {
display:none;
}
}
@media screen and (min-width: 500px) and (max-width: 800px){ // 窗口宽度500-800之间执行下面样式
.ads {
display:none;
}
}
三、引用样式文件表
引用不同样式表 <link rel="stylesheet" type="text/css" href="a.css" meida="screen and (min-width: 800px)">
css性能
一、尽可能少使用box-shadows与gradients,投影和渐变都是性能杀手
二、将动画元素不在文档流中,以减少重排,使用
position: fixed;
position: absolute;
| https://segmentfault.com/a/1190000006878700
| http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool flex布局
| http://www.ruanyifeng.com/blog/2015/07/flex-examples.html
| http://www.cnblogs.com/module/p/5578533.html
| https://isux.tencent.com/css3/tools.html // 动画工具生成代码
|
| https://github.com/zhiqiang21/blog/issues/2
| http://div.io/topic/1348
| https://github.com/tj?page=2&tab=repositories
| http://www.alloyteam.com/2016/05/summary-of-pseudo-classes-and-pseudo-elements/ 伪类、伪元素
| https://zhuanlan.zhihu.com/p/33984503 // z-index
| https://cases.aotu.io/ h5活动案例
| https://zhuanlan.zhihu.com/p/25070186 // 布局
| https://zhuanlan.zhihu.com/p/25068655 // 居中布局