1. css 权重是什么,是什么原理,应用场景?
- 首先,css权重指的是css选择器的优先级,是决定当多个样式规则作用于同一个元素时,哪条规则会最终生效的优先级计算规则,它的核心作用是解决样式冲突问题;
- 原理:权重通过等级比较,而非数值大小决定优先级,计算规则是
-
- 1:等级划分,由高到低 !important > 内联样式 (如 style="color: red")1000 > ID选择器(如 #id)100 > 类/伪类/属性选择器(如 .btn, :hover , [type="text"])10 > 元素/伪元素选择器(如 div ,::before)1 > 通配符 * 0 > 继承样式
-
- 2:比较规则 按等级从左到右逐级比较,当高级别相同时,才比较低级别; 权重不进位(如 1个ID > 1000个类) !important(慎用) > 内联样式 > 其他规则
- 应用场景:
-
- 1:覆盖第三方库样式
-
- 2:组件样式隔离,通过id限定作用域 #app .dropdown-menu { /* 通过ID限定作用域 */ }
-
- 3:响应式覆盖设计 @media (min-width: 768px) { .col-md .title { /* 媒体查询内的样式需要更高权重 */ } }
- 实用技巧
-
- 1:最小权重原则,尽可能用低权重的选择器失效效果;
-
- 2:避免过度嵌套,推荐.parent > .child ,而非 div section ul li a
-
- 3:!important使用规范,仅用于覆盖第三方库的!important样式,优先用提高权重代替
-
- 4:权重会在浏览器开发者工具上显示,chromede Styles面板
2. 什么是伪类,伪元素,有哪些,他们的应用场景是什么?
- 概念:
- css中的伪类和伪元素,是两种特殊的语法,用于在不修改HTML结构的前提下,为元素添加特定状态或创建虚拟元素。
- 一、伪类,描述元素的特定状态,(如交互状态、位置关系、表单状态等)
- 常见伪类:
-
- 1、交互状态:
-
-
- :hover 鼠标悬停
-
-
-
- :active 元素被激活,如点击瞬间
-
-
-
- :focus 元素获取焦点,如输入框选中
-
-
-
- :visited 已访问的链接
-
-
- 2、位置关系:
-
-
- :first-child 元素的第一个子元素
-
-
-
- :nth-child(n) 第n个子元素,支持公式如 2n+1
-
-
-
- :last-child 最后一个子元素
-
-
- 3、表单状态
-
-
- :checked 选中的复选框或单选按钮
-
-
-
- :disabled 禁用的表单元素
-
-
-
- :valid / :invalid 表单验证通过/未通过
-
-
- 4、其他
-
-
- :not(selector) 排除某个选择器
-
-
-
- :target 当前URL的锚点目标元素
-
- 应用场景
- 1.交互反馈 button:hover { background: #007bff; transform: scale(1.05); }
- 2.列表样式控制 ul li:first-child { font-weight: bold; } ul li:nth-child(2n) { background: #f8f9fa; }
- 3.表单美化 input:focus { border-color: #80bdff; box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25); } input:invalid { border-color: #dc3545; }
- 二、伪元素,创建不在HTML中虚拟元素,用于添加装饰内容或特殊样式。
- 常见的伪元素:
-
- ::before 在元素内容前插入虚拟元素
-
- ::after 在元素内容后插入虚拟元素
-
- ::first-line 选中元素的第一行文本
-
- ::first-letter 选中元素的第一个字母
-
- ::selection 用户选中的文本部分
- 应用场景:
-
- 1:装饰性内容 input:focus { border-color: #80bdff; box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25); } input:invalid { border-color: #dc3545; }
-
- 2:清除浮动(经典用法) .clearfix::after { content: ""; display: table; clear: both; }
-
- 3:文本特效 p::first-letter { font-size: 2em; color: #ff4757; } p::first-line { font-weight: bold; }
-
- 4:自定义复选框或单选框: input[type="checkbox"]::before { content: ""; display: inline-block; width: 16px; height: 16px; border: 1px solid #ddd; } input[type="checkbox"]:checked::before { background: #4CAF50; }
- 三、核心区别
- 1: 作用对象,伪类:现有元素的状态;伪元素:创建虚拟元素;
- 2:语法符号,伪类:单冒号;伪元素:双冒号;
- 3:DOM可见性,伪类:不修改DOM;伪元素:不修改DOM,但渲染虚拟内容
- 4:常见用途,伪类:交互状态、位置选择;伪元素:装饰内容、文本特效;
3. css3 选择器有哪些?以及使用场景?
- 1:基础选择器(最常用)
-
- id选择器,#header,选中id='header'的唯一元素,权重100;
-
- 类选择器,.btn,选中所有class='btn'的元素,权重10;
-
- 元素选择器,div,选中所有div元素,权重1;
-
- 通配符,* ,选中所有元素,权重0;
- 基础选择器 - 场景:基础布局和全局重置;
- 2:组合选择器(关系选择器)
-
- 后代选择器,div p,选中div内容所有p
-
- 子元素选择器,ul > li,选中ul的直接子元素li
-
- 相邻兄弟,div + p,选中紧接着div的第一个兄弟元素;
-
- 通用兄弟,div ~ p,选中div后的所有兄弟(同级)元素;
- 组合选择器 - 场景:
-
- /* 导航菜单层级控制 */
-
- nav > ul { display: flex; } /* 直接子元素 */
-
- nav a { color: #fff; } /* 所有后代链接 */
-
- h1 + .subtitle { margin-top: -10px; } /* 标题后的副标题 */
- 3:属性选择器(精准匹配)
-
- [attr],[target],选中包含target属性的元素
-
- [attr='value'],[type='text'],属性值完全等于text
-
- [attr*='value'],[alt*='logo'],属性值包含logo
-
- [attr^='value'],[href^='https'],属性值以https开头
-
- [attr='.png'],属性值以.png结尾
-
- [attr~='value'],[class~='active'],属性值包含独立单词active
- 精准匹配 - 应用场景:
-
- /* 表单元素精准控制 */
-
- input[type="email"] { width: 300px; }
-
- a[href^="http"]::after { content: "↗"; } /* 外部链接标识 */
-
- img[alt~="priority"] { border: 2px solid red; }
- 4:伪类选择器(动态状态)
-
- 交互状态,:hover :active ,鼠标悬停/点击时的状态
-
- 表单状态,:checked :disabled ,选中或禁用表单元素
-
- 结构伪类,:first-child :nth-child(2n),基于位置的元素选择
-
- 其他,:not(.hidden) ,反向选择,排除特定元素
- 动态状态应用场景:
-
- /* 表格斑马纹效果 */
-
- tr:nth-child(odd) { background: #f8f9fa; }
-
- /* 按钮交互反馈 */
-
- button:active { transform: translateY(2px); }
-
- /* 排除隐藏元素 */
-
- div:not(.hidden) { display: block; }
- 5:伪类选择器(虚拟元素)
- -::before,p::before,在元素内容前插入内容
- -::after,.tooltip::after,在元素内容后插入内容
- -first-line,p::first-line,选中文本的第一行
- -first-letter,p::first-letter,选中文本的首字母
- 虚拟元素应用场景:
-
- /* 清除浮动 */
-
- .clearfix::after { content: ""; display: table; clear: both; }
-
- /* 首字母下沉 */
-
- article::first-letter { font-size: 2em; float: left; }
- 6:css3新增选择器(增强功能)
-
- :nth-of-type(n),div:nth-of-type(2),选中第2个div
-
- :empty,div:empty,选中没有子元素的元素
-
- :target,#section1:target,URL锚点对应的元素
-
- :enabled/:disabled, input:enabled 启用或禁用的表单元素
- 增强功能应用场景
-
- /* 空内容提示 */
-
- div:empty::before { content: "暂无数据"; color: #999; }
-
- /* 锚点高亮 */
-
- :target { background: #fff3d4; }
- 7:特殊选择器
-
- @media,@media(max-width:768px),响应式条件判断
-
- :is(),:is(h1,h2,h3),同时匹配多个选择器(css4)
-
- :where,:where(.dark-mode)a,类似:is(),但是权重为0
- 应用场景:
-
- /* 响应式布局 */
-
- @media (max-width: 768px) { .sidebar { display: none; }}
-
- /* 简化多层嵌套 */
-
- :is(header, footer) a { color: blue; }
- 高频使用场景总结:
- 全局样式,推荐 元素选择器、通配符
- 组件复用,推荐 类选择器
- 精准定位,ID选择器、属性选择器
- 交互效果,:hover :active :focus
- 内容修饰,::before ::after
- 列表样式,:nth-child() :first-child
- 表单控制,:checked :disabled :valid