CSS 基础
css 引用
<link>- HTML 标签
- ⻚面被加载时,link 会被同时加载
- 权重较高 兼容性好
- js 动态插入
@import- CSS 提供
- 引用的 css 会等到⻚面被加载完再加载
- 权重较低 有兼容性问题
layout 布局历程
block inline
块 内联
inline-block
float
浮动
relative absolute fixed sticky
定位
粘性定位 relative + fixed
flex
弹性盒模型
float 浮动
一开始,浮动的目的只是达成图文环绕效果
1 | <img src="dog.jpg" align="left" /> |
在 img 的标签上面,可以添加 align,用于控制图片浮动的方向,向左 or 向右
后来,这样的特性被添加到 css 中,可以对任何元素使用
1 | <img src="dog.jpg" style="float: left;" /> |
效果和上面添加 align=”left” 是一样的
浮动的特性
- 一行可以显示多个元素
- 支持宽高
- 宽高由内容撑开
- 会按照指定方向进行浮动,遇到父级的边界或者上一个浮动元素的时候停止浮动,浮动元素不会覆盖浮动元素
- 元素浮动后,margin 不再重叠,并阻止子级元素的 margin 传递,
触发BFC
浮动的问题
脱离文档流
为什么文字可以围绕在浮动元素的周围?
文字会认同浮动元素所占有的位置,围绕它进行布局,也就是浮动元素并不会脱离文本流,只会脱离文档流。
clear
- 只会对写在它前面的浮动元素有效
- 清除指定方向的浮动
- 只有给不浮动的块标签添加才有效
1 | .clearfix::after { |
BFC
块级格式化上下文 Block Formatting Context
作用
- 包含浮动元素,解决父级高度塌陷问题
- 阻止 margin 的传递
- 不被浮动元素覆盖
触发条件
- 根元素 html
- float 不为 none
- overflow 不为 visible
- position 为 absolute、fixed
- display 为 inline-block、table-cell、table-caption
- 父元素 flex 布局
position 定位
静态定位 static相对定位 relative- 可以利用 top、bottom、left、right 设置偏移值
- 位移方向参照自己当前位置
- 不设置偏移方向,元素不发生位置变化
- 元素移动后
不脱离文档流原始位置会被保留 提升层级作为定位父级
绝对定位 absolute脱离文档流- 内联标签可以支持宽高
- 块标签不设置宽高的情况下,宽高内容撑开
- 位移方向参照
定位父级的位置,没有定位父级,根据 document 位置 提升层级触发BFC布局环境
固定定位 fixed脱离文档流- 内联标签可以支持宽高
- 块标签不设置宽高的情况下,宽高内容撑开
- 元素定位参照
页面可视区即使滚动条滚动,也不影响可视区 提升层级触发BFC布局环境
z-index 层级
- 只能加给定位元素
- 数值越大层级越高,可以接受负数
- 在同级元素之间比较层级
z-index 不为 auto 创建层叠上下文
层叠上下文
- 根元素 html
- z-index 值不为 auto 的 绝对/相对定位
- position: fixed;
- z-index 值不为 auto 的 flex 项目
- opacity 值小于 1 的元素
- transform 值不为 none 的元素
- mix-blend-mode 值不为 normal 的元素
- filter 值不为 none 的元素
- perspective 值不为 none 的元素
- isolation: isolate;
- will-change 任意属性
- -webkit-overflow-scrolling 值为 touch 的元素
flex 弹性盒模型
flex 容器
flex-direction 确定主轴方向
row row-reverse column column-reverseflex-wrap 项目是否换行
nowrap wrap wrap-reversejustify-content 主轴对齐方式
flex-start flex-end center space-between space-aroundalign-items 交叉轴对齐方式
stretch flex-start flex-end center baselinealign-content 多轴线对齐方式(出现换行)
stretch flex-start flex-end center space-between space-around
flex 项目
order定义项目排列顺序,数值越小,排列越靠前,默认 0,接受负值flex-grow定义项目放大比例,默认 0,即如果存在剩余空间,也不放大flex-shrink定义元素缩放比例,默认 1,即如果可用空间不足,将缩小该项目flex-basis项目占有固定空间,默认 autoalign-self允许 单个项目 和 其他项目 有不一样的 交叉轴对齐方式
复合样式
flex-flowflex-direction 和 flex-wrap 的简写flexflex-grow, flex-shrink, flex-basis 的简写
flex: 1 👉 flex: 1 1 0%
table 表格布局
基本组成
1 | <table> |
默认样式
1 | table { |
清除样式
1 | th { |
标签样式
1 | <table border="1" cellspacing="20" cellpadding="50"></table> |
样式表样式
1 | table { |
使用特性
- 修改其中一个的宽度, 会影响整列的宽度
- 修改其中一个的高度, 会影响整行的高度
样式录
隐藏元素
opacity: 0; 占据空间 可以交互visibility: hidden; 占据空间 不可交互overflow: hidden; 溢出部分隐藏display: none; 不占空间 不可交互z-index: -9999; 层级放到底部transform: scale(0, 0); 占据空间 不可交互position: absolute 定位到可视区外text-indent: -999px;clip-path 裁剪
伪类 伪元素
border 边框
边框宽度border-width 边框样式border-color 边框颜色border-style
border: 宽度 样式 颜色;
1 | div { |
border-radius 圆角
- border-top-left-radius 左上角
- border-top-right-radius 右上角
- border-bottom-right-radius 右下角
- border-bottom-left-radius 左下角
border-radius: 10px 30px 50px 70px / 20px 40px 60px 80px;
左边设置x半径 / 右边设置y半径
1 | div { |
background 背景
- background-color: 背景颜色;
- background-image: url(背景图片地址) / 背景渐变;
- background-repeat: repeat/repeat-x/repeat-y/no-repeat; 背景重复
- background-position: 背景位置;
配合关键词可以更好的指定背景的位置
background-position: right 20px bottom 50px; - background-size: 背景尺寸;
- background-attachment: fixed/scroll; 背景跟随
background: 背景颜色 背景图片 背景位置 / 背景尺寸 背景重复 背景跟随;
多背景图片设置,通过,进行间隔;写在前面的在上,写在后面的在下
1 | div { |
font 字体
- font-weight: lighter; 字体加粗
- normal 400
- bold 700
- border 语义化上比 bold 更强烈
- -webkit-text-stroke: 1px #ffc0cb;
- font-style: italic; 字体倾斜
font-weight / font-style 如果想要去除的话,可以使用
normal - font-size: 字体大小;
谷歌最小显示字体为
12px,小于12px的,按照12px处理
不设置的情况,一般默认为16px的大小 - font-family: Arial, “宋体”; 字体名称
中文常用: 微软雅黑、宋体(中文写在引号内)
英文常用: Arial、Helvetica
首选字体放在前面,备选字体放在后面
英文写在中文的前面,因为英文的字体里面没有中文的,但是因为中文有a o e拼音,所以对于英文也有字体的设计 - line-height: 行高;
如果行高是奇数,文字的下方比上方多
1px
font: 14px / 1 FontAwesome;font: font-style font-weight font-size / line-height font-family;
font-face 自定义字体
1 | @font-face { |
文本设置
color: 文字颜色;
text-align: left/right/center/justify; 文本对齐方式
text-indent: 首行缩进;
1em是当前元素上的文字大小,想缩进两个文字
2em就好啦以图换字1
2
3
4
5
6/* <h1>这是一个字体图片</h1> */
h1 {
background: url(logo.jpg);
text-indent: -999px;
overflow: hidden;
}text-decoration: 文本修饰;
- none 去除
- underline 下划线
- overline 上划线
- line-through 删除线
word-spacing: 词间距;
间隔 = 空格大小 + 词间距
在宋体的情况下,一个空格 = 字体大小的一半,但是不是所有字体都是letter-spacing: 字间距;
word-break: break-all;强制换行(数字和英文默认不换行)white-space: nowrap;强制不换行(中文默认换行)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18@mixin ellipsis {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
@mixin ellipsisMulti($line: 2) {
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: $line;
-webkit-box-orient: vertical;
word-break: break-word;
// word-wrap
/* overflow-wrap: break-word; */
}text-shadow: x y 模糊距离 颜色; 文字阴影
x、y是
必须项,模糊距离(默认为0)和颜色(默认字体颜色)非必须项投影字text-shadow: 5px 10px 2px #000, 10px 20px 2px red;空心字color: white; text-shadow: 0 1px black, 0 -1px black, 1px 0 black, -1px 0 black;发光字text-shadow: 0 0 5px;
box-shadow 盒阴影
box-shadow: inset x y 模糊半径 扩展 颜色;
- inset 内阴影
- x 距离左侧
- y 距离顶部
- 模糊半径
- 扩展: 扩展到一个位置之后,再进行模糊
- 颜色: 盒模型阴影的颜色
无限投影不占空间的边框
1 | box-shadow: 0 0 0 1px #fff inset; |
overflow 溢出
- visible 溢出
- hidden 截断
- scroll 滚动条
- auto 超出则显示滚动条
text-overflow 文本溢出
- clip 裁切
- ellipsis 省略号
filter 滤镜
opacity 透明度filter: opacity(.5);硬件加速
相对 opacity: .5; 效果好 兼容性不好
取值 0 ~ 1 0透明 1正常 默认 1
ie浏览器 filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);- drop-shadow 阴影
filter: drop-shadow(0 0 20px red);
和 box-shadow 是有区别的 box-shadow: 0 0 20px 30px red; - sepia 怀旧
filter: sepia(.5);
取值 0 ~ 1 0正常 1怀旧 默认 0 - saturate 饱和度
filter: saturate(10);
取值 0 ~ 1+ 1正常 0不饱和 1+提高饱和度 默认 1
hsl(h, s, l) h色调 s饱和度 l亮度 - hue-rotate 色相反转
filter: hue-rotate(90deg);
取值 0 ~ 360deg 0正常 360deg 和 0 一致 默认 0deg - inverte 反色
filter: inverte(1);
取值 0 ~ 1 默认 0 - brightness 亮度
filter: brightness(2);
取值 0 ~ 1+ 0黑色 1正常 1+更亮 默认 1 - contrast 对比度
filter: contrast(10);
取值 0 ~ 1+ 0黑色 1正常 1+更低的对比度 默认 1 - grayscale 灰度
filter: grayscale(1);
取值 0 ~ 1 0正常 1灰色 默认 0 blur 模糊filter: blur(4px);👍backdrop-filter: blur(4px);
取值 0 ~ 0+ 0正常 0+模糊 默认 0
ie浏览器 filter:progid:DXImageTransform.Microsoft.Blur();
background-clip 背景裁切
1 | div { |
-webkit-background-clip 文字背景裁切
1 | <style> |
linear-gradient 线性渐变
1 | background-image: linear-gradient(yellow, green, red); |
radial-gradient 径向渐变
1 | background-image: radial-gradient(yellow, green, red); |
transform 2d / 3d 转换
不脱离文档流,不改变文档大小,多值书写时,动画从后往前执行
translate(x, y)位移不会引起
重排重绘
百分比数值,基于自身宽高计算未知宽高居中定位rotate(180deg)旋转- deg 旋转角度
- turn 旋转圈数
- rad 弧度
scale(x, y)缩放skew(x, y)斜切
transform-origin 原点
- 关键词 left、right、top、bottom
- 数值 px
- 默认 center center
perspective 透视
transform: perspective(700px);- 作用于自己,3D 视觉效果,近大远小
- 只给最外层加一次 perspective 就好,不要层层都加,不然效果会很诡异
backface-visibility: hidden;- perspective-origin
preserve-3d
transform-style: preserve-3d;- 给父级去掉平面限制,默认值 flat,作用于子级
- 每个需要子级飘出来的地方都要给 preserve-3d
transition 过渡动画
transition-property过渡执行样式transition-duration过渡持续时间transition-timing-function过渡执行动画- linear 匀速
- ease 快慢快
默认 - ease-in 开始慢
- ease-out 结束慢
- ease-in-out 开始慢、结束慢
- cubic-bezier 贝塞尔曲线
transition-delay过渡延迟时间
transition: property duration timing-function delay;
相关事件
transitionend
animation 关键帧动画
animation-name动画名称animation-duration动画执行时间animation-timing-function动画形式- linear 匀速
- ease 快慢快
默认 - ease-in 开始慢
- ease-out 结束慢
- ease-in-out 开始慢、结束慢
- cubic-bezier 贝塞尔曲线
animation-delay动画延迟时间animation-iteration-count动画执行次数- number
- infinite
aniamtion-direction轮流反向播放动画- normal
- alternate
animation-fill-mode动画停留时的状态- none
- forwards 停留在 100%
- backwards 一开始就在 0% 的位置,不走计算后样式,用在延迟动画的时候设定起始位置
- both 综合 forwards 和 backwards
animation-play-state- paused 暂停动画
- running 执行
animation: name duration timing-function delay iteration-count direction fill-mode;
1 | @keyframes 动画名称 { |
相关事件
animationstartanimationiterationanimationend
direction 文字排版
- direction
- ltr 从左往右
rtl从右往左
- unicode-bidi
bidi-override表示按照direction属性的值重排序- normal 默认值
- embed 作用于 inline 元素,表示对象打开附件的嵌入层
1 | <style> |
mask 透明遮罩背景
- mask-image
默认值为none,值为透明图片,或透明渐变 - mask-repeat
默认值为repeat,可选值与 background-repeat 相同 - mask-position
默认值为0 0,可选值与 background-position 相同 - mask-clip
默认值为border-box,可选值与 background-clip 相同 - mask-origin
默认值为border-box,可选值与 background-origin 相同 - mask-size
默认值为auto,可选值与 background-size 相同
1 | <style> |
border-image 边框背景图
border-image-sourceborder-image-slice
图片剪裁位置,默认单位px,支持百分比值,百分比值大小是相对于边框图片的大小border-image-repeat
设置图像边界是否重复(repeat)、拉伸(stretch)或铺满(round),默认 stretchborder-image-width
边框背景的宽度,默认是 边框宽度,用来限制相应区域背景图的范围length 带 px, em … 单位的尺寸值
percentage 百分比
number 不带单位的数字,表示 border-width 的倍数
auto border-image-width 将会使用 border-image-slice 的值border-image-outset
用于指定在边框外部绘制(扩散),相当于把原来的贴图位置向外延伸,不能为负值
1 | <style> |
scrollbar 滚动条
1 | .hide_scroll_bar { |
瀑布流
1 | .list { |
css 函数
var()
1 | /* 黑白主题 */ |
css 预处理器
- less
- sass
- scss 新版
- sass 老版
- stylus
css hack
简单的说,hack就是只有某些特定的浏览器才能识别这段代码,是一种兼容的方式。
属性前缀
1 | .txt { |
选择器前缀
1 | *html, txt { |
