CSS知识点梳理
种类:行内样式 内联样式 外部样式
样式表优先级:行内样式 >内联样式 = 外部样式
选择器
通配符选择器
用来清除HTML的默认样式
* {
color: #999;
}
元素选择器
对某种元素统一设置样式,不能差异化设置样式
类选择器
选中页面上所有类名为xxx的元素
ID选择器
根据元素的id值,精准地选中某个元素,id不能重复
并集选择器
类名1,类名2,类名3
交集选择器
标签+类名 两个类名组合
css与html元素间的关系
- 父元素与子元素: 子元素是父元素直接包裹的元素
- 后代元素
- 兄弟元素
后代选择器
选中父元素里面的所有符合要求的元素 ul li
子代选择器
选中父元素直接包裹的元素
div>a
兄弟选择器
div+p 与div紧紧相邻的元素 div~p div的所有兄弟p元素
属性选择器
[title]
选中具有title属性的元素 input[type=’checkbox‘]
选中input元素中type=checkbox的元素 title=’’ title^=’’ title$=’’ title*=’’
伪类选择器
像类,但不是类,对元素特殊状态的描述
a标签的特殊状态 选中没有访问过的 a:link 选中访问过的元素 a:visited
动态伪类a:linka:visiteda:hover悬浮状态
a:active`
input:facus
获取属于输入状态的元素
结构伪类:first-child:last-child:nth-child(an+b)
按类型选择 :first-of-type:last-of-type:nth-of-type(an+b)
div>p:nth-last-child(2)
选中div中倒数第n个儿子py元素 按照所有兄弟 div>p:nth-last-of-type(2)
选中div中倒数第n个的儿子p元素 按照所有同类型的兄弟 span:only-child
选中的是没有兄弟span元素 span:only-of-type
选中的是没有同类型兄弟的span元素 :root
选中的是根元素 div:empty
选中的是没有内容的div元素 空格也算内容
否定伪类:not()
选中排除括号里面条件的元素
UI伪类:checked
获取被勾选的元素 :disabled
选中被禁用的元素 :enabled
目标伪类:target
选中锚点所指向的元素
语言伪类 :lang()
根据所指定的语言选中元素 看lang属性的值
伪元素选择器
VSCode操作:输入lorem60 生成一串60个词的文本
对元素中的一种特殊位置
div::first-letter
选中div中的第一个字符 div::first-line
选中div中第一行文字 div::selection
选中的是被鼠标选择的文字 input::placeholder
选中input中的提示文字
p::before
p元素的内容之前 随后创建一个子元素 p::after
p元素的内容之前 随后创建一个子元素
选择器优先级
通过不同的选择器,选中相同的元素,并且为相同样式设置不同的值时,就发生了样式的冲突,到底用哪个样式,就要看优先级了
(行内)> ID选择器 > 类选择器 > 元素选择器 > 通配选择器
权重 a: ID选择器的个数 b: 类、伪类、属性选择器个数 c: 元素、伪元素的个数
像素和颜色
像素
cm mm px 更精确的单位 是个相对单位
颜色
- 名称:red、blue…英文名
- RGB:
- rgb(100%,0,0) rgb(255,0,0)
- rgba(255,0,0,0.5) 加透明度
- 值越大 颜色越浅
- HEX 16进制的RGB
#ff0000
- HEXA IE不支持
#ff0000
- HEXA IE不支持
- HSL:hsl(色相,饱和度,亮度) hsla(色相,饱和度,亮度,透明度)
字体
浏览器默认字号和最小字号 16px 12px 可以通过body给页面设置统一字号
字体族
font-family 可以指定系统内已经安装的字体 名称最好用英文 兼容性更好 可以设置多个字体,按照从左到右的顺序依次查找,找到就用,没有找到就用后面的,且通常都在最后写上serif(衬线字体)或sans-serif (非衬线字体)
font-style 风格
font-weight 粗细
复合属性 font: 加粗 斜体 大小 字体族
文本颜色 color设定
文本修饰 文本间距 letter-spacing: 20px 字母间距 单词间距 word-spacing 对中文不起作用
文本修饰 text-decoration:underline wary red; 删除线 下划线 上划线
文本缩进 text-indent: fontSize*2
文本对齐 text-align: left/center/right
font-size
由于字体设计原因,文字最终呈现的大小不一定与font-size一致,可能大,可能小
通常情况下,文字相对字体设计框并不是垂直居中的,通常都靠下一些
line-height 行高
应用场景:
- 单行文本 垂直居中
- 多行文本 调整行间距
vertical-align
用于指定同一行元素之间,或表格单元格内文字的垂直对齐方式 在div里面不能直接控制元素里面的文字垂直居中(不能控制块元素)
CSS三大特性
层叠性
如果发生了样式冲突,那就会根据一定的规则,进行样式的层叠
继承性
元素会自动拥有其父元素、或其祖先元素上所设置的样式 优先继承离得近的
background-color
不能继承
优先级
!important > 行内 > id选择器 > 类选择器 > 元素选择器 > * > 继承的样式 并集选择器的每一部分权重是分开计算的
列表相关属性
list-style
边框相关属性
表格的独有属性
背景
水平方向(left,center,right),垂直方向(top,center,bottom)
和鼠标相关的属性
cursor 鼠标的图标可以自定义:URL ()
盒模型
常用长度单位
em:第二种长度单位,相对于当前元素 或其父元素的font-size的倍数 rem:相对于根元素的font-size的倍数 %:相对于父元素的百分比
元素的显示模式
- 块元素:独占一行,默认宽度撑满整个父元素,高度由内容撑开
- 行内元素:不独占一行,一行内容满了之后才会换行,宽高都由内容撑开,CSS不直接设定宽高
- 行内块元素:inline-block
修改元素显示模式 display
盒模型
盒模型组成 :content padding border margin (从内到外)
背景颜色会填充padding和border区
盒子总大小content + padding +border Margin不影响盒子大小,只影响位置
content
padding
行内元素设置上下内边距,不是很理想 padding不可以为负值
border
margin
应用场景:改变盒子的位置,相对于父元素 行内元素 设置上下边距是无效的 margin可以为负值
margin的塌陷问题
现象:在父元素里面,给第一个子元素设置margin-top或者给最后一个子元素设置margin-boottom,会作用到父元素身上
解决办法一:给父容器加边框或
padding
(会影响容器的整体大小,不推荐) 解决办法二:overflow:hidden;
margin的合并问题
两个兄弟元素,上下排列,给第一个元素设置margin-bottom,给第二个元素设置margin-top,这两个元素的间距 会被合并
处理内容的溢出
overflow: auto
隐藏元素的两种方式
- display:none 隐藏后不占位
- visibity:hidden 隐藏后仍占位
样式的继承
有的样式会被继承,元素如果本身设置了样式,就使用本身设置的样式;但如果本身没有设置样式,就会从父元素开始一级一级继承(继承就近原则)
会继承的css属性:字体属性、文本属性(除vetical-align)、文字颜色等
不会继承的属性:边框、背景、内边距、外边距、宽高、溢出方式等
能继承的属性,都是不影响布局的
元素的默认样式
一般的元素都存在默认样式,比如body、h1、p、a….. 重置某个元素的默认样式,要先选中这个元素
元素之间的空白问题
存在于行内元素、行内块元素 给父元素font-size:0
行内块的幽灵空白问题 行内块元素与文本的基线对齐,而文本的基线与文本最底层之间是有一定距离的 解决方案
- 给行内块设置vertical,值不为baseline即可
- 若父元素只有一张图片,设置图片为display:block
- 给父元素设置font-size: 0 如果该行内块内部还有文本,需要单独设置font-size
浮动
定位
- 固定定位
- 相对定位
- 绝对定位
- 固定定位
- 定位的层级
- 定位的特殊应用
布局
假设设计稿总宽度1920,版心的宽度就在960-1200 版心是内容区的最大宽度 版心的存在意义是让页面上所有的内容都可以水平居中 是页面的基础设置
适用于导航条、头部等布局
布局小技巧
- 行内元素、行内块元素、可以被父元素当作文本处理
- 如何让子元素,在父亲中水平居中
- 若子元素为块元素,给父元素加:
margin: 0 auto
- 若子元素为行内元素、行内块元素,给父元素加text-align: center
- 若子元素为块元素,给父元素加:
- 如何让子元素在父亲中垂直居中
- 若子元素为块元素,给子元素加margin-top,值为:(父元素content - 子元素盒子总高)/ 2
- 若子元素为行内元素、行内块元素 让父元素的height=line-height,每个子元素都加上vertical-align:middle 补充:若想绝对垂直居中,父元素的font-size设置为0
CSS3新特性
CSS3新增: 长度单位、盒子属性、背景属性、边框属性、文本属性、渐变、web字体/字体图标、2D/3D变换、过渡、动画、多列布局、伸缩盒模型、响应式布局