2024 css 面试题带答案,万字总结

一、CSS 基础问题

1. 什么是 CSS?

CSS(Cascading Style Sheets,层叠样式表)是一种用于描述网页展示样式的语言。主要作用是:控制网页的外观和布局。

2. CSS 主要作用有哪些?

设置样式,布局和定位,动画效果,响应式设计等;

3. CSS 怎么添加到网页中?
  • 行内样式:p style="font-size: 12px; ">行内样式:</p>
  • 嵌入样式:<style type="text/css"> h1 {font-size:16px;} </style>
  • 链接样式:link href="styles.css" rel="stylesheet" type="text/css" />
  • @import 指令: @import url(css/styles2.css)
4. CSS 的三大特性

css 三大特性:层叠、继承、优先级。

  • 层叠性:行内、嵌入、外链等应用到某个元素时,按照特定的规则叠加确定最终使用哪个值。
  • 继承性:某些样式可以被子元素继承,简化样式、提高代码重用性,优化代码量。
  • 优先级:!important 最大,来源优先级(行内-嵌入-外链),选择器优先级(id>class>element)
5. 你是怎么判断元素使用哪个样式?

根据层叠性: css 样式来源,层叠规则,计算特指度。(下面 6、7、8)

6. CSS 样式来源?
  • 浏览器默认样式表:
  • 用户默认样式表:一个作用是修正浏览器默认样式表。
  • 外链样式表
  • 嵌入样式
  • 行内样式
7. CSS 层叠规则
  • 层叠规则一:根据 css 样式来源,找到每个元素和属性的所有声明。
  • 层叠规则二:按照顺序和权重排序。浏览器依次检查 5 个来源,并设定匹配的属性。如果匹配的属性在下一个来源也有定义,则更新该属性。最终属性被设定成什么值,就用什么值来显示。
  • 层叠规则三:按特指度排序。(看 8)
  • 层叠规则四:顺序决定权重。特指度也相同,则位置最靠下(或后声明)的规则胜出。

简单点说,先找到所有声明,合并、覆盖,算特指度,特指度一样,后写胜出。

8. CSS 计算特指度

引用《css 权威指南》

“ICE”公式计算:

  1. 选择符中有一个 ID,就在 I 的位置上加 1;
  2. 选择符中有一个类,就在 C 的位置上加 1;
  3. 选择符中有一个元素(标签)名,就在 E 的位置上加 1;
  4. 得到一个三位数。
P                                    0-0-1特指度=1
p.largetext                          0-1-1特指度=11
p#largetext                          1-0-1特指度=101
body p#largetext                     1-0-2特指度=102
body p#largetext ul.mylist           1-1-3特指度=113
body p#largetext ul.mylist li        1-1-4特指度=114

查理版简单层叠要点三条规则:

  • 规则一:包含 ID 的选择符胜过包含类的选择符,包含类的选择符胜过包含标签名的选择符。
  • 规则二:如果几个不同来源都为同一个标签的同一个属性定义了样式,行内样式胜过嵌入样式,嵌入样式胜过链接样式。在链接的样式表中,具有相同特指度的样式,后声明的胜过先声明的。
  • 规则三:设定的样式胜过继承的样式,此时不用考虑特指度(即显式设定优先)。
9. CSS 选择器有哪些类型,以及优先级?
  • 1、!important:不建议别人使用。
  • 2、ID 选择器:如 #idName
  • 3、类选择器:如 .className
  • 4、元素选择器:如 p, div 等;
  • 5、属性选择器:如 [type="text"]
  • 伪类:一个冒号(:)表示伪类,如 :hover:first-child:nth-child(n) 等;
  • 伪元素:两个冒号(::)表示 CSS3 新增的伪元素,如 p::first-letter)。
10 . CSS 元素哪些可以继承,哪些不行?
  • 可继承:主要文本相关属性,如文字颜色与大小(colorfont-size等),列表样式(list-style),可见性(visibility);
  • 不可继承:大多数 CSS 属性是不可继承的,比如宽高、定位,背景相关属性(background
  • 控制继承:强制继承父元素(color: inherit;),强制设置默认值(color: initial;),父元素有就继承,没有使用默认值(color: unset;)
11.常用的布局方案?
  • table:数据表格,邮件等;
  • 传统布局(float):盒模型、清除浮动、居中、BFC 等问题;
  • Flexbox:一维布局,居中、响应式等问题;
  • grid:二维布局
  • position 布局:relative 相对谁,居中问题。
  • 响应式布局:媒体查询(@media (min-width: 600px)),em、rem、vw、vh等问题;
11.说说什么是 CSS 盒子模型?

CSS 盒子模型包含内容区域(Content)、内边距(padding)、边框(border)和外边距(margin)。盒子模型的总宽度和高度的计算方式取决于使用的盒子模型的类型box-sizing: content-box|border-box|inherit;。外边距由较宽的外边距决定两个元素最终离多远

   +-----------------------+
   |        Margin         |
   |   +---------------+   |
   |   |    Border     |   |
   |   |   +-------+   |   |
   |   |   | Padding |   |
   |   |   |  +---+  |   |
   |   |   |  |   |  |   |  Content
   |   |   |  +---+  |   |
   |   |   +-------+   |
   |   +---------------+   |
   +-----------------------+
  • content-box: 默认值。总宽度 = width + padding-left + padding-right + border-left + border-right;
  • border-box :总宽度 = width
  • inherit 指定 box-sizing 属性的值,应该从父元素继承
12.怎么浮动,浮动有什么问题,怎么清除浮动?

浮动属性允许元素向左(left)或右(right)浮动,使其在其包含块的文本流周围。一般来说,浮动的元素都会被从其原本的流位置移除。

浮动问题:

  • 脱离文档流,导致布局问题。
  • 父容器高度塌陷(即父元素无法包围浮动的子元素)。

清除浮动

  • 方法一:为父元素添加 overflow:hidden,BFC
  • 方法二:浮动后面添加<div style="clear: both;"></div>
  • 方法三:伪元素清除浮动
.container::after {
  content: '';
  display: block;
  clear: both;
}
12. 什么是 BFC

BFC 全称:Block Formatting Context, 名为 “块级格式化上下文”。作用有 3 条

  • 包含内部浮动:解决 float 引起的父容器高度塌陷问题;
  • 排除外部浮动: 解决重叠问题,设置自适应两栏布局。
  • 阻止外边距重叠:避免margin重叠问题.

怎样触发 BFC

  • overflow: hidden
  • display: inline-block
  • position: absolute
  • position: fixed
  • display: table-cell
  • display: flex
13. 什么是 Flexbox

Flexbox(Flexible Box Layout)一维布局。只需将容器的 display 属性设置为 flexinline-flex
13-1 flex 容器的主要属性:

  • flex-direction: 定义主轴的方向(row, row-reverse, column, column-reverse)。
  • flex-wrap: 控制子元素是否换行(nowrap, wrap, wrap-reverse)。
  • flex-flow: 是 flex-directionflex-wrap 的简写。
  • justify-content: 在主轴上对齐子元素(flex-start, flex-end, center, space-between, space-around)。
  • align-items: 在交叉轴上对齐子元素(flex-start, flex-end, center, baseline, stretch)。
  • align-content: 在多行上对齐(flex-start, flex-end, center, space-between, space-around, stretch)。

13-2 子元素的主要属性有哪些?

  • flex-grow: 定义项目的增长比例(默认为 0)。
  • flex-shrink: 定义项目的缩小比例(默认为 1)。
  • flex-basis: 定义项目在分配多余空间之前,占据的主轴空间(默认为 auto)。
  • flex: 是 flex-grow, flex-shrink, 和 flex-basis 的简写,方便用于快速定义。
  • align-self: 允许单个项目有不同的对齐方式,覆盖 align-items

13-3 flex 响应式设计
可以使用 flex-growflex-shrink 属性

14. 如何实现两列布局?
  • 使用 float:float: left;
  • 使用 flex:display: flex;
  • 使用 grid:display: grid;
15. 如何实现三列布局?
  • 固定宽度:两边使用 float,中间使用 margin
  • 固定宽度:两边使用 absolute,中间使用 margin 或者 absolute
  • flex: display: flex;,中间使用 flex-growflex-shrink 属性。
  • 使用 display: table 实现: display: table,三列设置display: table-cell;
  • 使用 display: grid 实现: display: grid; grid-template-columns: 300px auto 300px;
  • 圣杯布局:中间先加载,左中右三个元素分别左浮动,负边距定位设置;
  • 双飞翼布局:中间先加载,左中右三个元素分别左浮动,负边距定位设置;
16. emremvwvh
  • em:相对父元素的字体大小,适合细致控制间距和排版。
  • rem:相对根元素的字体大小,使用更为一致,便于管理全局样式。
  • vw:根据视口宽度调整,适合响应式布局。
  • vh:根据视口高度调整,适合适应屏幕的元素高度。
17. CSS 响应式设计

CSS 响应式设计是一种网页设计方法,网页能够根据不同设备的屏幕尺寸、分辨率和方向,自动调整布局和样式。可以使用流体网格布局、百分比尺寸、视口单位、媒体查询、Flexbox 布局和 Grid 布局等。

  • 媒体查询:@media (min-width: 600px);
  • 流式布局:emrem、 百分比(Bootstrap 的 12 栅格)等相对单位设定;
  • vwvh方案
  • flex 方案
  • grid 方案
17. 居中对齐

17-1 行内元素水平居中

  • text-align: center; line-height: 300px;
  • display: table-cell;vertical-align: middle;

17-2 块级元素水平居中

  • 宽高已知: margin: auto;

  • 宽高未知:display: inline-block;

  • 使用定位属性:
    1、【宽高已知】父 position: relative;position: absolute;left: 50%;top: 50%; margin-left: -50px; margin-top:-50px;
    2、【宽高未知】父 position: absolute;left: 50%;top: 50%; transform: translateX(-50%); transform: translateY(-50%);

  • flexbox: display: flex;justify-content: center;

17-3 已知高度和宽度的元素,水平垂直居中

方案一:top: 0; right: 0; bottom: 0; left: 0; margin: auto;
方案二:left: 50%; top: 50%; margin-left: 元素宽度的一半 px; margin-top: 元素高度的一半 px;

17-4 未知高度和宽度的元素,水平垂直居中

方案一:left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%);
方案二:justify-content: center; align-items: center;
方案三:display: grid;justify-self: center;align-self: center;

18. 什么是 CSS3?

CSS 第三个版本,css3 提供了一系列新特性和功能,比如动画、渐变、圆角、阴影等功能,还有响应式设计、模块化设计等。

19. CSS3 的新特性有哪些?
  • 选择器:新增的选择器如 :nth-child():nth-of-type():not() 等。
  • 背景:支持多个背景层、背景大小、背景修饰等。
  • 边框:圆角边框(border-radius)、阴影(box-shadow)等。
  • 文本:文本阴影(text-shadow)、字体平滑(font-smoothing)等。
  • 渐变:线性渐变(linear-gradient)和径向渐变(radial-gradient)。
  • 动画:关键帧动画(@keyframes)和过渡(transition)。
  • 媒体查询:用于响应式设计,能够根据设备的不同特性调整样式。
20. 举例说明你用过哪些 CSS3 的新特性?
  • 圆角:border-radius设置圆角
  • 渐变背景: background: linear-gradient(to right, red, blue);
  • 过渡:transition: background-color 0.5s ease;
  • 动画:@keyframesanimation: example 2s infinite
  • 模块化设计:@import url(css/styles2.css)
  • 媒体查询

二、进阶问题

21. 什么是 CSS 预处理器?有哪些常用的预处理器?

CSS 预处理器为 CSS 的编写提供了增强功能,如变量、嵌套、混合、继承等。比如:less 和 sass

21-1 Less 和 Sass 在语法上有些共性,比如下面这些:

  • 混入(Mixins)——class 中的 class;
  • 参数混入——可以传递参数的 class,就像函数一样;
  • 嵌套规则——Class 中嵌套 class,从而减少重复的代码;
  • 运算——CSS 中用上数学;
  • 颜色功能——可以编辑颜色;
  • 名字空间(namespace)——分组样式,从而可以被调用;
  • 作用域——局部修改样式;
  • JavaScript 赋值——在 CSS 中使用 JavaScript 表达式赋值。

21-2 less 和 sass 的区别

  • Less 是基于 JavaScript,是在客户端处理的。
  • Sass 是基于 Ruby 的,是在服务器端处理的。
  • 关于变量在 Less 和 Sass 中的唯一区别就是 Less 用@,Sass 用$。
  • 输出设置,Less 没有输出设置,Sass 提供 4 中输出选项:nested, compact, compressed 和 expanded。
  • Sass 支持条件语句,可以使用 if{}else{},for{}循环等等,而 Less 不支持。
22. 什么是 PostCSS

是一个用 JavaScript 工具和插件转换 CSS 代码的工具:

  • 增强代码的可读性:为 CSS 规则添加特定厂商的前缀;
  • 兼容性:将最新的 CSS 语法转换成大多数浏览器都能理解的语法;
  • 代码检查:通过使用 stylelint 强化一致性约束并避免样式表中的错误。
  • 模块化
  • 可以使用插件实现各种功能
23. 重排(reflow)和重绘(repaint)
  • 重排(reflow):元素的的位置和尺寸大小变化;

  • 重绘(Repaints):外观发生改变,但没有改变布局;

    重绘不一定导致重排,但重排一定会导致重绘。

    优化:减少重排次数:样式集中改变 ,使用 absolute 或 fixed 脱离文档流,优化动画等

24. 什么是合成层,什么是硬件加速?

当你使用某些 CSS 属性(如 transform、filter、opacity 等)时,浏览器会将这些元素提升到一个单独的合成层。这意味着这些元素的渲染不会影响其他部分的渲染,从而提高性能。

  • GPU 加速:合成层使用 GPU 来加速渲染,提高动画流畅性和页面交互速度。
  • 合成与重排:合成层可以减少重排和重绘;

一些常用的能够触发合成层的 CSS 属性包括:

  • transform:如 transform: translateZ(0);, transform: translate3d(0, 0, 0);
  • opacity:在透明度变化时,也会触发合成层。
  • filter:使用 CSS 滤镜会使元素提升到合成层。
  • will-change:transform
  • videocanvasiframe 等。

三、浏览器渲染流程

  • 解析 HTML:浏览器首先从服务器下载 HTML 文档,构建 DOM 树,同时下载 CSS 文件;
  • 解析 CSS: 浏览器将 CSS 规则解析成 CSSOM 树;
  • 构建渲染树: CSSOM 树与 DOM 树一起生成渲染树;
  • 布局:计算每个节点在屏幕上的位置和大小。
  • 绘制:将渲染树中的元素转化为屏幕上的像素。
  • 合成:如果页面中的某些元素使用了 CSS 变换、透明度或滤镜等属性,浏览器可能会将这些元素提升到合成层。
  • 显示:绘制内容呈现给用户,浏览器将图形缓冲区中的内容发送到屏幕上。

四、兼容性问题

  • 浏览器:{margin: 0; padding: 0;}
  • 图片空隙:img{display: block;}
  • input 重置
  • CSS3 兼容前缀
    。。。

五、CSS 优化

CSS 优化是指通过一些技术和最佳实践来提高 CSS 的效率、可维护性和加载性能,从而改善网页的响应速度和用户体验。以下是一些常用的 CSS 优化技巧:

  • 合并和最小化 CSS 文件
  • 使用 CSS 预处理器
  • 减少选择器的复杂性,以提高匹配速度。
  • 使用简短的属性名,来减少代码量
  • 避免使用过多的通用选择器:避免使用通用选择器,因为它们会遍历所有的 DOM 元素。
  • 缓存静态资源
  • 响应式设计使用 media 属性进行条件加载
  • 使用 CSS 图像精灵,将多个小图像合并为一张大图
  • 避免使用 CSS 表达式
  • 对于动画和变化,可以使用 transformopacity 属性来利用 GPU 加速,减少重排和重绘的次数。
  • 使用 CSS variables 来定义重复的值,使样式表更加灵活和可维护。
  • 将关键 CSS(首屏渲染所需的 CSS)内联到 HTML 中,或提取到一个小的 CSS 文件中,以减小首次渲染时间。
  • 资源优化:CDN,压缩、webp

点个关注:谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值