目录
一、CSS 基础
1、样式表
(1)、常见的样式表
(2)、样式表的权重
2、CSS 选择器
(1)、选择器的权重
(2)、选择器的类型
3、根据 CSS 对元素进行分类
4、盒模型
(1)、盒模型的组成
(2)、定义盒模型
(3)、盒模型的分类
5、文本
(1)、字体颜色
(2)、字体大小
(3)、字体样式
(4)、字体加粗
(5)、倾斜
(6)、英文大小写
(7)、字体设置复合式写法
(8)、首行缩进
(9)、对齐方式
(10)、行高
(11)、下划线、删除线
(12)、字间距、词间距
(13)、文本流控制
(14)、文本溢出
6、列表
(1)、定义列表符号样式
(2)、使用图片作为列表符号
(3)、定义列表符号的位置
(4)、列表设置复合式写法
7、背景
(1)、背景颜色
(2)、背景图片
(3)、背景图片平铺
(4)、背景图片位置
(5)、背景图片的滚动与固定
(6)、背景设置复合式写法
8、浮动
(1)、设置浮动
(2)、清除浮动
9、定位
10、透明
(1)、opacity
(2)、rgba
11、隐藏
(1)、溢出部分隐藏
(2)、 文字隐藏
(3)、隐藏元素,不占空间
(4)、隐藏元素,占有空间
12、圆角
13、自适应
(1)、视口高度自适应
(2)、元素宽度自适应
(3)、元素高度自适应
14、表格
(1)、设置单元格间距
(2)、合并相邻的单元格
(3)、无内容单元格的显示和隐藏
(4)、表格布局
15、兼容性
(1)、过滤器
(2)、IE 6 常见的 CSS 兼容问题
二、CSS3 新特性
1、CSS 3 新增的选择器
2、阴影
(1)、文本阴影——text-shadow
(2)、盒子阴影——box-shadow
3、渐变——background-image
(1)、线性渐变——linear-gradient
(2)、径向渐变——radial-gradient
4、转换——transform
(1)、2D 转换
(2)、3D 转换
5、过渡——transition
(1)、过渡的实现
(2)、多项改变
(3)、过渡的属性
6、分页
7、动画——@keyframes + animation
(1)、创建动画 @keyframes
(2)、将创建的动画绑定到一个指定的选择器上
(3)、用百分比控制动画时长
(4)、动画属性
8、媒体查询——@media
(1)、@media 语法
(2)、媒体查询的应用实例
9、弹性盒子——flex-box
三、浏览器的 内核 与 前缀
①、外部样式表
法一:
法二:
②、内部样式表
③、内联样式表
内联样式的优先级最高。
内部样式和外部样式的由县级及与在上下文中的位置有关,后书写的优先级高。
如果高级的没有覆盖掉低级的,低级的也会起作用。
类型 | 选择器 | 示例 | 示例说明 | CSS | |
---|---|---|---|---|---|
通配符选择器 | * | * | 选择所有元素 | 2 | |
类选择器 | .class | .intro | 选择所有class="intro"的元素 | 1 | |
id 选择器 | #id | #firstname | 选择所有id="firstname"的元素 | 1 | |
元素选择器 | element | p | 选择所有 元素 |
1 | |
群组选择器 | element,element | div,p | 选择所有 元素和 元素 |
1 | |
包含选择器 | element element | div p | 选择 元素内的所有 元素 |
1 | |
层级选择器 | 子选择器 | element>element | div>p | 选择所有父级是 元素的 元素 |
2 |
兄弟选择器 | element+element | div+p | 选择所有紧接着 元素之后的 元素 |
2 | |
通用选择器 | element1~element2 | p~ul | 选择p元素之后的每一个ul元素 | 3 | |
属性选择器 | [attribute] | [target] | 选择所有带有target属性元素 | 2 | |
[attribute=value] | [target=-blank] | 选择所有使用target="-blank"的元素 | 2 | ||
[attribute~=value] | [title~=flower] | 选择标题属性包含单词"flower"的所有元素 | 2 | ||
[attribute|=language] | [lang|=en] | 选择 lang 属性以 en 为开头的所有元素 | 2 | ||
[attribute^=value] | a[src^="https"] | 选择每一个src属性的值以"https"开头的元素 | 3 | ||
[attribute$=value] | a[src$=".pdf"] | 选择每一个src属性的值以".pdf"结尾的元素 | 3 | ||
[attribute*=value] | a[src*="runoob"] | 选择每一个src属性的值包含子字符串"runoob"的元素 | 3 | ||
伪类选择器 | 动态伪类 选择器 |
:link | a:link | 选择所有未访问链接 | 1 |
:visited | a:visited | 选择所有访问过的链接 | 1 | ||
:active | a:active | 选择活动链接 | 1 | ||
:hover | a:hover | 选择鼠标在链接上面时 | 1 | ||
:focus | input:focus | 选择具有焦点的输入元素 | 2 | ||
结构伪类 选择器 |
:root | :root | 选择文档的根元素 | 3 | |
:empty | p:empty | 选择每个没有任何子级的p元素(包括文本节点) | 3 | ||
:first-child | p:first-child | 指定只有当 元素是其父级的第一个子级的样式。(第一个p元素) |
2 | ||
:last-child | p:last-child | 选择每个p元素是其父级的最后一个子级。 | 3 | ||
:first-of-type | p:first-of-type | 选择每个p元素是其父级的第一个p元素 | 3 | ||
:last-of-type | p:last-of-type | 选择每个p元素是其父级的最后一个p元素 | 3 | ||
:only-of-type | p:only-of-type | 选择每个p元素是其父级的唯一p元素 | 3 | ||
:only-child | p:only-child | 选择每个p元素是其父级的唯一子元素 | 3 | ||
:nth-child(n) | p:nth-child(2) | 选择每个p元素是其父级的第二个子元素 | 3 | ||
:nth-last-child(n) | p:nth-last-child(2) | 选择每个p元素的是其父级的第二个子元素,从最后一个子项计数 | 3 | ||
:nth-of-type(n) | p:nth-of-type(2) | 选择每个p元素是其父级的第二个p元素 | 3 | ||
:nth-last-of-type(n) | p:nth-last-of-type(2) | 选择每个p元素的是其父级的第二个p元素,从最后一个子项计数 | 3 | ||
:first-letter | p:first-letter | 选择每一个 元素的第一个字母 |
1 | ||
:first-line | p:first-line | 选择每一个 元素的第一行 |
1 | ||
:before | p:before | 在每个 元素之前插入内容 |
2 | ||
:after | p:after | 在每个 元素之后插入内容 |
2 | ||
语言伪类 选择器 |
:lang(language) | p:lang(it) | 选择一个lang属性的起始值="it"的所有 元素 |
2 | |
目标伪类 选择器 |
:target | #news:target | 选择当前活动的#news元素(包含该锚名称的点击的URL) | 3 | |
元素状态伪类 选择器 |
:enabled | input:enabled | 选择每一个已启用的输入元素 | 3 | |
:disabled | input:disabled | 选择每一个禁用的输入元素 | 3 | ||
:checked | input:checked | 选择每个选中的输入元素 | 3 | ||
:selection | ::selection | 匹配元素中被用户选中或处于高亮状态的部分 | 3 | ||
否定伪类 选择器 |
:not(selector) | :not(p) | 选择每个并非p元素的元素 | 3 | |
表单伪类 选择器 |
:out-of-range | :out-of-range | 匹配值在指定区间之外的input元素 | 3 | |
:in-range | :in-range | 匹配值在指定区间之内的input元素 | 3 | ||
:read-write | :read-write | 用于匹配可读及可写的元素 | 3 | ||
:read-only | :read-only | 用于匹配设置 "readonly"(只读) 属性的元素 | 3 | ||
:optional | :optional | 用于匹配可选的输入元素 | 3 | ||
:required | :required | 用于匹配设置了 "required" 属性的元素 | 3 | ||
:valid | :valid | 用于匹配输入值为合法的元素 | 3 | ||
:invalid | :invalid | 用于匹配输入值为非法的元素 | 3 |
伪类选择器示例:
.list{
&-item{
&-fabulous{
:first-child{
margin-right: 5px;
}
span{
font-size: 16px;
color: #8d8d8d;
}
}
}
&:last-child{
margin: 0 0 10px 0;
}
}
// 解析:
// :first-child 其实就是:.list-item-fabulous :first-child,表示:类名为 .list-item-fabulous 的 第一个任意标签子元素。——父子之间。
// &:last-child 其实就是:.list:last-child,表示:.list 的父元素下,第一个类名为 .list 的元素。——兄弟之间。
详情请戳:https://blog.csdn.net/mChales_Liu/article/details/108021155#4%E3%80%81%E5%86%85%E8%81%94%E5%85%83%E7%B4%A0%E3%80%81%E5%9D%97%E7%BA%A7%E5%85%83%E7%B4%A0%20%E5%92%8C%20%E5%86%85%E8%81%94%E5%9D%97%E7%BA%A7%E5%85%83%E7%B4%A0
CSS 盒模型包括:边距,边框,填充,和实际内容。
box-sizing: content-box / border-box;
①、标准盒模型
元素的内容大小 = width 或 height
元素大小 = 元素的内容大小 + padding + border
元素所影响的区域大小 = 元素大小 + margin
例如:
元素的内容大小 = 50
元素大小 = 50 + 20*2 + 3*2 = 96
元素所影响的区域大小 = 96 + 10*2 = 116
②、怪异盒模型
元素的内容大小 = width 或 height
元素大小 = 元素的内容大小
元素所影响的区域大小 = 元素大小 + margin
例如:
元素的内容大小 = 50
元素大小 = 50
元素所影响的区域大小 = 50 + 10*2 = 70
{color: #colorValue;}
{font-size: integer;}
{font-family: 字体;}
拓展:设置多个字体样式
{font-family: 字体1,字体2,字体3;}
浏览器会先寻找字体1,如果存在就用该字体 ,如果不存在,就接着寻找字体2,以次类推。
{font-weight: bolder / bold / normal / 100~900;}
{font-style: italic / oblique / normal;}
{font-variant: normal / small-caps;}
{text-transform: none / capitalize / uppercase / lowercase;}
例如:
hello world
效果如图:
{font: (可选)style / (可选)variant / (可选)weight / size / family;}
注意:顺序不可变。
{text-indent: value;}
注:
value 可以取负值。
text-indent 只对第一行有作用。
{text-align: left / right / center / justify;}
{line-height: normal / value;}
注:当单行文本的行高等于容器的高度时,可以实现文本在容器中垂直居中的效果。
{text-decoration: none / underline、 overline、 line-through;}
字:{letter-spacing: value;}——中英文
词:{word-spacing: value;}——英文单词
{layout-flow: horizontal / vertical-ideograghic;}
文本溢出,溢出部分裁切掉,并显示省略标记(...),实现步骤如下:
涉及到的文本溢出属性如下:
{text-overflow: clip / ellipsis;}
{overflow: visibility / hidden / scroll / auto / inherit;}
{white-space: normal / pre / nowpre / pre-wrap / pre-line / inherit;}
{list-style-type: disc / circle / square / none;}
{list-style-image: url("图片路径");}
{list-style-position: outside / inside;}
效果:
{list-style: 属性1 属性2 属性3;}
注:各属性没有先后顺序。
{background-color: #colorValue;}
{background-image: url("图片路径");}
注:
背景图片大小等于容器大小时,完全填充显示 。
背景图片大小大于于容器大小时,只显示容器大小部分 。
背景图片大小小于容器大小时,默认平铺。
{background-repeat: no-repeat / repeat / repeat-x / repeat-y;}
{background-position: 横向值 纵向值;}
{background-attachment: scroll / fixed;}
{background: 属性1 属性2 属性3;}
注:各属性没有先后顺序。
{float: none / left / right;}
注:float 浮动,会导致元素脱离文档流。
拓展:导致浮动失效的原因可能如下:
{clear: left / right / both;}
【拓展】:
:after{
content: ".";
clear: both;
display: block;
height: 0;
overflow: hidden;
visibility: hidden;
}
给浮动元素的父容器添加:
{
overflow: hidden;
}
在浮动元素下方添加空的
标签,并给钙元素添加以下样式:{
clear: both;
}
{position: static / absolute / relative / fixed;}
绝对定位、相对定位 和 固定定位 的区别:
包含块:通过 {position: relative;} 形成,用来为绝对定位的元素提供坐标、偏移和显示范围,是绝对定位的参照物。默认 是一个包含块。
{
opacity: value;
filter:alpha(opacity = value*100);
}
{background-color: rgba(R, G, B, A);}
{overflow: hidden;}
{font-size: 0;}
或
{text-indent: -999px;}
{display: none;}
{visibility: hidden;}
{border-radius: vaule;}
html, body{height: 100%;}
块级元素,不用设置 width: 100%;,因为默认就是这个样式。
非块级元素的,可以转为块级元素,或内联块级元素。
①、非浮动元素的高度自适应
不写height属性或者:
{height: auto;}
②、浮动元素的高度自适应
--> overflow隐藏法
{overflow: hidden;}
--> 清除浮动法
在浮动下方添加空div标签,并给该div标签添加下面的样式:
{
clear: both;
height: 0;
overflow: hidden;
}
{border-spacing: value;}
{border-collapse: separate / collapse;}
{empty-cells: show / hide;}
{table-layout: auto / fixed;}
①、“_”
筛选 IE 6 及其以下版本的浏览器。
因为:标准浏览器不能识别加了“_”的属性,但是,IE 6 及其以下的版本可以解析这个属性。
语法:
选择器{_属性: 属性值;}
②、“*”和“+”
过滤 IE 7 及其以下版本的浏览器。
因为:标准浏览器能识别加了“*”和“+”的属性,但是,IE 7 及其以下的版本不能识别这两个属性。
语法:
选择器{*属性: 属性值;}
选择器{+属性: 属性值;}
③、“!important”
过滤 IE 6 及其以下版本的浏览器。
因为:标准浏览器能识别加了“!important”的属性,但是,IE 6 及其以下的版本不能识别这个属性。
语法:
选择器{属性: 属性值 !important;}
加了 “!important” 之后,该样式具有最高优先级。
见 “表:CSS / CSS 3 选择器汇总”。
{text-shadow: h-shadow v-shadow blur color;}
可进行多阴影设置,其间逗号分割即可。
{box-shadow: h-shadow v-shadow blur spread color inset;}
/* x偏移量 | y偏移量 | 阴影颜色 */
box-shadow: 60px -16px teal;
/* x偏移量 | y偏移量 | 阴影模糊半径 | 阴影颜色 */
box-shadow: 10px 5px 5px black;
/* x偏移量 | y偏移量 | 阴影模糊半径 | 阴影扩散半径 | 阴影颜色 */
box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2);
/* 插页(阴影向内) | x偏移量 | y偏移量 | 阴影颜色 */
box-shadow: inset 5em 1em gold;
/* 任意数量的阴影,以逗号分隔 */
box-shadow: 3px 3px red, -1em 0 0.4em olive;
/* 全局关键字 */
box-shadow: inherit;// 继承
box-shadow: initial;// 初始
box-shadow: unset;// 不设置
参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/box-shadow
CSS3 渐变可以让你在两个或多个指定的颜色之间显示平稳的过渡。
CSS3 渐变分两类:
background-image: linear-gradient(direction, color-stop1, color-stop2, ...);
但是,请注意很多浏览器(Chrome、Safari、firefox等)的使用了旧的标准,即 0deg 将创建一个从左到右的渐变,90deg 将创建一个从下到上的渐变。换算公式 90 - x = y 其中 x 为标准角度,y为非标准角度。
例如:
#grad {
background-image: linear-gradient(-90deg, red, yellow);
}
在线性渐变中使用透明度——使用 rgba() 函数来定义颜色节点即可——最后一个参数可以是从 0 到 1 的值——0 表示完全透明,1 表示完全不透明。
#grad {
background-image: linear-gradient(to right, rgba(255,0,0,0), rgba(255,0,0,1));
}
重复的线性渐变:
repeating-linear-gradient() 函数用于重复线性渐变:
#grad {
/* 标准的语法 */
background-image: repeating-linear-gradient(red, yellow 10%, green 20%);
}
径向渐变是由中心向周围扩散。
可以指定渐变的中心、形状(圆形或椭圆形)、大小。
默认情况下,渐变的中心是 center(表示在中心点),渐变的形状是 ellipse(表示椭圆形),渐变的大小是 farthest-corner(表示到最远的角落)。
background-image: radial-gradient(shape size at position, start-color, ..., last-color);
常量 | 描述 |
---|---|
closest-side |
渐变的边缘形状与容器距离渐变中心点最近的一边相切(圆形)或者至少与距离渐变中心点最近的垂直和水平边相切(椭圆)。 |
closest-corner |
渐变的边缘形状与容器距离渐变中心点最近的一个角相交。 |
farthest-side |
与closest-side相反,边缘形状与容器距离渐变中心点最远的一边相切(或最远的垂直和水平边)。 |
farthest-corner |
渐变的边缘形状与容器距离渐变中心点最远的一个角相交。 |
径向渐变 - 颜色节点均匀分布(默认情况下):
#grad {
background-image: radial-gradient(red, yellow, green);
}
径向渐变-颜色节点按比例分布:
#grad {
background-image: radial-gradient(red 5%, yellow 15%, green 60%);
}
重复的径向渐变:
repeating-radial-gradient() 函数用于重复径向渐变:
#grad {
background-image: repeating-radial-gradient(red, yellow 10%, green 15%);
}
2D 转换属性:
属性 | 描述 | CSS |
---|---|---|
transform | 适用于2D或3D转换的元素 | 3 |
transform-origin | 允许您更改转化元素位置 | 3 |
2D 转换方法:
// translate——位移
div{
transform: translate(50px,100px);
-ms-transform: translate(50px,100px); /* IE 9 */
-webkit-transform: translate(50px,100px); /* Safari and Chrome */
}
// rotate——旋转
div{
transform: rotate(30deg);
-ms-transform: rotate(30deg); /* IE 9 */
-webkit-transform: rotate(30deg); /* Safari and Chrome */
}
// scale——缩放
div{
transform: scale(2,3); /* 标准语法 */
-ms-transform:scale(2,3); /* IE 9 */
-webkit-transform: scale(2,3); /* Safari */
}
// skew——倾斜
div{
transform: skew(30deg,20deg);
-ms-transform: skew(30deg,20deg); /* IE 9 */
-webkit-transform: skew(30deg,20deg); /* Safari and Chrome */
}
// matrix——整合
div{
transform:matrix(0.866,0.5,-0.5,0.866,0,0);
-ms-transform:matrix(0.866,0.5,-0.5,0.866,0,0); /* IE 9 */
-webkit-transform:matrix(0.866,0.5,-0.5,0.866,0,0); /* Safari and Chrome */
}
3D 转换属性:
属性 | 描述 | CSS |
---|---|---|
transform | 向元素应用 2D 或 3D 转换。 | 3 |
transform-origin | 允许你改变被转换元素的位置。 | 3 |
transform-style | 规定被嵌套元素如何在 3D 空间中显示。 | 3 |
perspective | 规定 3D 元素的透视效果。 | 3 |
perspective-origin | 规定 3D 元素的底部位置。 | 3 |
backface-visibility | 定义元素在不面对屏幕时是否可见。 | 3 |
3D 转换方法:
// rotateX
div{
transform: rotateX(120deg);
-webkit-transform: rotateX(120deg); /* Safari 与 Chrome */
}
// rotateY
div{
transform: rotateY(130deg);
-webkit-transform: rotateY(130deg); /* Safari 与 Chrome */
}
从一种样式转变到另一种样式的过程叫做 过渡。
要实现这一点,必须定义好两项内容:
例如:
// 定义宽度属性的过渡效果,时长为 2 秒
div{
transition: width 2s;
-webkit-transition: width 2s; /* Safari */
}
注意: 如果未指定的期限,transition将没有任何效果,因为默认值是0。
要添加多个样式的变换效果,添加的属性由逗号分隔:
div{
transition: width 2s, height 2s, transform 2s;
-webkit-transition: width 2s, height 2s, -webkit-transform 2s;
}
属性 | 描述 | CSS |
---|---|---|
transition | 简写属性,用于在一个属性中设置四个过渡属性。 | 3 |
transition-property | 规定应用过渡的 CSS 属性的名称。 | 3 |
transition-duration | 定义过渡效果花费的时间。默认是 0。 | 3 |
transition-timing-function | 规定过渡效果的时间曲线。默认是 "ease"。 | 3 |
transition-delay | 规定过渡效果何时开始。默认是 0。 | 3 |
用 CSS 实现分页。
效果:
@keyframes 规则是创建动画。内指定一个 CSS 样式和动画将逐步从目前的样式更改为新的样式。
@keyframes myfirst{
from {background: red;}
to {background: yellow;}
}
/* Safari 与 Chrome */
@-webkit-keyframes myfirst{
from {background: red;}
to {background: yellow;}
}
当在 @keyframes 创建动画,把它绑定到一个选择器,否则动画不会有任何效果。
指定至少这两个CSS3的动画属性绑定向一个选择器:
// 把 "myfirst" 动画捆绑到 div 元素,时长:5 秒:
div{
animation: myfirst 5s;
-webkit-animation: myfirst 5s; /* Safari 与 Chrome */
}
建议使用百分比来控制动画时长,或用关键词 "from" 和 "to",等同于 0% 和 100%。
0% 是动画的开始,100% 是动画的完成。
// 当动画为 25% 及 50% 时改变背景色,然后当动画 100% 完成时再次改变:
@keyframes myfirst
{
0% {background: red;}
25% {background: yellow;}
50% {background: blue;}
100% {background: green;}
}
@-webkit-keyframes myfirst /* Safari 与 Chrome */
{
0% {background: red;}
25% {background: yellow;}
50% {background: blue;}
100% {background: green;}
}
属性 | 描述 | CSS |
---|---|---|
@keyframes | 规定动画。 | 3 |
animation | 所有动画属性的简写属性。 | 3 |
animation-name | 规定 @keyframes 动画的名称。 | 3 |
animation-duration | 规定动画完成一个周期所花费的秒或毫秒。默认是 0。 | 3 |
animation-timing-function | 规定动画的速度曲线。默认是 "ease"。 | 3 |
animation-fill-mode | 规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式。 | 3 |
animation-delay | 规定动画何时开始。默认是 0。 | 3 |
animation-iteration-count | 规定动画被播放的次数。默认是 1。 | 3 |
animation-direction | 规定动画是否在下一周期逆向地播放。默认是 "normal"。 | 3 |
animation-play-state | 规定动画是否正在运行或暂停。默认是 "running"。 | 3 |
媒体查询可用于检测:
@media not|only mediatype and (expressions) {
CSS 代码...;
}
如果指定的多媒体类型匹配设备类型则查询结果返回 true,文档会在匹配的设备上显示指定样式效果。
除非你使用了 not 或 only 操作符,否则所有的样式会适应在所有设备上显示效果。
not: not是用来排除掉某些特定的设备的,比如:@media not print(非打印设备)。
only: 用来定某种特别的媒体类型。对于支持Media Queries的移动设备来说,如果存在only关键字,移动设备的Web浏览器会忽略only关键字并直接根据后面的表达式应用样式文件。对于不支持Media Queries的设备但能够读取Media Type类型的Web浏览器,遇到only关键字时会忽略这个样式文件。
all: 所有设备。
CSS3 多媒体类型如下:
值 | 描述 |
---|---|
all | 用于所有多媒体类型设备 |
用于打印机 | |
screen | 用于电脑屏幕,平板,智能手机等。 |
speech | 用于屏幕阅读器 |
更多多媒体查询内容可以参考 @media 规则。
弹性盒子(flex-box)是 CSS3 的一种新的布局模式。
请戳这里:https://blog.csdn.net/mChales_Liu/article/details/100729475
浏览器 | 内核 | 前缀 | 实例 | 说明 |
---|---|---|---|---|
IE | trident(三叉戟) | -ms- | -ms-box-shadow | IE 浏览器专属的 CSS 属性 |
老欧朋 | presto(迅速的) | -o- | -o-box-shadow | Opera 浏览器专属的CSS 属性 |
Firefox(火狐) | gecko(壁虎) | -moz- | -moz-box-shadow | 所有基于 Gecko 引擎的浏览器(如:Fiefox)专属的CSS 属性 |
Safari(苹果)/ 老谷歌 | webkit(急速) | -webkit- | -webkit-box-shadow | 所有基于 webkit 引擎的浏览器(如:Chrome/Safari)专属的CSS 属性 |
chrome(新谷歌) / Opera(新欧朋) | blink(眨眼) |