如同人类的的进化一样,CSS3是CSS2的“进化”版本,在CSS2基础上,增强 或新增 了许多特性, 弥补了CSS2的众多不足之处,使得Web开发变得更为高效和便捷。
PC端浏览器支持程度差,需要添加私有前缀
移动端支持优于PC端
不断改进中
应用相对广泛
关于私有前缀:
在标准还未确定时,部分浏览器已经根据最初草案实现了部分功能,为了与之后确定下来的标准进行兼容,所以每种浏览器使用了自己的私有前缀与标准进行区分,当标准确立后,各大浏览器将逐步支持不带前缀的css3新属性
目前已有很多私有前缀可以不写了,但为了兼容老版本的浏览器,可以仍沿用私有前缀和标准方法,逐渐过渡。
一般来说,移动端更新迭代很快,对CSS3支持良好, 因此我们在移动端没必要写太多的前缀,因为移动端的ios和Android的浏览器都是webkit内核。
谷歌、苹果浏览器:-webkit- 火狐浏览器:-moz-
IE浏览器:-ms- 欧朋浏览器:-o-
div {
width: 200px;
height: 200px;
background-color: pink;
margin: 100px auto;
/*谷歌浏览器和safari浏览器的前缀 -webkit-*/
-webkit-transform: rotate(45deg);
/*火狐浏览器的前缀 -moz-*/
-moz-transform: rotate(45deg);
/*ie浏览器的前缀 -ms-*/
-ms-transform: rotate(45deg);
/*opera浏览器的前缀 -o-*/
-o-transform: rotate(45deg);
/*规范化后的写法*/
transform: rotate(45deg);
}
伪类选择器的语法:都带有一个 冒号 :
/* 只有当前p元素是唯一的子元素时才被选中 (了解) */
p:only-child {
background-color: blue;
}
/* n 从 0开始, 取值 0, 1, 2, 3...*/
/* 几n+几, n 要放前面 */
/* 找前面 3 个 */
li:nth-child(-n+3) {
background-color: red;
}
/* 找最后 3 个 */
li:nth-last-child(-n+3) {
background-color: red;
}
:of-type系列, 用法与child系列很像,但是找的是子元素中对应类型的下标(了解,用的不多)
:focus 查找获取到焦点的文本框
:checked 获得选中的checkbox
:disabled 获得不可用的框
:enabled 获得可用的框
:not(selector)选择不匹配selector的那些元素
:target 获取当前活跃的锚链接
/* of-type 系列, 先找类型, 再编号 */
/* 找第n个span类型的元素 */
span:nth-of-type(2) {
background-color: yellow;
}
/* 选中 第二个 ul 添加背景色 */
ul:nth-of-type(2) {
background-color: orange;
}
/* 当对象获取到焦点时的样式 */
input:focus {
background-color: red;
}
/* :not 排除括号选中的元素 */
li:not(:last-child) {
border-bottom: 1px solid #000;
}
/* 匹配内容为空的元素 */
div:empty {
width: 200px;
height: 200px;
background-color: yellow;
}
input[type="checkbox"]:checked {
width: 200px;
height: 200px;
}
h1:target {
font-size: 100px;
color: red;
}
注意事项:
//1. 必须指定content属性,可以在content属性中写入文本内容,但是通常为空字符串。
//2. 默认是行内元素,无法设置宽高,需要指定display:block或者position:absolute
E::before :在元素子节点的最前面添加一个内容。
E::after :在元素子节点的最后面添加一个内容。
关于单冒号和双冒号问题:
关于:before与::before的区别
:before是css2中伪元素的写法,但是呢,在css3中严格规定,伪类采用单冒号,伪元素需要使用双冒号。为了兼容旧的代码,当浏览器碰到了:before之后,会自动的转换成::before。
如果需要兼容老的浏览器,比如IE678,推荐使用:before
如果不需要兼容老的浏览器,比如移动端,推荐使用::before
Title
- 导航1
- 导航2
- 导航3
- 导航4
[] 表示全部可选项
|| 表示或者
| 表示多选一
? 表示0个或者1个
* 表示0个或者多个
{2,3} 表示范围
text-shadow:文字阴影
语法: text-shadow:水平偏移 垂直偏移 羽化大小(模糊度) 颜色
h1:first-child {
text-shadow: 2px 2px 2px red;
}
h1:nth-child(2) {
text-shadow: 2px 2px 2px red, 4px 4px 4px blue, 6px 6px 6px green;
}
//凹凸文字
h1:first-child {
text-shadow: 1px 1px 1px #fff, -1px -1px 1px #000;
}
h1:last-child {
text-shadow: 1px 1px 1px #000, -1px -1px 1px #fff;
}
box-shadow:边框阴影
none: 无阴影
inset:设置对象的阴影类型为内阴影。该值为空时,则对象的阴影类型为外阴影
CSS3中可以通过box-sizing 来指定盒模型,即可指定为content-box、border-box,这样我们计算盒子大小的方式就发生了改变。
可以分成两种情况:
box-sizing: border-box 计算方式为content = width – border - padding(IE盒子模型)
box-sizing: content-box 计算方式为content = width(标准盒子模型)
在css2中已经有background属性了,用于设置盒子的背景相关的一些样式,在CSS3中新增加了几个背景相关的几个属性。
用户设置背景图片的尺寸大小
//注意:这两种设置方式会导致图片失真。
/*background-size:设置背景图片的大小*/
background-size: 600px 400px;
/* 百分比是相对于盒子自身的宽度和高度 */
background-size: 100% 100%;
不失真的设置方式(等比例缩放)
/*contain保证等比例缩放,但是会出现留白*/
background-size: contain;
/*cover保证等比例缩放,并且不会留白,但是出现有一部分图片不显示*/
background-size: cover;
设置背景区域的大小
/*盒子的背景区域是整个盒子,包括边框和padding*/
/*默认值,设置背景区域包括了边框*/
background-clip: border-box;
/*背景区域只包含padding和content*/
background-clip: padding-box;
/*背景区域只包含content*/
background-clip: content-box;
设置背景图片的原点的位置,默认是padding的地方开始
background-image: url(images/bg.jpg);
/*设置原点从border开始*/
background-origin: border-box;
/*设置原点从padding开始,默认值*/
background-origin: padding-box;
/*设置原点从content开始*/
background-origin: content-box;
background设置背景的时候,可以设置多个背景图片,使用逗号隔开。注意颜色只能设置一次,并且通常来说,颜色都是在最后面进行设置。
background是一个合写的属性,如果在background之前设置了background相关的样式,会被覆盖掉。
background: url(images/mn1.jpg) no-repeat top left, url("images/mn2.jpg") no-repeat right bottom, pink;
/* 多背景指定 */
/* 所谓多背景, 就是背景可以设置多个, 通过 , 隔开 */
/* 注意: 如果是多背景, 要设置颜色, 需要将背景颜色, 写在最后一个中 */
background: url(./images/mn1.jpg) left top no-repeat,
url(./images/mn2.jpg) right top no-repeat, pink;
linear-gradient指沿着某条直线朝一个方向产生的渐变效果
线性渐变的核心:
渐变方向
颜色
渐变范围
/* 注意:渐变实际上相当于一张图片,因为需要加给background-image才会生效 */
/* 渐变的核心:渐变方向,渐变颜色, 渐变范围 */
/* background-image: linear-gradient( 方向, 颜色 范围, 颜色 范围, 颜色 范围 ); */
线性渐变需要:
1)方向
(1) 使用专有名词 to right, to top, to left, to bottom
(2) 使用角度, 0deg 往上 (记忆时钟), 顺时针旋转
2) 颜色
3.)范围 支持数值或者百分比
/* 最简单的渐变 */
background-image: linear-gradient(red, green);
/* 设定渐变的方向 */
background-image: linear-gradient(to right, red, green);
/* 也可以设定渐变的角度 */
background-image: linear-gradient(45deg, red, green);
/* 设定渐变的范围 */
background-image: linear-gradient(to right, red 20%, green 80%)
/* 每一个区间表示渐变颜色的范围 */
background-image: linear-gradient(to right, red 20%, green 20%)
radial-gradient指从一个中心点开始沿着四周产生渐变效果
径向渐变的核心:
圆的大小
圆心的位置
颜色
需要:
1) 圆的大小, 圆的半径
2)圆心的位置, 坐标 支持专有名词, left top right bottom center
3)颜色 范围
/*1. 最简单的渐变*/
background-image: radial-gradient(red, green);
/*2. 指定圆的半径和圆心*/
background-image: radial-gradient(200px at center, red, green);
/*3. 指定椭圆*/
background-image: radial-gradient(200px 80px at center, red, green);
/*4. 指定范围*/
background-image: radial-gradient(200px at center, green 50%, red 50%);
1)如果两个状态发生改变,没有过渡,效果是瞬间变化的
2)如果加上了过渡,那么这个过程就会有动画的效果。
3)整个状态变化的过程是由浏览器来完成的,我们只需要关注开始状态与结束状态即可。
/*transition-property:设置过渡属性
/*也可以是width,height*/
transition-property:all;
/*transition-duration:设置过渡时间*/
transition-duration:1s;
/*transition-delay:设置过渡延时*/
transition-delay:2s;
/*transition-timing-function:设置过渡的速度*/
/*linear(匀速),ease(缓动,默认值),ease-in,ease-out,ease-in-out(慢—快-慢), steps(10,start/end) end默认值*/
transition-timing-function:linear;
/* 属性 时间 延时 速度 */
transition: width 1s 3s linear;
过渡的注意点:
过渡必须要有两个状态的变化。
过渡可以写在A状态,也可以写在B状态,但是如果写在B状态,那么回来的时候,就没有过渡效果了。
transform: 转换,是CSS3最具颠覆性的几个特性之一,既可以用于2D转换,也可以用于3D转换。
transform:2D转换,元素在平面上实现移动、旋转、缩放、斜切等操作 。
transform: scaleX(0.5);/*让宽度变化*/
transform: scaleY(0.5);/*让高度变化,注意不能写多个transform,不然会覆盖。*/
transform: scale(0.5);/*让宽度和高度同时变化*/
注意:
scale接收的值是倍数,因此没有单位
scale可以是一个值,如果是一个值,不是说仅仅缩放宽度,高度也会等比例的缩放。
可以通过transform-origin设定旋转原点,默认是transform-origin:center center,也可以设置成像素值
transform: translateX(100px);
transform: translateY(100px);
transform: translate(100px, 100px);
transform: translate(50%, 50%);
注意:
translate的值可以是px,也可以是百分比,如果是百分比,那么参照的是自身的宽高。
translate移动的元素并不会影响其他盒子,类似于相对定位。
transform: rotate(360deg);//旋转360度
transform: rotate(-360deg);//逆时针旋转360度
注意:
单位是deg,角度,不是px
正值顺时针转,负值逆时针转
可以通过transition-origin设定旋转原点
skew在实际开发中,是用的最少的一个属性。一般来说,x和y只会倾斜其中的一个
/*在水平方向倾斜30deg*/
transform: skewX(30deg);
/*在垂直方向倾斜30deg*/
transform: skewY(30deg);
/扫光效果/
通过transform-origin可以设置转换的中心原点。
transform-origin: center center;
transform-origin: 40px 40px;
transform: translateX(800px) scale(1.5) rotate(360deg) ;
//1. transform属性只能写一个,如果写了多个会覆盖
//2. transform属性可以连写,但是顺序对效果影响的,因为它会在第一个效果的基础上执行第二个效果,然后执行第三个效果(通常会把rotate放后面,旋转会改变坐标轴)
//3. 如果对transform进行过渡效果的时候,初始状态和结束状态一一对应
/盾牌打散/
Title