选择器
属性选择器
注:前四个为CSS2定义的属性选择器
E[attr] 属性名,不确定具体属性值
E[attr=”value”] 指定属性名,并指定其对应属性值
E[attr ~=”value”] 指定属性名,找到的是具有此属性名,且与其它属性名之间用空格隔开
E[attr |= “value”] 指定属性名,属性值以value-开头或者值为value
E[attr ^= “value”] 指定属性名,属性值以value开头
E[attr $=”value”] 指定属性名,属性值以value结束
E[attr *=”value”] 指定了属性名,属性值中包含了value
结构伪类选择器
E:root 选择文档的根目录,返回html
E:nth-child(n) 父元素下的第n个子元素
- E:nth-child(odd) 奇数子元素(同nth-child(2n-1))
- E:nth-child(even) 偶数子元素(同nth-child(2n))
E:nth-last-child(n) 倒数第n个子元素
E:nth-of-type(n) 父元素下的第n个指定类型的子元素,非指定类型元素不参与排序
E:nth-last-of-type 父元素下的倒数第n个指定类型的子元素
E:first-child 选择父元素下的第一个子元素
E:last-child 选择父元素下的最后一个子元素
E:first-of-type 选择父元素下第一个指定类型的子元素
E:last-of-type 选择父元素下最后一个指定类型的子元素
E:only-child 选择父元素下唯一的子元素
E:only-of-type 选择父元素下指定类型的唯一子元素
UI伪类选择器
指定样式只有当元素处于某种状态下时才起作用,在默认状态下不起作用。
E:link 指向未被访问页面的链接设置样式
E:visited 设置指向已访问页面的链接的样式
E:hover 鼠标悬停时触发
E:active 在点击时触发
E:enabled 选择启用状态元素
E:disabled 选择禁用状态元素
E:checked 选择被选中的input元素(单选按钮或复选框)
其他选择器
E~F 通用兄弟元素选择器类型,选择匹配F的所有元素,且匹配元素位于匹配E的元素后面。
E:not(selector) 否定伪类选择器,选择匹配E的所有元素,且过滤掉匹配selector选择符的任意元素。
E:target 目标伪类选择器类型,选择匹配E的所有元素,且匹配元素被相关URL指向。
这里给个栗子吧:
|
|
在浏览器地址栏中输入URL,并附加#red,以锚点方式链接到
,则元素立即显示为红色背景
E::selection 选择被用户选取的元素部分。
需要注意的是,::selection只能定义被选择时的background-color,color及text-shadow(IE11尚不支持定义该属性)。
文本、字体与颜色
设计文本阴影
text-shadow 栗子🌰
CSS3中,text-shadow可向文本应用阴影。能够规定水平阴影、垂直阴影、模糊距离,以及阴影的颜色。
语法: text-shadow: h-shadow v-shadow blur color
;
- h-shadow 必需,水平阴影的位置,允许负值。
- v-shadow 必需,垂直阴影的位置,允许负值。
- blur 可选,模糊的距离。
- color 可选,阴影的颜色。
定义文本样式
white-space 用来设置如何处理元素中的空白
强制不换行: p { white-space:nowrap; }
word-wrap 允许长单词或 URL 地址换行到下一行
自动换行: p { word-wrap:break-word; }
word-break 属性规定自动换行的处理方法。
强制英文单词断行: p { word-break:break-all; }
注意:设置强制将英文单词断行,需要将行内元素设置为块级元素。
text-overflow 栗子🌰
text-overflow 规定当文本溢出包含元素时的显示,有两个固定值,分别是clip和ellipsis,也可直接传字符串string:
- clip :默认值 。不显示省略标记(…),而是简单的裁切;
- ellipsis: 当对象内文本溢出时显示省略标记(…);
- string:使用给定的字符串来代表被修剪的文本。
使用text-overflow:ellipsis时要注意一下两点:
- overflow: hidden; text-overflow:ellipsis;white-space:nowrap;这三个一定要一起用,如果少了white-space:nowrap,文字会把撑高容器的高度,导致替换字符显示不出来;如果少了overflow: hidden,文字会横向撑到容器的外面;
- 一定要给容器定义宽度。
设计颜色样式
使用RGBA颜色值
对于不支持 RGBa 的浏览器,这里可以采用渐进增强的方案解决,Kayo 推荐的是指定一个保留色的解决方案。
|
|
当然,对于 IE ,可以使用滤镜达到与支持 RGBa 浏览器中相同的效果(参考):
|
|
定义 opacity 属性
用于设置元素的不透明度级别,IE9, Firefox, Chrome, Opera 和 Safari 使用属性 opacity 来设定透明。opacity 属性能够设置的值从 0.0 到 1.0。值越小,越透明。IE8 以及更早的版本使用滤镜 filter:alpha(opacity=x)。x 能够取的值从 0 到 100。值越小,越透明。
注:opacity 会把被设置的元素及其子元素同时设置为同一个透明度,这样的透明规则相当不灵活,在实际开发中往往也是会遇到很多麻烦。相对于 opacity ,RGBA 可以在单个元素上设置透明度,而不影响其子元素。、
定义 transparent 颜色值
用来指定全透明色彩。transparent是全透明黑色(black)的速记法,即一个类似rgba(0,0,0,0)这样的值。
在CSS1中,transparent被用来作为background-color的一个参数值,用于表示背景透明。
在CSS2中,border-color也开始接受transparent作为参数值。
在CSS3中,transparent被延伸到任何一个有color值的属性上。
背景和边框
设计边框背景
border-image可以使用图片来绘制边框。
设计圆角
border-radius可以创建圆角边框,其中每一个值可以为 数值或百分比的形式。栗子🌰
- 如果是一个值,那么 top-left、top-right、bottom-right、bottom-left 四个值相等。
- 如果是两个值,那么 top-left和bottom-right相等,为第一个值,top-right和bottom-left值相等,为第二个值。
- 如果是三个值,那么第一个值是设置top-left,而第二个值是 top-right 和 bottom-left 并且他们会相等,第三个值是设置 bottom-right。
- 如果是四个值,那么第一个值是设置 top-left, 而第二个值是 top-right 第三个值 bottom-right 第四个值是设置 bottom-left
除了上述的简写外,还可以和border一样,分别写四个角,如下:
|
|
关于border-radius可参见:秋月何时了,CSS3 border-radius知多少?
设计阴影
box-shadow可以为元素添加阴影
语法:box-shadow: h-shadow v-shadow blur spread color inset
;
- h-shadow 必需,水平阴影的位置,允许负值。
- v-shadow 必需,垂直阴影的位置,允许负值。
- blur 可选,模糊距离。
- spread 可选,阴影的尺寸。
- color 可选,阴影的颜色。
- inset 可选,将外部阴影 (outset) 改为内部阴影。
设计背景
css3 为 background 新增了3个派生的子属性 background-origin、background-clip 和 background-size。
定义背景坐标:
background-origin 属性规定 background-position 属性相对于什么位置来定位。
取值说明:
- padding-box 背景图像相对于内边距框来定位。
- border-box 背景图像相对于边框盒来定位。
- content-box 背景图像相对于内容框来定位。
注释:如果背景图像的 background-attachment 属性为 “fixed”,则该属性没有效果
定义背景裁剪区域
background-clip 属性规定背景的绘制区域。
取值说明:
- border-box 背景延伸到边框外沿(但是在边框之下)。
- padding-box 边框下面没有背景,即背景延伸到内边距外沿。
- content-box 背景裁剪到内容区 (content-box) 外沿。
定义背景图片大小
background-size 属性用来指定背景图像的大小。默认值: auto
取值说明:
- 可使用 长度值 或 百分比 指定背景图像的大小, 值不能为负值。如果设置一个值, 则该值用于定义图像的宽度, 图像的高度为默认值 auto, 根据宽度进行等比例缩放; 如果设置两个值, 则分别作用于图像的宽和高。
- auto 默认值, 即图像真实大小。
- cover 将背景图像等比缩放到完全覆盖容器, 背景图像有可能超出容器。(即当较短的边等于容器的边时, 停止缩放)
- contain 将背景图像等比缩放到宽度或高度与容器的宽度或高度相等, 背景图像始终被包含在容器内。(即当较长的边等于容器的边时, 停止缩放)
2D变形
transform
旋转动画rotate(<angle>)
旋转函数 取值度数(deg度数)
倾斜动画skew(<angle>[,<angle>])
倾斜函数 取值度数
该函数包含两个参数,分别用来定义X轴Y轴的坐标倾斜角度。
skewX()
skewY()
缩放动画scale(<number>[,<number>])
缩放函数 取值 正数、负数和小数
该函数包含两个参数,分别用来定义宽和高的缩放比例,如果第二个参数省略则第二个参数等于第一个参数。
移动动画translate(<translation-value>[,<translation-value>])
位移函数
该函数包含两个参数,分别用来定义X轴和Y轴的坐标。
—— translateX()
—— translateY()
自定义变形transform-origin
旋转的基点
初始值为”50% 50%”,接受两个参数,它们可以是百分比、em、px等具体值,也可以是left、center、right或者top、middle、bottom等描述性关键字
2D 转换元素能够改变元素 x 和 y 轴。3D 转换元素还能改变其 Z 轴。
该属性必须与 transform 属性一同使用。
语法transform-origin: x-axis y-axis z-axis;
Transform 执行顺序问题 — 后写先执行
变形动画matrix(a,b,c,d,e,f)
矩阵函数
通过矩阵实现缩放
- x轴缩放
a=x*a c=x*c e=x*e
; - y轴缩放
b=y*b d=y*d f=y*f
;
通过矩阵实现位移
- x轴位移:
e=e+x
- y轴位移:
f=f+y
通过矩阵实现倾斜
- x轴倾斜:
c=Math.tan(xDeg/180*Math.PI)
- y轴倾斜:
b=Math.tan(yDeg/180*Math.PI)
matrix(a,b,c,d,e,f) 矩阵函数
通过矩阵实现旋转
a=Math.cos(deg/180*Math.PI)
;b=Math.sin(deg/180*Math.PI)
;c=-Math.sin(deg/180*Math.PI)
;d=Math.cos(deg/180*Math.PI)
;
变换兼容IE9以下IE版本只能通过矩阵来实现
|
|
IE下的矩阵没有E和F两个参数 M11==a; M12==c; M21==b; M22==d
设计动画
平滑过渡
transition过渡
语法:transition: property duration timing-function delay;
定义过渡属性transition-property: all || [attr] || none
属性规定应用过渡效果的 CSS 属性的名称,初始值为 all。(当指定的 CSS 属性改变时,过渡效果将开始)。
提示:过渡效果通常在用户将鼠标指针浮动到元素上时发生。
定义过渡时间transition-duration: <time>
规定完成过渡效果需要花费的时间(以秒或毫秒计)
注:请始终设置 transition-duration 属性,否则时长为 0,就不会产生过渡效果。
定义过渡效果transition-timing-function
属性规定过渡效果的速度曲线。该属性允许过渡效果随着时间来改变其速度。
- ease:(逐渐变慢)默认值
- linear:(匀速)
- ease-in:(加速)
- ease-out:(减速)
- ease-in-out:(先加速后减速)
- cubic-bezier 贝塞尔曲线( x1, y1, x2, y2 )
定义过渡延迟时间transition-delay: <time>
规定过渡效果何时开始,值以秒或毫秒计,设置的时间可以为正整数、负整数和0,非零时必须设置单位,为负数时过渡的动作会从该时间点开始显示,之前的动作被截断,为正数时过渡动作会延迟触发。
过渡完成事件
Webkit内核: obj.addEventListener('webkitTransitionEnd',function(){},false);
firefox: obj.addEventListener('transitionend',function(){},false);
3D动画
animation
语法:animation: name duration timing-function delay iteration-count direction;
关键帧——keyFrames
类似于flash:只需指明两个状态,之间的过程由计算机自动计算
关键帧的时间单位
- 数字:0%、25%、100%等
- 字符:from(0%)、to(100%)
注:为了获得最佳的浏览器支持,您应该始终定义 0% 和 100% 选择器。请使用动画属性来控制动画的外观,同时将动画与选择器绑定。
必要属性
animation-name 动画名称(关键帧名称)
animation-duration 动画持续时间
注:请始终规定 animation-duration 属性,否则时长为 0,就不会播放动画了。栗子🌰
animation-play-state 播放状态( running 播放 和paused 暂停 )
可选属性
animation-timing-function 动画运动形式
- linear 匀速。
- ease 缓冲。
- ease-in 由慢到快。
- ease-out 由快到慢。
- ease-in-out 由慢到快再到慢。
- cubic-bezier(number, number, number, number): 特定的贝塞尔曲线类型,4个数值需在[0, 1]区间内
animation-delay 动画延迟(只是第一次 )
animation-iteration-count 重复次数(infinite为无限次)
animation-direction播放前重置
动画是否重置后再开始播放
- alternate 动画直接从上一次停止的位置开始执行
- normal 动画第二次直接跳到0%的状态开始执行
监听css3动画结束事件-webkitAnimationEnd
|
|
渐变效果
CSS3新增了渐变效果,包括linear-gradient(线性渐变)和radial-gradient(径向渐变)。具体用法参考教程:再说CSS3渐变——径向渐变
网页布局
设计多列布局
通过CSS3,能够创建多个列来对文本进行布局,IE10 和 Opera 支持 column 属性。Firefox 支持替代的 -moz-column 属性。Safari 和 Chrome 支持替代的 -webkit-column 属性。主要有以下属性:
定义列宽
column-width:定义单列显示的宽度
定义列数
column-count: 定义显示的列数
定义列间距
column-gap: 定义列之间的间距
定义列边框样式
column-rule: 定义列之间的宽度、样式和颜色规则
- column-rule-width 设置列之间的宽度规则
- column-rule-style 设置列之间的样式规则
- column-rule-color 设置列之间的颜色规则
定义跨列显示
column-span:属性规定元素应横跨多少列
语法:column-span: 1|all
- 1 元素应横跨一列
- all 元素应横跨所有列
Flexbox模块
关于Flexbox请参考大漠的这篇文章:理解Flexbox:你需要知道的一切
顺便兼顾一下:弹性盒子display:box
Flex容器(Flex Container):父元素显式设置了display:flex
Flex项目(Flex Items):Flex容器内的子元素
Flex容器属性
flex-direction || flex-wrap || flex-flow || justify-content || align-items || align-content
flex-direction
flex-direction属性控制Flex项目沿着主轴(Main Axis)的排列方向。
它具有四个值:
|
|
简单点来说,就是flex-direction属性让你决定Flex项目如何排列。它可以是行(水平)、列(垂直)或者行和列的反向。
flex-wrap
flex-wrap属性有三个属性值, 默认为 nowrap(不换行排列):
|
|
flex-flow
flex-flow是flex-direction和flex-wrap两个属性的速记属性。
|
|
justify-content
记得text-align属性。其实justify-content属性主要定义了Flex项目在水平方向上的对齐方式。
justify-content属性可以接受下面五个值之一,默认属性值是flex-start:
|
|
- flex-start 让所有Flex项目靠水平方向开始边缘(左对齐)
- flex-end 让所有Flex项目靠水平方向结束边缘(右对齐)
- center 和你预期的一样,center让所有Flex项目排在水平方向中间(居中对齐)
- space-between 让除了第一个和最一个Flex项目的两者间间距相同(两端对齐)
- space-around 让每个Flex项目具有相同的空间
align-items
align-items属性类似于justify-content属性。它主要用来控制Flex项目在垂直方向对齐方式。这也是align-items和justify-content两个属性之间的不同之处。
align-items属性可以接受这些属性值:flex-start || flex-end || center || stretch || baseline。
|
|
- stretch 默认值,让所有的Flex项目高度和Flex容器高度一样。
- flex-start 让所有Flex项目靠垂直方向开始边缘(顶部对齐)
- flex-end 让所有Flex项目靠垂直方向结束边缘(底部对齐)
- center 让Flex项目在Cross-Axis中间(居中对齐)
- baseline 让所有Flex项目在Cross-Axis上沿着他们自己的基线对齐
align-content
align-content属性用于多行的Flex容器。它也是用来控制Flex项目在Flex容器里的排列方式,排列效果和align-items值一样,但除了baseline属性值。像align-items属性一样,它的默认值是stretch。
- stretch 使用stretch会拉伸Flex项目,让他们沿着垂直方向适应Flex容器可用的空间
- flex-start 之前你看到过flex-start。这次是让多行Flex项目靠垂直方向开始边缘。沿着垂直方向从上到下排列。因此Flex项目在Flex容器中顶部对齐。
- flex-end 刚好和flex-start相反,让多行Flex项目靠着垂直方向结束位置。让Flex项目沿着垂直方向从下到上排列,即底部对齐。
- center 让多行Flex项目在Cross-Axis中间
Flex项目属性
order || flex-grow || flex-shrink || flex-basis
order
允许Flex项目在一个Flex容器中重新排序。基本上,你可以改变Flex项目的顺序,从一个位置移动到另一个地方。
这不会影响源代码。这也意味着Flex项目的位置在HTML源代码中不需要改变。order属性的默认值是0。它可以接受一个正值,也可以接受一个负值。
值得注意的是,Flex项目会根据order值重新排序。从底到高。
flex-grow 和 flex-shrink
flex-grow和flex-shrink属性控制Flex项目在容器有多余的空间如何放大(扩展),在没有额外空间又如何缩小。
他们可能接受0或者大于0的任何正数。默认情况下,flex-grow属性值设置为0。表示Flex项目不会增长,填充Flex容器可用空间。
flex-basis
flex-basis属性可以指定Flex项目的初始大小。也就是flex-grow和flex-shrink属性调整它的大小以适应Flex容器之前。
flex-basis默认的值是auto。flex-basis可以取任何用于width属性的任何值。比如 % || em || rem || px等。
注意:如果flex-basis属性的值是0时,也需要使用单位。即flex-basis: 0px不能写成flex-basis:0。
flex速记
flex是flex-grow、flex-shrink和flex-basis三个属性的速记(简写)。
注意它们之间的顺序。flex-grow第一,然后是flex-shrink,最后是flex-basis。缩写成GSB,可以帮助你更好的记忆。
如果你只设置了flex-grow和flex-shrink值,flex-basis可能是默认值0。这就是所谓的绝对flex项目。只有当你设置了flex-basis,你会得到一个相对flex项目。
绝对Flex项目的宽度只基于 flex 属性,而相对Flex项目的宽度基于内容大小。
align-self
align-self 改变一个弹性项目沿着侧轴的位置,而不影响相邻的弹性项目。
该属性的取值可以是这些值之一:auto || flex-start || flex-end || center || baseline || stretch。
|
|
- flex-end将目标项目(Flex项目)对齐到垂直方向的末端
- center将目标项目(Flex项目)对齐到垂直方向的中间
- stretch会将目标项目拉伸,以沿着垂直方向填满Flex容器的可用空间(Flex项目高度和Flex容器高度一样)
- baseline将目标项目沿着基线对齐
- auto 是将目标Flex项目的值设置为父元素的 align-items值,或者如果该元素没有父元素的话,就设置为 stretch
Auto-margin 对齐
当在Flex项目上使用 margin: auto 时,值为 auto 的方向(左、右或者二者都是)会占据所有剩余空间。需要注意的是当在一个Flex项目上使用自动外边距(margin: auto)时,justify-content 属性就不起作用了。
用户界面
改变盒模型组成方式
box-sizing
box-sizing属性可设置的值有content-box、border-box和inherit。
- content-box: padding和border不被包含在定义的width和height之内。对象的实际宽度等于设置的width值和border、padding之和,即 (Element width = width + border + padding),此属性表现为标准模式下的盒模型。
- border-box: padding和border被包含在定义的width和height之内。对象的实际宽度就等于设置的width值,即使定义有border和padding也不会改变对象的实际宽度,即 (Element width = width),此属性表现为怪异模式下的盒模型。
调节元素尺寸
resize
resize 属性规定是否可由用户调整元素尺寸。如果希望此属性生效,需要设置元素的 overflow 属性,值可以是 auto、hidden 或 scroll。
|
|
- none 用户无法调整元素的尺寸
- both 用户可调整元素的高度和宽度
- horizontal 用户可调整元素的宽度
- vertical 用户可调整元素的高度
设计轮廓
outline-offset
outline-offset属性对轮廓进行偏移,并在超出边框边缘的位置绘制轮廓。