CSS
…
选择器
id选择器:#div-1
class选择器:.div
1 | a |
权重
- !important
- 内联样式
- 相同权重下后写的生效
组合选择
后代选择器(以空格分隔)
子元素选择器(以大于号分隔)
相邻兄弟选择器(以加号分隔)
普通兄弟选择器(以破折号分隔)
分组与嵌套
分组
1 | h1,h2,p |
p{ }: 为所有 p 元素指定一个样式。
.marked{ }: 为所有 class=”marked” 的元素指定一个样式。
.marked p{ }: 为所有 class=”marked” 元素内的 p 元素指定一个样式。
p.marked{ }: 为所有 class=”marked” 的 p 元素指定一个样式。
1 | p |
伪类
1 | selector:pseudo-class {property:value;} |
:checked:input:checked:选择所有选中的表单元素
:disabled:input:disabled:选择所有禁用的表单元素
:empty:p:empty:选择所有没有子元素的p元素
:enabled:input:enabled:选择所有启用的表单元素
:first-of-type:p:first-of-type:选择的每个 p 元素是其父元素的第一个 p 元素
:in-range:input:in-range:选择元素指定范围内的值
:invalid:input:invalid:选择所有无效的元素
:last-child:p:last-child:选择所有p元素的最后一个子元素
:last-of-type:p:last-of-type:选择每个p元素是其母元素的最后一个p元素
:not(selector)::not(p):选择所有p以外的元素
:nth-child(n):p:nth-child(2):选择所有 p 元素的父元素的第二个子元素
:nth-last-child(n):p:nth-last-child(2):选择所有p元素倒数的第二个子元素
:nth-last-of-type(n):p:nth-last-of-type(2):选择所有p元素倒数的第二个为p的子元素
:nth-of-type(n):p:nth-of-type(2):选择所有p元素第二个为p的子元素
:only-of-type:p:only-of-type:选择所有仅有一个子元素为p的元素
:only-child:p:only-child:选择所有仅有一个子元素的p元素
:optional:input:optional:选择没有”required”的元素属性
:out-of-range:input:out-of-range:选择指定范围以外的值的元素属性
:read-only:input:read-only:选择只读属性的元素属性
:read-write:input:read-write:选择没有只读属性的元素属性
:required:input:required:选择有”required”属性指定的元素属性
:root:root:选择文档的根元素
:target:#news:target:选择当前活动#news元素(点击URL包含锚的名字)
:valid:input:valid:选择所有有效值的属性
:link:a:link:选择所有未访问链接
:visited:a:visited:选择所有访问过的链接
:active:a:active:选择正在活动链接
:hover:a:hover:把鼠标放在链接上的状态
:focus:input:focus:选择元素输入后具有焦点
:first-letter:p:first-letter:选择每个
元素的第一个字母
:first-line:p:first-line:选择每个
元素的第一行
:first-child:p:first-child:选择器匹配属于任意元素的第一个子元素的
元素
:before:p:before:在每个
元素之前插入内容
:after:p:after:在每个
元素之后插入内容
:lang(language):p:lang(it):为
元素的lang属性选择一个开始值
伪元素
::link:a::link:选择所有未访问链接
::visited:a::visited:选择所有访问过的链接
::active:a::active:选择正在活动链接
::hover:a::hover:把鼠标放在链接上的状态
::focus:input::focus:选择元素输入后具有焦点
::first-letter:p::first-letter:选择每个<p>
元素的第一个字母
::first-line:p::first-line:选择每个<p>
元素的第一行
::first-child:p::first-child:选择器匹配属于任意元素的第一个子元素的 <p>
元素
::before:p::before:在每个<p>
元素之前插入内容
::after:p::after:在每个<p>
元素之后插入内容
::lang(language):p::lang(it):为<p>
元素的lang属性选择一个开始值
CSS heck
用于兼容 IE
属性
背景
background:简写属性,作用是将背景属性设置在一个声明中。
- 渐变
- linear-gradient(left, red, green)
- linear-gradient(to right, red, green)
- linear-gradient(180deg, red, green)
- 多背景叠加
- linear-gradient(180deg, red 0, green 10%, yello 50%, black 100%), linear-gradient(45deg, red 0, green 10%, yello 50%, black 100%)
- 背景图片
- red url(./test.png)
- red url(data:image/png;base64,…)
background-size: 背景大小,默认是平铺
background-attachment:背景图像是否固定或者随着页面的其余部分滚动。
background-color:设置元素的背景颜色。
background-image:把图像设置为背景。
background-position:设置背景图像的起始位置。
- center top
background-repeat:设置背景图像是否及如何重复。
- norepeat
- repeat-x
文本
文字排版
- 底线,底线:跟行高没关系
- 基线:默认按照此线对齐
color:设置文本颜色
background: 背景颜色
- 尺寸由字体决定,而不是line-box
direction:设置文本方向。
letter-spacing:设置字符间距
line-height:设置行高
- 行高由
line-box
决定 - 文字默认是垂直居中在
line-box
中
text-align:对齐元素中的文本
text-decoration:向文本添加修饰
text-indent:缩进元素中文本的首行
text-shadow:设置文本阴影
text-transform:控制元素中的字母
unicode-bidi:设置或返回文本是否被重写
vertical-align:设置元素的垂直对齐,依据底线,顶线,默认基于基线
- middle
- top
- 10px
white-space:设置元素中空白的处理方式
word-spacing:设置字间距
字体
字体族:
- 衬线字体 serif:宋体
- 非衬线字体 sans-serif:黑体
- 等宽字体 monospace:monaco
- 手写体 cursive
- 花体 fantasy
多字体 Fallback:尝试挨个使用字体
网络字体与自定义字体。
iconfont 字体图标。
属性值
font:在一个声明中设置所有的字体属性
font-family:指定文本的字体系列
- “字体用引号引起” 字体族不用引号
- “Microsoft Yahei” serif
- 一般写不同平台下的字体
- 如果使用自定义字体,需要手动引入
1
2
3
4
5
6
7
8/* 定义字体 */
@font-face {
font-family: "IF";
src: url("./font.ttf");
}
.custom{
font-family: IF;
}
font-size:指定文本的字体大小
font-style:指定文本的字体样式
font-variant:以小型大写字体或者正常字体显示文本。
font-weight:指定字体的粗细。
边框
border:简写属性,用于把针对四个边的属性设置在一个声明。
- 大小 线形 颜色
- 边框背景图
- 边框衔接(三角形)
border-style:用于设置元素所有边框的样式,或者单独地为各边设置边框样式。
- solid
- dashed
- dotted
border-image:边框背景图
- url(…) 30px round; 角上 30px 保留,其余拉伸(重复)
- repeat
- round
border-width:简写属性,用于为元素的所有边框设置宽度,或者单独地为各边边框设置宽度。
border-color:简写属性,设置元素的所有边框中可见部分的颜色,或为 4 个边分别设置颜色。
border-bottom:简写属性,用于把下边框的所有属性设置到一个声明中。
border-bottom-color:设置元素的下边框的颜色。
border-bottom-style:设置元素的下边框的样式。
border-bottom-width:设置元素的下边框的宽度。
滚动与换行
overflow
- visible - 超出
- hidden - 超出隐藏
- scroll - 滚动条显示
- auto - 默认不显示滚动条
滚动条样式
1 | ::-webkit-scrollbar{ |
overflow-wrap:是否换行
- break-word
- normal
- keep-all
word-break:针对多字节文字
white-space:空白处断行
margin
margin:简写属性。在一个声明中设置所有外边距属性。
margin-bottom:设置元素的下外边距。
margin-left:设置元素的左外边距。
margin-right:设置元素的右外边距。
margin-top:设置元素的上外边距。
padding
padding:使用简写属性设置在一个声明中的所有填充属性
padding-bottom:设置元素的底部填充
padding-left:设置元素的左部填充
padding-right:设置元素的右部填充
padding-top:设置元素的顶部填充
尺寸
height:设置元素的高度。
line-height:设置行高。
max-height:设置元素的最大高度。
max-width:设置元素的最大宽度。
min-height:设置元素的最小高度。
min-width:设置元素的最小宽度。
width:设置元素的宽度。
可见与形式
1 | h1.hidden {visibility:hidden;} |
链接
1 | a:link {color:#000000;} /* 未访问链接*/ |
列表
list-style:简写属性。用于把所有用于列表的属性设置于一个声明中
list-style-image:将图象设置为列表项标志。
list-style-position:设置列表中列表项标志的位置。
list-style-type:设置列表项标志的类型。
表格
1 | table, th, td |
定位
bottom:定义了定位元素下外边距边界与其包含块下边界之间的偏移。
auto
length
%
inherit
clip:剪辑一个绝对定位的元素
shape
auto
inherit
cursor:显示光标移动到指定的类型
url
auto
crosshair
default
pointer
move
e-resize
ne-resize
nw-resize
n-resize
se-resize
sw-resize
s-resize
w-resize
text
wait
help
left:定义了定位元素左外边距边界与其包含块左边界之间的偏移。
auto
length
%
inherit
overflow:设置当元素的内容溢出其区域时发生的事情。
auto
hidden
scroll
visible
inherit
overflow-y:指定如何处理顶部/底部边缘的内容溢出元素的内容区域
auto
hidden
scroll
visible
no-display
no-content
overflow-x:指定如何处理右边/左边边缘的内容溢出元素的内容区域
auto
hidden
scroll
visible
no-display
no-content
position:指定元素的定位类型
absolute
fixed
relative
static
inherit
right:定义了定位元素右外边距边界与其包含块右边界之间的偏移。
auto
length
%
inherit
top:定义了一个定位元素的上外边距边界与其包含块上边界之间的偏移。
auto
length
%
inherit
z-index:设置元素的堆叠顺序:
number
auto
inherit
动画
transition
主要用于属性值的平滑过渡。
1 | p{ |
mode
- ease
- linear
- ease-in
- ease-out
- ease-in-out
例如
1 | p{ |
CSS 3D
1 | // 首先设置场景 |
animation
主要用关键帧制作动画。
布局
概览
table 布局
float + margin 布局
inline + block 布局
flex 布局
grid 布局
position
- static 按照文档流布局
- 不可以使用 z-index
- relative 偏移本来的位置
- absolute 相对父元素(也是absolute)的位置
- fixed 相对屏幕
默认方式,流式布局
- 块元素会按垂直方向排列
- 内联元素一般从左向右排列
当使用CSS时,布局就开始离开流式布局了。使用如下方式会离开流式布局:
- display
- float
- position
- 表格布局
- 多列布局
Display 属性
默认所有的元素都有display
属性。例如div
的display
属性默认为block
,span
的display
属性默认为inline
。这个属性的取值有:
- block - 块元素
- inline - 内联元素
- inline-block - 内联元素,允许元素设置宽度和高度,表现为行内的块。
- flex - 块元素,其子元素采用flex布局
- grid - 块元素,其子元素采用grid布局
Position 定位技术
使用position
会让元素脱离文档,固定在页面或屏幕的某一个位置。
- static - default 不脱离文档
- relative - 相对于原来的位置做微调,会在文档流中占用空间
- absolute - 相对于页面定位,脱离文档流
- fixed - 相对于屏幕定位,脱离文档流
- sticky - 相对于屏幕定位,直到到达它本该出现的位置,就恢复原来的定位
同时需要配合如下属性使用
- left - 距离左边界
- top - 距离上边界
- right - 距离右边界
- bottom - 距离下边界
浮动布局
浮动会脱离文档流,但是不会脱离文本流。
对自身的影响
- 形成块
- 尽可能向上,向左,向右靠
对父级的影响
- 从布局上消失
- 造成高度塌陷
清除浮动
1 | img |
或者
1 | .clear-fix::after{ |
当元素设置了float属性时,元素会脱离正常布局流,其他内容会环绕在该元素周围。该元素会浮动到父元素的左右两侧。
float
- left
- right
- none - default 不浮动
- inherit - 继承父元素的float属性
注意,当子元素设置了float属性时,由于子元素脱离了文档流,父元素会无法被子元素撑开。此时,就需要在父元素的最后加入一个元素来撑开父元素。
1 | 使用 clear: both |
overflow
是当内容溢出时的处理策略,还可以对overflow-x
,overflow-y
单独设置。
- visible - default 溢出后的内容出现在父元素框外
- hidden - 溢出部分被剪裁,父元素尺寸自适应
- scroll - 显示滚动条,可以通过滚动条查看溢出部分
- auto - 如果溢出,才显示滚动条
- inherit - 继承父元素的属性
inline block 布局
不用处理浮动,但是要处理间隙。
方式一,设置字体大小为0
方式二,HTML中去除回车,空格之类的空白字符。
Flex
每个盒子可以伸缩,且是并列的。也可以指定宽度。
1 | .container{ |
轴向:
- main 主轴
- cross 交叉轴
属性
- flex-direction 主轴方向
- row
- column
- row-reverse
- flex-wrap 是否可以换行
- justfy-content 主轴上的对齐方式
- flex-start
- flex-end
- center
- space-between
- space-around
- align-items 交叉轴上的对齐
- flex-start
- flex-end
- center
- baseline
- stretch
- align-content 多个轴的对齐方式
子元素
- order 顺序
- flex-grow 放大比例
- flex-shrink 缩小比例
- flex-basis 占据比例
- flex 前三者的缩写
- align-self 自己的对齐方式
当父元素为display: flex
布局时,div
子元素将自动按列排序,也就是排成一行。父元素也可以通过设置属性来改变排列方向,以及子元素的高度是否拉伸到一致。
- flex-direction:
- row - default 横向排列
- column
- row-reverse
- column-reverse
- flex-wrap:
- wrap - 允许换行
- no-wrap
- flex-flow:
- row wrap - 合并写法
- align-items:
- stretch - default 拉伸到一致
同样,子元素也可以设置属性。
- flex:
- 1 - 元素占的比例,此时行会被填满
- 200px - 元素宽度,如果是按行排列
- 1 200px - 设置最小200px的尺寸
Grid 布局
当父元素为display: grid
布局时,div
子元素将自动按顺序被填充到表格中。
- grid-template-columns:
- 250px repeat(3, 1fr) - 第一列 250px,后三列 平分空间
- grid-template-rows:
- 100px 100px - 两行,每行100px
- grid-gap
- 10px - 行或列的间隔
子元素也可以根据需要跨行或跨列
- grid-column:
- 2 - 在第二列显示
- 2 / 4 - [2, 4) (从一开始)第二列开始,第四列之前结束
- grid-row:
- 1 / 3 - [1, 3) (从一开始)第一行开始,第三行之前结束
响应式设计
考虑不同屏幕,鼠标,多点触屏。
设计之前考虑:
- 哪些内容可以隐藏,点击弹出
- 何时折行
- 自适应空间
方法
- rem
- viewport
- media query
1 | <meta name="viewport" content="width=device-width, initial-scale=1.0"/> |
1 | @media (max-width: 640px) { |
移动设备
在移动设备中,1px
不等于设备的物理1像素
,而是根据情况有多种取值可能。我们通常定义浏览器默认的尺寸layout viewport
来表示一个页面的尺寸。对于移动设备访问PC端的页面,通常layout viewport
会大于浏览器的visual viewport
尺寸的,也就是会出现横向滚动条。为了解决移动设备上看到的内容(如字号大小)与PC端差不多,又定义了ideal viewport
,这个尺寸因设备而异。
1 | // layout viewport |
为了让移动设备默认使用ideal viewport
而不是layout viewport
来显示内容,就需要在页面头部加入如下内
1 | <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> |
为了能够让内容在不同的CSS尺寸下使用不同的布局,CSS还提供了设备查询功能,用于响应式布局。
1 | @media screen and (min-width: 600px) { |
依据尺寸动态加载CSS
1 | <link rel="stylesheet" media="screen and (min-width:900px)" href="big.css" type="text/css"/> |
使用Javascript编辑Media Query CSS
1 | // Create a condition that targets viewports at least 768px wide |
单位
绝对单位
- cm - 厘米
- mm - 毫米
- in - 英寸 96px
- px - 像素
- pt - 点
相对单位
- em - 字体大小
- ch - 相对于 0 的宽度
- rem - 根元素的字体大小
- vw - Viewport宽度的 1%
- vh - Viewport高度的 1%
- vmin - Viewport较小尺寸的 1%
- vmax - Viewport较大尺寸的 1%
- % - 相对于父元素