1布局
Grid布局应用很广泛,最简单的例子就是内容的分栏显示。
对于左边这个布局复杂的三栏网页来说,如果使用CSS3Grid布局的话,我们只需这样写:
body{columns:3;column-gap:0.5in;}
img{float:pagetopright;width:3gr;}
其中,body部分声明页面为3栏,栏间距为0.5英寸;img中float属性指明图片浮动位置为页面的右上角,而宽度为3个栏宽。只需这样两行CSS,就可以实现这个复杂布局。
2Flexbox
Flexbox 由 伸缩容器 和 伸缩项目 组成。通过设置元素的display 属性为 flex 或 inline-flex 可以得到一个伸缩容器。设置为 flex 的容器被渲染为一个块级元素,而设置为 inline-flex 的容器则渲染为一个行内元素。
Flexbox通常能让我们更好的操作他的子元素布局,例如:
-
如果元素容器没有足够的空间,我们无需计算每个元素的宽度,就可以设置他们在同一行;
-
可以快速让他们布局在一列;
-
可以方便让他们对齐容器的左、右、中间等;
-
无需修改结构就可以改变他们的显示顺序;
-
如果元素容器设置百分比和视窗大小改变,不用担心未指定元素的确切宽度而破坏布局,因为容器中的每个子元素都可以自动分配容器的宽度或高度的比例。[2]
3生成工具
CSS3 Maker
CSS3(图4)
这款工具[3] 非常强大,可在线演示渐变、阴影、旋转、动画等非常多的效果,并生成对应效果的代码,
CSS3 Generator
非常不错的各种 CSS3 代码生成器,支持圆角、渐变、旋转和阴影等众多特性,带预览效果。
CSS3 Please
帅且酷的一款 CSS3 工具,可即时在线修改代码并预览效果,还有详细的浏览器兼容情况。
4特性
2、以往对网页上的文字加特效只能用filter这个属性,这次CSS3中专门制订了一个加文字特效的属性,而且不止加阴影这种效果。对应属性:font-effect。
3、丰富了对链接下划线的样式,以往的下划线都是直线,这次可不一样了,有波浪线、点线、虚线等等,更可对下划线的颜色和位置进行任意改变。(还有对应顶线和中横线的样式,效果与下划线类似)对应属性:text-underline-style,text-underline-color,text-underline-mode,text-underline-position。
4、在文字下点几个点或打个圈以示重点,CSS3也开始加入了这项功能,这应该在某些特定网页上很有用。对应属性:font-emphasize-style和font-emphasize-position。
边框
border-color:控制边框颜色,并且有了更大的灵活性,可以产生渐变效果
1
2
3
4
5
6
7
|
border-color :
/*其中可以上一个值,也可以是多个值,具体我在这里不多说了,大家来时用到的也特别多*/
/*我们可以分别给各边上色*/
border-top-color : /*给上边框上色*/
border-right-color : /*给右边框上色*/
border-bottom-color : /*给下边框上色*/
border-left-color : /*给左框上色*/
|
border-radius:能产生类似圆角矩形的效果
背景
background-origin:决定了背景在盒模型中的初始位置,提供了3个值,border, padding和content
border:控制背景起始于左上角的边框
content:控制背景起始于左上角的内容background-clip:决定边框是否覆盖住背景(默认是不覆盖),提供了两个值,border和padding
border:会覆盖住背景
padding:不会覆盖背景
background-size:可以指定背景大小,以象素或百分比显示。当指定为百分比时,大小会由所在区域的宽度、高度,以及background-origin的位置决定
multiple backgrounds:多重背景图像,可以把不同背景图像只放到一个块元素里。
文字效果
text -overflow:当文字溢出时,用“…”提示。包括ellipsis、clip、ellipsis-word、inherit,前两个CSS2就有了,还是部分支持,但有趣的是IE6居然也支持。ellipsis-word可以省略掉最后一个单词,对中文意义不大,inherit可以继承父级元素。
颜色
HSL colors:除了支持RGB颜色外,还支持HSL(色相、饱和度、亮度)。以前一般都是作图的时候用HSL色谱,但这样一来会包括更多的颜色。H用度表示,S和L用百分比表示,比如hsl(0,100%, 50%)
HSLA colors:加了个不透明度(Apacity),用0到1之间的数来表示,比如hsla(0,100%,50%,0.2)
opacity:直接控制不透明度,用0到1之间的数来表示
RGBA colors:和HSLA colors类似,加了个不透明度。一直以来,浏览器的透明一直无法实现单纯的颜色透明,每次使用alpha后就会把透明的属性继承到子节点上。换句话说,很难实现背景颜色透明而文字不透明的效果。直到RGBA颜色的出现这一切将成为现实。
实现这样的效果非常简单,设置颜色的时候我们使用标准的rgba()单位即可,例如rgba(255,0,0,0.4)这样就出现了一个红色同时拥有alpha透明为0.4的颜色。
经过测试firefox3.0、safari3.2、opera10都支持了rgba单位。
动画属性
变形(transform)、转换(transition)和动画(animation)
transform: rotate | scale | skew | translate |matrix;
旋转rotate、扭曲skew、缩放scale和移动translate以及矩阵变形matrix。
transition主要包含四个属性值:执行变换的属性:transition-property,变换延续的时间:transition-duration,在延续时间段,变换的速率变化transition-timing-function,变换延迟时间transition-delay。下面分别来看这四个属性值
在开始介绍Animation之前我们有必要先来了解一个特殊的东西,那就是"Keyframes",我们把他叫做“关键帧”,玩过flash的朋友可能对这个东西并不会陌生。下面我们就一起来看看这个“Keyframes”是什么东西。前面我们在使用transition制作一个简单的transition效果时,我们包括了初始属性和最终属性,一个开始执行动作时间和一个延续动作时间以及动作的变换速率,其实这些值都是一个中间值,如果我们要控制的更细一些,比如说我要第一个时间段执行什么动作,第二个时间段执行什么动作(换到flash中说,就是第一帧我要执行什么动作,第二帧我要执行什么动作),这样我们用Transition就很难实现了,此时我们也需要这样的一个“关键帧”来控制。那么CSS3的Animation就是由“keyframes”这个属性来实现这样的效果。下面我们一起先来看看Keyframes:
Keyframes具有其自己的语法规则,他的命名是由"@keyframes"开头,后面紧接着是这个“动画的名称”加上一对花括号“{}”,括号中就是一些不同时间段样式规则,有点像我们css的样式写法一样。对于一个"@keyframes"中的样式规则是由多个百分比构成的,如“0%”到"100%"之间,我们可以在这个规则中创建多个百分比,我们分别给每一个百分比中给需要有动画效果的元素加上不同的属性,从而让元素达到一种在不断变化的效果,比如说移动,改变元素颜色,位置,大小,形状等,不过有一点需要注意的是,我们可以使用“fromt”“to”来代表一个动画是从哪开始,到哪结束,也就是说这个 "from"就相当于"0%"而"to"相当于"100%",值得一说的是,其中"0%"不能像别的属性取值一样把百分比符号省略,我们在这里必须加上百分符号(“%”)如果没有加上的话,我们这个keyframes是无效的,不起任何作用。因为keyframes的单位只接受百分比值。[2]
用户界面
resize:可以由用户自己调整div的大小,有horizontal(水平)vertical(垂直)或者both(同时),或者同时调整。如果再加上max-width或min-width的话还可以防止破坏布局
选择器
CSS3增加了更多的CSS选择器,可以实现更简单但是更强大的功能,比如:nth-child()等。
Attribute selectors:在属性中可以加入通配符,包括^,$,*
[att*=val]:表示包含至少有一个val的att属性
其它模块:
(Other modules)
media queries:感觉叫媒体选择比较合适,可以为网页中不同的对象设置不同的浏览设备。比如可以为某一块分别设置屏幕浏览样式和手机浏览样式,以前则只能设置整个网页。
multi-column layout:多列布局,让文字以多列显示,包括column-width、column-count、column-gap三个值
column-width:指定每列宽度
column-count:指定列数
column-gap:指定每列之间的间距
column-rule-color:控制列间的颜色
column-rule-style:控制列间的样式
column-rule-width:控制列间的宽度
column-space-distribution:平均分配列间距
5影响
CSS3将完全向后兼容,所以没有必要修改的设计来让它们继续运作。网络浏览器也还将继续支持CSS2。CSS3主要的影响是将可以使用新的可用的选择器和属性,这些会允许实现新的设计效果(譬如动态和渐变),而且可以很简单的设计出现在的设计效果(比如说使用分栏)。
6选择符
选择符类型
|
表达式
|
描述
|
子串匹配的属性选择符
|
E[att^="val"]
|
匹配具有att属性、且值以val开头的E元素
|
子串匹配的属性选择符
|
E[att$="val"]
|
匹配具有att属性、且值以val结尾的E元素
|
子串匹配的属性选择符
|
E[att*="val"]
|
匹配具有att属性、且值中含有val的E元素
|
结构性伪类
|
E:root
|
匹配文档的根元素。在HTML(标准通用标记语言下的一个应用)中,根元素永远是HTML
|
结构性伪类
|
E:nth-child(n)
|
匹配父元素中的第n个子元素E
|
结构性伪类
|
E:nth-last-child(n)
|
匹配父元素中的倒数第n个结构子元素E
|
结构性伪类
|
E:nth-of-type(n)
|
匹配同类型中的第n个同级兄弟元素E
|
结构性伪类
|
E:nth-last-of-type(n)
|
匹配同类型中的倒数第n个同级兄弟元素E
|
结构性伪类
|
E:last-child
|
匹配父元素中最后一个E元素
|
结构性伪类
|
E:first-of-type
|
匹配同级兄弟元素中的第一个E元素
|
结构性伪类
|
E:only-child
|
匹配属于父元素中唯一子元素的E
|
结构性伪类
|
E:only-of-type
|
匹配属于同类型中唯一兄弟元素的E
|
结构性伪类
|
E:empty
|
匹配没有任何子元素(包括text节点)的元素E
|
目标伪类
|
E:target
|
匹配相关URL指向的E元素
|
UI元素状态伪类
|
E:enabled
|
匹配所有用户界面(form表单)中处于可用状态的E元素
|
UI元素状态伪类
|
E:disabled
|
匹配所有用户界面(form表单)中处于不可用状态的E元素
|
UI元素状态伪类
|
E:checked
|
匹配所有用户界面(form表单)中处于选中状态的元素E
|
UI元素状态伪类
|
E::selection
|
匹配E元素中被用户选中或处于高亮状态的部分
|
否定伪类
|
E:not(s)
|
匹配所有不匹配简单选择符s的元素E
|
通用兄弟元素选择器
|
E ~ F
|
匹配E元素之后的F元素
|
7.3和2.1的区别
大家都知道我们习惯性称作的 CSS3 对于 CSS2.1 有很多的修改和补充。抛开浏览器的兼容性问题,这里把所有的变化整理到一份表格中便于学习和查阅[4] 。不能保证没有遗漏,欢迎大家补充。
新增的 属性 | 新增的每个属性新值 | 新增的选择器 | 其它 新特性 |
|
|
|
注:仍在变化中的特性
|
8CSS3 模块
CSS3被拆分为"模块"。旧规范已拆分成小块,还增加了新的。
一些最重要CSS3模块如下:
-
选择器
-
盒模型
-
背景和边框
-
文字特效
-
2D/3D转换
-
动画
-
多列布局
-
用户界面