css常见面试题

BFC

块级作用域上下文(里面的元素是独立起来的,不会受外面的元素影响)
例子

  1. 解决margin合并 or 塌陷
    设置了相同的margin只会生效最大值 。相同的话就是合并
    在这里插入图片描述
    让某个子元素添加父元素并使用bfc 格式化块级上下文
    在这里插入图片描述

常见布局

flex伸缩盒子布局(常用)

设置了flex的元素称为容器,里面的项目叫做子项
整个容器分为两条轴 。水平的主轴(main axis)和垂直的交叉轴(cross axis)
在这里插入图片描述

注意。不常用的属性
子项属性:
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。(就是改变子项的顺序)
flex属性其实就是这三个
flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
flex-shrink属性定义了项目的缩小比例
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(人话:初始化占据多少px)

应用

  1. 常用于移动端 or 水平垂直居中
  2. 瀑布流
  3. 轮播图

position定位布局

口诀:父绝子相
这种布局会脱离文档流,也是生成bfc的一个条件。设置相对定位的元素会去找最近的绝对定位元素,以他为基准去实现偏移。没有就是html这个根
应用:

  1. 返回顶部 / 头部栏随着滚动条滚动
  2. 水平垂直居中

浮动布局

也是脱离文档流效果和postion差不多,也是生成bfc的一个条件。有浮动的地方一般需要在他的兄弟加清除浮动的属性,避免浮动带来的影响
应用

  1. 左边不变宽度,右边可变

grid布局(暂时还是兼容性不好的一个布局)

  1. 瀑布流

px rem em vh vm 计量单位的区别

  1. px像素单位,是相对于显示器屏幕分辨率而言的。不会变的。设计稿给的都是这个单位,但是我哦们需要根据项目的适配方案换算单位
  2. rem 一个相对单位。也是响应式布局的灵魂。1rem = 16px。宽高设置rem也是按照html来动态计算,只适用在html这个元素上
  3. em 也是相对单位它基准点为父节点字体的大小,子元素设置rm是根据他的父元素来计算的。宽高设置rem也是按照html来动态计算
  4. vh vm 更具屏幕的视口。
    在这里插入图片描述

重绘、重排(回流)

转载的地方

  1. 重排我们可以理解为重新排列布局
    怎么触发重排呢?
    简单来说,就是JS动态控制DOM结构的时候,且有DOM结点的几何信息元素发生改变时,才会执行回流。
    window大小被修改
    增加删除DOM结构
    元素的尺寸发生变化
    offsetWidth 和 offsetHeight ,offset… ,clientWidth,client…,scrollTop,scroll…
  2. 重绘这个词我们可以更加轻易地去理解它,即重新执行渲染,

所有导致元素非几何信息发生变化的操作都会触发重绘。

注意: 回流一定会重绘,但是重绘不一定会回流!

盒子模型

在css里面每个元素都是一个盒子,盒子由 margin+ border + padding + content 组成

标准模型(默认)

width = content
width设置了多少content就是多少,不会将width分给padding和border
在这里插入图片描述

ie模型

width = content + padding + border
width设置的值会被他们三个平分
在这里插入图片描述

常见的块级元素和行级元素

块级(可以直接设置宽高
div、p、h1~h6、ul、ol、dl、li、dd、table、hr、blockquote、address、table、menu、pre,HTML5新增的header、section、aside、footer等

行级 (不行直接设置宽高)
p span h1 a

语义化标签

header aside main footer table picture

link 和import 的区别

  1. link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。(加载更多类型)
  2. link引用CSS时,在页面载入时同时加载**(不阻塞DOM渲染);@import需要页面网页完全载入以后加载(阻止)**。
  3. link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持
  4. link支持使用Javascript控制DOM去改变样式;而@import不支持。

伪元素和伪类的区别和作用?

伪元素:在内容元素的前后插入额外的元素或样式,但是这些元素实际上并不在文档中生成。它们只在外部显示可见,但不会在文档的源代码中找到它们,因此,称为“伪”元素。例如

p::before {content:"第一章:";}
p::after {content:"Hot!";}
p::first-line {background:red;}
p::first-letter {font-size:30px;}

伪类:将特殊的效果添加到特定选择器上。它是已有元素上添加类别的,不会产生新的元素。例如

a:hover {color: #FF00FF}
p:first-child {color: red}

CSS 优化和提高性能的方法有哪些?

  1. 加载性能:
    (1)css压缩:将写好的css进行打包压缩,可以减小文件体积。
    (2)css单一样式:当需要下边距和左边距的时候,很多时候会选择使用 margin:top 0 bottom 0;但margin-bottom:bottom;margin-left:left;执行效率会更高。
    (3)减少使用@import,建议使用link,因为后者在页面加载时一起加载,前者是等待页面加载完成之后再进行加载。
  2. 选择器性能
    (1)关键选择器(key selector)。选择器的最后面的部分为关键选择器(即用来匹配目标元素的部分)。CSS选择符是从右到左进行匹配的。当使用后代选择器的时候,浏览器会遍历所有子元素来确定是否是指定的元素等等;
    (2)如果规则拥有ID选择器作为其关键选择器,则不要为规则增加标签。过滤掉无关的规则(这样样式系统就不会浪费时间去匹配它们了)。
    (3)避免使用通配规则,如*{}计算次数惊人,只对需要用到的元素进行选择。
    (4)尽量少的去对标签进行选择,而是用class。
    (5)尽量少的去使用后代选择器,降低选择器的权重值。后代选择器的开销是最高的,尽量将选择器的深度降到最低,最高不要超过三层,更多的使用类来关联每一个标签元素。
    (6)了解哪些属性是可以通过继承而来的,然后避免对这些属性重复指定规则。
  3. 渲染性能:
    (1)慎重使用高性能属性:浮动、定位。
    (2)尽量减少页面重排、重绘。
    (3)去除空规则:{}。空规则的产生原因一般来说是为了预留样式。去除这些空规则无疑能减少css文档体积。
    (4)属性值为0时,不加单位。
    (5)属性值为浮动小数0.**,可以省略小数点之前的0。
    (6)标准化各种浏览器前缀:带浏览器前缀的在前。标准属性在后。
    (7)不使用@import前缀,它会影响css的加载速度。
    (8)选择器优化嵌套,尽量避免层级过深。
    (9)css雪碧图,同一页面相近部分的小图标,方便使用,减少页面的请求次数,但是同时图片本身会变大,使用时,优劣考虑清楚,再使用。
    (10)正确使用display的属性,由于display的作用,某些样式组合会无效,徒增样式体积的同时也影响解析性能。
    (11)不滥用web字体。对于中文网站来说WebFonts可能很陌生,国外却很流行。web fonts通常体积庞大,而且一些浏览器在下载web fonts时会阻塞页面渲染损伤性能。
    可维护性、健壮性:
    (1)将具有相同属性的样式抽离出来,整合并通过class在页面中进行使用,提高css的可维护性。
    (2)样式与内容分离:将css代码定义到外部css中。
<think>好的,我现在要帮用户整理前端开发CSS见的面试题。首先,我需要回忆一下自己学过的CSS知识,以及见的面试问题。可能用户正在准备面试,需要全面且有条理的内容。我需要分门别类,把问题组织得清晰易懂,方便用户复习。 首先,见的CSS试题包括盒模型、布局方式、选择器、优先级、响应式设计、Flexbox和Grid、BFC、居中方法、动画、预处理器等。我应该每个类别列举几个典型问题,并给出简要的解答,但用户可能不需要太详细的解释,而是需要关键点提示,方便他们回忆或深入查找资料。 比如盒模型方面,可能会问标准盒模型和IE盒模型的区别。这需要解释content-box和border-box的区别。然后布局方面,传统布局、Flexbox和Grid的区别及应用场景。还有清除浮动的方法,这也是经典问题,可能需要提到clearfix技巧或者使用overflow属性。 选择器部分,见的有类选择器、ID选择器、属性选择器等,以及它们的优先级计算,比如内联样式、ID、类、元素选择器的权重。响应式设计可能会问媒体查询的使用,或者移动端适配的方案,比如viewport设置或者rem布局。 Flexbox和Grid是现在流行的布局方式,需要解释容器和项目的属性,比如justify-content、align-items,以及Grid的网格布局。BFC(块级格式化上下文)的问题通会问如何触发BFC以及它的作用,比如清除浮动、防止外边距重叠等。 居中问题,水平垂直居中的多种实现方式,比如Flexbox、绝对定位+transform、Grid等。动画方面,关键帧动画和过渡的区别,如何实现渐变效果。预处理器如Sass/Less的区别,变量、嵌套、混入等功能的用法。 另外,还有一些其他问题,比如CSS3新特性(阴影、渐变、过渡等),伪类和伪元素的区别,CSS优化方法(如减少重排重绘、压缩代码),CSS模块化的方案(如CSS Modules、BEM命名规范)等。 我需要确保每个问题都是面试中高频出现的,同时答案要准确,避免错误。比如在盒模型中,标准盒模型的宽度是content,而IE盒模型包括border和padding。在优先级计算时,内联样式权重大于ID选择器。BFC的触发方式包括overflow: hidden、float不为none、display: inline-block等。 可能还需要注意一些容易混淆的概念,比如Flexbox的一维布局和Grid的二维布局区别,伪类(如:hover)和伪元素(如::before)的不同用法。在响应式设计中,媒体查询的断点设置,以及移动端适配的rem和vw/vh单位的应用。 另外,用户可能想知道实际应用中的问题,比如如何解决样式冲突、CSS性能优化技巧、如何实现特定布局(圣杯布局、双飞翼布局)等。虽然这些可能部分属于布局问题,但可以作为扩展内容。 最后,我需要组织这些内容,分点列出问题和答案,结构清晰,便于用户快速浏览和记忆。可能需要使用标题和子标题来划分不同的主题,但根据用户的要求,回答应使用中文,并且按照用户给出的系统级指令,数学公式需要用正确格式,但CSS问题中可能较少涉及数学公式,不过如果有的话需要正确应用LaTeX。 检查是否有遗漏的重要主题,比如CSS Sprites雪碧图的作用(减少HTTP请求),CSS变量(自定义属性)的使用,以及现代CSS特性如CSS Houdini的概念。另外,可能会有关于CSS框架的问题,如Bootstrap的使用经验,但可能属于加分项而非基础。 总结下来,我需要整理大约10个左右的见主题,每个主题下列出1-2个典型问题,并给出简明扼要的答案要点。确保覆盖全面,重点突出,语言简洁准确,符合面试准备的需求。</think>以下是前端开发中见的CSS试题及核心知识点整理,按主题分类便于系统复习: --- ### 一、盒模型 **问题1:标准盒模型与IE盒模型区别?** - **标准盒模型** (`box-sizing: content-box`): `width/height` = 内容区域(content)的尺寸。 - **IE盒模型** (`box-sizing: border-box`): `width/height` = 内容 + 内边距(padding) + 边框(border)的总和。 --- ### 二、布局方式 **问题2:如何实现元素水平垂直居中?** - **Flexbox**: ```css .parent { display: flex; justify-content: center; align-items: center; } ``` - **绝对定位 + Transform**: ```css .child { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); } ``` --- ### 三、选择器与优先级 **问题3CSS选择器优先级规则?** 优先级由高到低: 1. `!important` 2. 内联样式(如`style="color: red;"`) 3. ID选择器(`#id`) 4. 类/伪类/属性选择器(`.class`, `:hover`, `[type="text"]`) 5. 元素/伪元素选择器(`div`, `::before`) 6. 通配符(`*`) --- ### 四、浮动与清除浮动 **问题4:如何清除浮动?** - **Clearfix Hack**: ```css .clearfix::after { content: ""; display: block; clear: both; } ``` - **父元素设置** `overflow: auto` 或 `overflow: hidden`。 --- ### 五、Flexbox与Grid **问题5:Flexbox与CSS Grid的区别?** - **Flexbox**: 一维布局(行或列),适合组件内元素排列。 - **Grid**: 二维布局(行+列),适合整体页面结构。 --- ### 六、BFC(块级格式化上下文) **问题6:BFC的作用及触发方式?** - **作用**: 隔离外部元素,避免外边距重叠、清除浮动。 - **触发方式**: `overflow: hidden`、`float: left/right`、`display: inline-block`、`position: absolute/fixed`。 --- ### 七、响应式设计 **问题7:如何实现移动端适配?** - **Viewport设置**: ```html <meta name="viewport" content="width=device-width, initial-scale=1"> ``` - **媒体查询(Media Queries)**: ```css @media (max-width: 768px) { ... } ``` - **REM布局**: 基于根元素字体大小(如`1rem = 16px`)动态调整。 --- ### 八、动画与过渡 **问题8:CSS动画与过渡的区别?** - **过渡(Transition)**: 属性变化时平滑过渡(如`:hover`触发)。 - **动画(Animation)**: 通过`@keyframes`定义复杂动画,可循环或延迟执行。 --- ### 九、预处理器 **问题9:Sass/Less的优点?** - 支持变量、嵌套、混入(Mixin)、函数等特性。 - 模块化开发,提升代码复用性。 --- ### 十、性能优化 **问题10:如何减少CSS重排(Reflow)?** - 避免频繁操作DOM样式。 - 使用`transform`和`opacity`实现动画(触发GPU加速)。 - 将复杂元素设置为`position: absolute/fixed`,脱离文档流。 --- ### 高频扩展问题 1. **伪类 vs 伪元素**: - 伪类(如`:hover`)表示元素状态。 - 伪元素(如`::before`)创建虚拟元素。 2. **CSS Sprites**: 合并小图标减少HTTP请求。 3. **CSS变量**: 使用`--var-name`定义,`var(--var-name)`调用。 --- 掌握以上内容可覆盖80%的CSS面试考点,建议结合实际代码练习加深理解!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值