CSS3 新增选择器
属性选择器
可以根据元素特定属性选择元素。这样就可以不借助于类或则 id 选择器。
| 选择符 | 简介 |
|---|---|
| E[att] | 选择具有 att 属性的 E 元素 |
| E[att="val”] | 选择具有 att 属性且 att=val 的 E 元素 |
| E[att^="val”] | 匹配具有 att 属性且值以 val 开通的 E 元素 |
| E[att$="val”] | 匹配具有 att 属性且值以 val 结尾的 E 元素 |
| E[att*="val”] | 匹配具有 att 属性且值中含有 val 的 E 元素 |
结构伪类选择器
主要根据文档结构来选择元素,常用于根据父级选择父级里面的子元素。
| 选择符 | 简介 |
|---|---|
| E:first-child | 匹配父元素中的第一个子元素 E |
| E:last-child | 匹配父元素中最后一个元素 E |
| E:nth-child(n) | 选择某个父元素的一个或多个特定的元素的子元素 |
| E:first-of-type | 指定类型 E 的第一个 |
| E:last-of-type | 指定类型 E 的最后一个 |
| E:nth-of-type(n) | 指定类型 E 的第 n 个 |
E:nth-child(n) :将所有子元素排序选择,序号是固定的;先找到第 n 个孩子,然后看是否和 E 匹配
-
n 可以是数字,关键字和公式
-
n 如果是数字,既选择第 n 个子元素,里面的数字从 1 开始
-
n 可以是关键字:even 偶数,odd 奇数
-
n 可以是公式:常见公式如下
-
公式 取值 n 从0开始计算,第0个或者超出的元素会被忽略 2n 选择父元素下所有的偶数孩子 2n+1 选择父元素下所有的奇数孩子 n+5 从第5个开始(包含第5个)到最后 -n+5 前5个(包含第5个) ….
-
E:nth-of-type(n) :将指定元素的盒子排列序号
- 执行的时候先看 E 指定的元素,之后看 :nth-of-type(n) 第n个孩子
伪元素选择器
可以利用 CSS 创建新标签元素,而不需要 HTML 标签;允许我们添加额外元素而不扰乱文档本身。
| 选择符 | 简介 |
|---|---|
| element::before() | 在元素内部的前面插入内容 |
| element::after() | 在元素内部的后面插入内容 |
- before 和 after 创建一个元素,但是属于行内元素
- 新创建的这个元素在文档树中是找不到的,所以称为伪元素
- before 和 after 必须有 content 属性
- before 在父元素内容的前面创建元素,after 在父元素的后面插入元素
- 伪元素选择器和标签选择器一样,权重为 1
/*伪元素清楚浮动*/
.record li::after {
content: "";
display: block;
visibility: hidden;
clear: both;
overflow: hidden;
}
滤镜 Filter
Filter :CSS属性将模糊或颜色偏移等图形效果应用于元素。
| 属性 | 描述 |
|---|---|
| filter: blur(5px); | 图片使用高斯模糊效果,小括号里面的数值越大,越模糊。默认是0。 |
| filter: contrast(200%); | 调整图像的对比度。值是0%的话图像会全黑。值是100%图像不变。值超过100%图像会比原来更亮。默认是1。 |
| filter: grayscale(80%); | 将图像转换为灰度图像。值定义转换的比例。值为100%则完全转为灰度图像,值为0%图像无变化。值在0%到100%之间,则是效果的线性乘子。值默认是0。 |
| filter: hue-rotate(90deg); | 给图像应用色相旋转。“angle"一值设定图像会被调整的色环角度值。默认值是0deg,则图像无变化。超过360deg的值相当于又绕一圈。 |
calc 函数
calc() 函数用于动态计算长度值,可以在声明 CSS 属性值时执行一些计算。
- 需要注意的是,运算符前后都需要保留一个空格,例如:
width: calc(100% - 10px); - 任何长度值都可以使用 calc() 函数进行计算;
- calc() 函数支持 “+”, “-", “*", “/” 运算;
- calc() 函数使用标准的数学运算优先级规则;
transition 过渡
过渡是 CSS3 中具有颠覆性的特征之一,可以在不使用 Flash 动画或 JavaScript 的情况下,当元素从一种样式变换为另一种样式时为元素添加效果。
过渡动画:从一个状态渐渐的过渡到另外一个状态;经常和 :hover 一起搭配使用。
哪个元素做过渡效果给该元素添加该属性
transition: [要过渡的属性] [花费时间] [运动曲线] [何时开始], … ;
- 属性:想要变化的 CSS 属性,宽度高度、背景颜色、内外边距等。如果想要所有属性都变化过渡使用 all
- 花费时间:单位是秒(s),单位必须写
- 运动曲线:默认是 ease,可以省略。linear:匀速;ease-in:加速;ease-out:减速;ease-in-out:先加速后减速
- 何时开始:单位是秒,单位必须填写。可以设置延迟触发时间,默认是 0s
transform 转换
2D 移动:translate
2D 移动是 2D 转换里面的一种功能,可以改变元素在网页中的位置,类似定位。
transform: translate(x,y);:transform: translate(100px, 100px);
- x:是x轴上移动位置
- y:是y轴上移动位置
可以分开写:
transform: translateX(n);transform: translateY(n);
特点:
-
定义 2D 转换中的移动,沿着 X 和 Y 轴移动元素
-
translate 最大的优点:不会影响到其它元素的位置
-
translate 中的百分比单位是相对于自身元素的
-
对行内标签没有效果
2D 旋转:rotate
2D 旋转指的是让元素在二维平面内顺时针或逆时针旋转。
transform: rotate(45deg);
- rotate里面单位是度数 (deg)
- 角度为正时,顺时针旋转;为负时,逆时针旋转
- 默认旋转的中心点是元素的中心点
转换中心点:transform-origin
可以设置元素转换的中心点,默认是以图形中心点为旋转中心点。
transform-origin: x y;
- 参数 x 和 y 用空格隔开
- x y 默认转换的中心点是元素的中心点 (50% 50%)
- 还可以给 x y 设置"像素"或则"方位名词” (top bottom left right center)
2D 转换之缩放:scale
放大和缩小,通过该属性控制放大还是缩小。
transform:scale(x,y);
- 其中 x 和 y 用逗号分隔
- transform: scale(1,1) :宽和高都放大一倍,相对于没有放大
- transform: scale(2,2) :宽和高都放大 2 倍
- transform: scale(2) :只有一个参数,第二个参数默认和第一个参数一样,相当于 scale(2,2)
- transform: scale(0.5,0.5) :宽和高都缩小一倍
- scale 缩放最大的优势:可以设置转换中心缩放,默认以中心点缩放的,而且不影响其它盒子
2D 转换综合写法
可以同时使用多个转换:transform: translate() rotate() scale() ...;
- 书写顺序会影响转换效果
- 同时有位移和其它属性时,将位移属性放到最前面
动画
动画(animation)是 CSS3 中具有颠覆性的特征之一,可以通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。
相比较过渡,动画可以实现更多变化,更多控制,连续自动播放等效果。
动画使用
Step1:定义动画
用 @keyframes 定义动画
@keyframes animation_name {
0%{
transform: translate(0,0);
}
...
100%{
transform: translate(0,0);
}
}
动画序列
- 0% 是动画的开始,100% 是动画的完成。该规则就是动画序列,百分比使用整数值
- 在 @keyframes 中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果
- 动画是使元素从一种样式逐渐变化为另一种样式的效果,可以改变任意多的样式;任意多的次数
- 使用百分比来规定变化发生的时间,或用关键词 “from”,“to”,等同于 0%,100%
Step2:调用动画
指定元素使用动画效果
div{
/* 调用动画 */
animation-name: animation_name;
/* 持续时间 */
animation-duration: keep_time;
}
动画常用属性
| 属性 | 描述 |
|---|---|
| @keyframes | 规定动画 |
| animation | 所有动画属性的简写属性,除了 animation-play-state 属性 |
| animation-name | 规定动画的名称,必须项 |
| animation-duration | 规定动画完成一个周期所花费的时间,秒/毫秒。必须项 |
| animation-timing-function | 规定动画的速度曲线,默认是 ‘ease’ |
| animation-delay | 规定动画何时开始,默认是 0 |
| animation-iteration-count | 规定动画被播放的次数,默认是 1,还有 infinite |
| animation-direction | 规定动画是否在下一周期逆向播放,默认是 normal;alternate 逆播放; |
| animation-play-state | 规定动画是否正在运行或暂停,默认是 running 还有 pause |
| animation-fill-mode | 规定动画结束后状态,保持 forwards,回到起始 backwards |
动画速度曲线
| 属性值 | 描述 |
|---|---|
| linear | 动画从头到尾的速度是相同的 |
| ease | 默认值。动画以低速开始,然后加快,在结束前变慢 |
| ease-in | 动画以低速开始 |
| ease-out | 动画以低速结束 |
| ease-in-out | 动画以低速开始和结束 |
| steps(n) | 动画分 n 步完成 |
| cubic-bezier(n,n,n,n) | 在 cubic-bezier 函数中共输入自定义值。可以是 0 到 1 的数值 |
动画属性简写
animation:动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 动画起始或则结束时状态;
animation: animation_name 5s linear 2s infinite alternate;
- 简写属性不包括 animation-play-state
- 暂停动画:animation-play-state: paused; 经常和鼠标经过等操作配合使用
- 多个动画效果,中间使用逗号分隔
3D 转换
特点
- 近大远小
- 物体后面遮挡不可见
三维坐标系
三维坐标系其实就是指立体空间,立体空间由三个轴共同组成。
- x 轴:水平向右 - x 右边是正值,左边是负值
- y 轴:垂直向下 - y下面是正值,下面是负值
- z 轴:垂直屏幕 - z 往外面是正值,往里面是负值
3D 移动
3D 移动在 2D 移动的基础上添加了一个可以移动的方向,Z 轴移动。
transform: translate3d(x,y,z);
- transform: translateZ(100px):仅仅在 Z 轴上移动,(一般使用 px 单位)
透视:perspective
在 2D 平面产生近大远小的视觉立体,但是只是效果二维的
- 如果想要在网页产生 3D 效果需要透视,将 3D 物体投影在 2D 平面内
- 模拟人类的视觉位置
- 透视既是视距:人眼睛可以看到屏幕的距离
- 距离视觉点越近的在平面成像越大,越远成像越小
- 透视的单位是像素 px
透视写在被观察元素的父盒子上面
- d:就是视距,视距就是一个人的眼睛到屏幕的距离
- z:就是 z 轴,物体距离屏幕的距离,z 轴越大,我们看到的物体就越大
3D 旋转
3D 旋转可以让元素在三维平面内沿着 x 轴,y 轴,z 轴或者自定义轴进行旋转。
transform: rotateX(45deg);
transform: rotateY(45deg);
transform: rotateZ(45deg);
transform: rotate3d(x,y,z,deg); 沿着自定义轴旋转, deg 定义角度值 (了解即可)
- transform: rotate3d(1,0,0,45deg); 沿着 X 轴旋转 45deg
- transform: rotate3d(1,1,0,45deg); 沿着对角线旋转 45deg
3D 呈现:transform-style
- 控制子元素是否开启三维立体空间
- transform-style: flat; 默认值,子元素不开启 3D 立体空间
- transform-style: preserve-3d; 子元素开启立体空间
- 代码写给父级,但是影响的是子盒子