# Css题目汇总

# css 伪类与伪元素区别

公司:滴滴、网易

分类:Css

答案&解析

特性 伪类(pseudo-class) 伪元素(pseudo-element)
用途 表示元素的特定状态 表示元素的某个虚拟部分
语法 使用一个冒号 : 使用两个冒号 ::(CSS3标准)
作用对象 整个元素 元素的一部分(如首行、首字)
是否真实存在于DOM中 否,仅逻辑状态 否,仅虚拟存在
示例 :hover, :focus, :nth-child() ::before, ::after, ::first-line

# 说一下盒子模型

公司:兑吧

分类:Css

答案&解析

+---------------------------+
|       margin(外边距)     |
|  +---------------------+  |
|  |    border(边框)    |  |
|  |  +---------------+  |  |
|  |  | padding(内边距)|  |
|  |  |  +----------+  |  |
|  |  |  | content  |  |  |
|  |  |  +----------+  |  |
|  |  +---------------+  |
|  +---------------------+  |
+---------------------------+

# Css 如何画出一个扇形,动手实现下

公司:头条

分类:Css、编程题

答案&解析

border

# BFC 是什么?触发 BFC 的条件是什么?有哪些应用场景?

公司:快手、伴鱼、网易

分类:CSS

答案&解析 BFC 是一个隔离作用域的布局盒子,触发条件可以是 overflow、float、display、position 等,用来清除浮动、解决 margin 合并、避免布局干扰等

触发 BFC 的条件

条件 说明
float 的值不为 none 例如 float: left/right
positionabsolutefixed 相对定位不会触发
displayinline-blocktable-cellflow-root inline-block 是常见的触发方式
overflow 不为 visible 例如 overflow: hidden/auto/scroll
contain: layoutcontain: paint 现代浏览器支持
flexgrid 容器(父元素是 flex/grid) 自动形成 BFC

# 说一下什么是重绘重排,哪些操作会造成重绘重排

公司:滴滴、伴鱼、菜鸟网络、58

分类:CSS

答案&解析

重绘:当元素样式发生改变,但不影响布局时,比如颜色、背景图、可见性变化,浏览器会重新绘制该元素。
重排:当元素的大小、位置、结构等影响到布局时,浏览器需要重新计算所有相关元素的几何信息。

公司:伴鱼

分类:CSS

类型 是否阻塞解析 是否阻塞渲染 推荐优化方式
CSS <link> ✅ 是 media + onload 或提取关键 CSS
JS <script> ✅ 是 ✅ 是 使用 deferasync,放到底部
属性 加载顺序 执行时机 保证顺序
默认 阻塞 立即执行 ✅ 是
defer 异步 DOM 解析后执行 ✅ 是
async 异步 加载完即执行 ❌ 否

# Css 选择器都有什么,权重是怎么计算的

公司:完美世界

分类:Css

答案&解析

/* 选择器 */                    /* 权重 (a,b,c,d) */
/* 1 */  #header                => (0,1,0,0)    — 1 个 ID
/* 2 */  .container             => (0,0,1,0)    — 1 个类
/* 3 */  div                   => (0,0,0,1)    — 1 个元素
/* 4 */  div#header             => (0,1,0,1)    — 1 ID + 1 元素
/* 5 */  div.container.active   => (0,0,2,1)    — 2 类 + 1 元素
/* 6 */  a:hover                => (0,0,1,1)    — 1 伪类 + 1 元素
/* 7 */  input[type="text"]     => (0,0,1,1)    — 1 属性 + 1 元素
/* 8 */  *                      => (0,0,0,0)    — 通配符不加权重

# 布局都有什么方式,float 和 position 有什么区别

公司:完美世界

分类:Css

答案&解析

特性 float position
作用 让元素脱离文档流,向左或右浮动,文本环绕 通过指定方式定位元素(相对、绝对等)
元素是否脱离文档流 是(浮动元素不占据原位置空间) relative 不脱离,其他如 absolutefixed 脱离
对后续元素影响 后续块级元素会环绕浮动元素或顶到浮动元素下面 脱离文档流的定位元素不影响后续元素布局
典型用途 文本环绕、简单列布局 精准定位元素,比如弹窗、悬浮按钮等
清除浮动问题 需要清除浮动,否则父元素高度坍塌 无需清除浮动,定位元素单独占位置
定位方式 只能向左或右浮动 可以指定具体坐标(top/right/bottom/left)

# nth-childnth-of-type 有什么区别

公司:网易

分类:Css

答案&解析

选择器 计数规则 举例解释
nth-child(n) 父元素所有子元素按顺序计数 选第 n 个子元素,不考虑类型
nth-of-type(n) 父元素中该类型(标签)元素计数 选第 n 个同标签名的子元素

# flex 布局,如何实现把八个元素分两行摆放

公司:网易

分类:Css

答案&解析

.container {
  display: flex;
  flex-wrap: wrap; /* 允许换行 */
  width: 400px;     /* 容器宽度 */
}

.item {
  flex: 0 0 25%;    /* 每个元素占容器宽度的25%,即4个元素一行 */
  box-sizing: border-box;
  border: 1px solid #ccc;
  text-align: center;
  padding: 10px 0;
}

# Css 方式实现一个不知道宽高的 div 居中都有哪几种方法

公司:阿里、滴滴、易车、新东方、虎扑、饿了么、爱范儿、心娱、58

分类:Css

答案&解析 (opens new window)

# 动手实现一个左右固定100px,中间自适应的三列布局?(至少三种)

公司:自如、头条

分类:Css、编程题

答案&解析

<style>
.flex-container {
  display: flex;
}

.left, .right {
  width: 100px;
  background-color: #f88;
}

.center {
  flex: 1;
  background-color: #8f8;
}
<style>

<div class="flex-container">
  <div class="left">左侧 100px</div>
  <div class="center">中间自适应</div>
  <div class="right">右侧 100px</div>
</div>

# Css 超出省略怎么写,三行超出省略怎么写

公司:虎扑

分类:Css

答案&解析

.selector {
  white-space: nowrap;       /* 不换行 */
  overflow: hidden;          /* 超出隐藏 */
  text-overflow: ellipsis;   /* 超出用省略号代替 */
}
.selector {
  display: -webkit-box;           /* 伸缩盒子模型 */
  -webkit-box-orient: vertical;  /* 垂直排列子元素 */
  -webkit-line-clamp: 3;          /* 显示3行 */
  overflow: hidden;               /* 超出隐藏 */
  text-overflow: ellipsis;        /* 超出省略号 */
}

# 清除浮动的方式

公司:头条

分类:Css

答案&解析

.container::after {
  content: "";
  display: block;
  clear: both;
}

分类:Css

答案&解析

对比点 <link> @import
使用位置 写在 HTML 中的 <head> 写在 CSS 文件或 <style> 标签中
语法示例 <link rel="stylesheet" href="a.css"> @import url("a.css");@import "a.css";

# justify-content:space-between around 有什么区别

公司:快手

分类:Css

答案&解析

<div class="danmu-container">
  <div class="danmu">这是第一条弹幕~</div>
  <div class="danmu" style="top: 40px;">Hello 弹幕世界!</div>
  <div class="danmu" style="top: 80px;">CSS 也能搞定弹幕~ 🎉</div>
</div>

<style>
.danmu-container {
  position: relative;
  width: 100%;
  height: 200px;
  background: #111;
  overflow: hidden;
}

.danmu {
  position: absolute;
  white-space: nowrap;
  color: #fff;
  font-size: 20px;
  animation: danmu-move 8s linear infinite;
  right: -100%; /* 从屏幕右边开始 */
}

/* 弹幕从右到左移动动画 */
@keyframes danmu-move {
  from {
    transform: translateX(100vw);
  }
  to {
    transform: translateX(-100%);
  }
}
</style>