CSS高频面试考点

1.介绍一下标准的 CSS 的盒子模型?低版本 IE 的盒子模型有什么不同的?

盒模型都是由四个部分组成的,分别是margin、border、padding和content。

标准盒模型和IE盒模型的区别在于设置width和height时,所对应的范围不同。标准盒模型的width和height属性的范围只包含了content,而IE盒模型的width和height属性的范围包含了border、padding和content。

一般来说,我们可以通过修改元素的box-sizing属性来改变元素的盒模型。

box-sizeing:content-box //标准盒模型
box-sizeing:border-box //IE盒模型

2.display 有哪些值?说明他们的作用。

block    块类型。默认宽度为父元素宽度,可设置宽高,换行显示。
none    元素不显示,并从文档流中移除。
inline    行内元素类型。默认宽度为内容宽度,不可设置宽高,同行显示。
inline-block 默认宽度为内容宽度,可以设置宽高,同行显示。
list-item    像块类型元素一样显示,并添加样式列表标记。
table    此元素会作为块级表格来显示。
inherit    规定应该从父元素继承display属性的值。

3.一个满屏“品”布局如何设计

<div class="top">顶部区域</div>
<div class="bottom">
  <div class="left">左下区域</div>
  <div class="right">右下区域</div>
</div>
body, html {
  margin: 0;
  padding: 0;
  height: 100%;
}

.top {
  width: 100%;
  height: 50%;
  background: #f9c74f;
  float: left;
}

.bottom {
  width: 100%;
  height: 50%;
  float: left;
}

.left, .right {
  width: 50%;
  height: 100%;
  float: left;
}

.left {
  background: #90be6d;
}

.right {
  background: #43aa8b;
}

简单的方式:
    上面的div宽100%,
    下面的两个div分别宽50%,
    然后用float或者inline使其不换行即可

4.对BFC的理解

BFC是块级格式化上下文,一个元素形成BFC之后,那么它内部元素产生的布局不会影响到外部元素,外部元素的布局也不会影响到BFC内部元素。一格BFC就像是一个隔离区域,和其他区域互不影响。

一般来说根元素是一个BFC区域,浮动和绝对定位的元素也会形成BFC,display属性的值为inline-block、flex这些属性也会创建BFC。还有就是元素的overflow的值不为visible时都会创建BFC。

BFC作用:

①解决margin重叠问题:由于BFC是一个独立的区域,内部元素和外部元素互不影响,将两个元素变为BFC,就解决了margin重叠问题
②创建自适应两栏布局:可以用来创建自适应两栏布局,左边宽高固定,右边宽度自适应。
③解决高度塌陷问题:在子元素设置浮动后,父元素会发生高度的塌陷,也就是父元素的高度为0解决这个问题,只需要将父元素变成一个BFC。

5.margin 重叠问题的理解

margin重叠指的是在垂直方向上,两个相邻元素的margin发生重叠的情况。

一般来说可以分为四种情形:

第一种是相邻兄弟元素的marin-bottom和margin-top的值发生重叠。这种情况下我们可以通过设置其中一个元素为BFC来解决。

第二种是父元素的margin-top和子元素的margin-top发生重叠。它们发生重叠是因为它们是相邻的,所以我们可以通过这一点来解决这个问题。我们可以为父元素设置border-top、padding-top值来分隔它们,当然我们也可以将父元素设置为BFC来解决。

第三种是高度为auto的父元素的margin-bottom和子元素的margin-bottom发生重叠。它们发生重叠一个是因为它们相邻,一个是因为父元素的高度不固定。因此我们可以为父元素设置border-bottom、padding-bottom来分隔它们,也可以为父元素设置一个高度,max-height和min-height也能解决这个问题。当然将父元素设置为BFC是最简单的方法。

第四种情况,是没有内容的元素,自身的margin-top和margin-bottom发生的重叠。我们可以通过为其设置border、padding或者高度来解决这个问题。

Margin 重叠的计算规则
1. 都为正数,取最大值原则:重叠后的 margin 取两个 margin 中的较大值
例如:margin: 20px 和 margin: 30px 重叠 → 30px
2. 一正一负:相加  (20px + (-15px) = 5px)
3. 同为负值:取绝对值较大的  (-20px 和 -30px → -30px)
4. 完全重叠:当两个 margin 完全重合时(如空元素),上下 margin 会完全合并

6.使用CSS预处理器吗?喜欢哪个?

SASS/LESS(根据实际,SASS我有一篇文章有介绍,Sass:让CSS更强大的秘密武器!-CSDN博客

Sass/SCSS(最流行,功能最全面)
Less(语法简单,学习曲线低)

7.SASS和LESS有什么区别?

他们都是 css 预处理器,是CSS 上的一种抽象层。他们是一种特殊的语法/语言编译成 css 。 增加了css 代码的复用性,层级, mixin , 变量,循环,函数等对编写以及开发UI组件都极为方便。 区别:
1)编译环境不一样
Sass 是在服务端处理的,以前是 Ruby,现在是 Dart-Sass 或 Node-Sass
Less 是需要引入 less.js 来处理Less代码输出CSS到浏览器,也可以在开发服务器将Less语法编译成css文件,输出CSS文件到生产包目录
2)变量符不一样,Less是@,而Scss是$
3) Sass支持条件语句,可以使用if{}else{},for{}循环等等,而Less 不支持

8.几种常见的CSS布局

详细的资料可以参考: 《几种常见的 CSS 布局》

9.如何画一条0.5px的线

使用 transform: scale()的方式,该方法用来定义元素的2D 缩放转换:
1 transform: scale(0.5,0.5);
采用 meta viewport 的方式,这样就能缩放到原来的0.5倍,如果是1px那么就会变成0.5px。
viewport只针对于移动端,只在移动端上才能看到效果。

详细资料可以参考: 《怎么画一条 0.5px 的边(更新)》

10.常见的元素隐藏方式?

1)使用 display:none;隐藏元素,渲染树不会包含该渲染对象,因此该元素不会在页面中占据位置,也不会响应绑定的监听事件。

2)使用 visibility:hidden;隐藏元素。元素在页面中仍占据空间,但是不会响应绑定的监听事件。

3)使用 opacity:0;将元素的透明度设置为 0,以此来实现元素的隐藏。元素在页面中仍然占据空间,并且能够响应元素绑定的监听事件。

4)通过使用绝对定位将元素移除可视区域内,以此来实现元素的隐藏。

5)通过 z-index 负值,来使其他元素遮盖住该元素,以此来实现隐藏。

6)通过 clip/clip-path 元素裁剪的方法来实现元素的隐藏,这种方法下,元素仍在页面中占据位置,但是不会响应绑定的监听事件。

7)通过 transform:scale(0,0)来将元素缩放为 0,以此来实现元素的隐藏。这种方法下,元素仍在页面中占据位置,但是不会响应绑定的监听事件。

11.css 两栏布局的实现?

两栏布局一般指的是页面中一共两栏,左边固定,右边自适应的布局,一共有四种实现的方式。

以左边宽度固定为200px为例

(1)利用浮动,将左边元素宽度设置为200px,并且设置向左浮动。将右边元素的margin-left设置为200px,宽度设置为auto(默认为auto,撑满整个父元素)。

.outer {
  height: 100px;
}

.left {
  float: left;
  height: 100px;
  width: 200px;
  background: tomato;
}

.right {
  margin-left: 200px;
  width: auto;
  height: 100px;
  background: gold;
}

(2)第二种是利用flex布局,将左边元素的放大和缩小比例设置为0,基础大小设置为200px。将右边的元素的放大比例设置为1,缩小比例设置为1,基础大小设置为auto。

.outer {
  display: flex;
  height: 100px;
}

.left {
  flex-shrink: 0;
  flex-grow: 0;
  flex-basis: 200px;
  background: tomato;
}

.right {
  flex: auto;
  background: gold;
}

(3)第三种是利用绝对定位布局的方式,将父级元素设置相对定位。左边元素设置为absolute定位,并且宽度设置为200px。将右边元素的margin-left的值设置为200px。

.outer {
  position: relative;
  height: 100px;
}

.left {
  position: absolute;
  width: 200px;
  height: 100px;
  background: tomato;
}

.right {
  margin-left: 200px;
  height: 100px;
  background: gold;
}

(4)第四种还是利用绝对定位的方式,将父级元素设置为相对定位。左边元素宽度设置为200px,右边元素设置为绝对定位,左边定位为200px,其余方向定位为0。

.outer {
  position: relative;
  height: 100px;
}

.left {
  width: 200px;
  height: 100px;
  background: tomato;
}

.right {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 200px;
  background: gold;
}

12.css三栏布局的实现

三栏布局一般指的是页面中一共有三栏,左右两栏宽度固定,中间自适应的布局,一共有五种实现方式。

这里以左边宽度固定为100px,右边宽度固定为200px为例。

1)利用绝对定位的方式,左右两栏设置为绝对定位,中间设置对应方向大小的margin的值。

2)利用flex布局的方式,左右两栏的放大和缩小比例都设置为0,基础大小设置为固定的大小,中间一栏设置为auto。

3)利用浮动的方式,左右两栏设置固定大小,并设置对应方向的浮动。中间一栏设置左右两个方向的margin值,注意这种方式,中间一栏必须放到最后。

4)圣杯布局,利用浮动和负边距来实现。父级元素设置左右的padding,三列均设置向左浮动,中间一列放在最前面,宽度设置为父级元素的宽度,因此后面两列都被挤到了下一行,通过设置margin负值将其移动到上一行,再利用相对定位,定位到两边。圣杯布局中间列的宽度不能小于两边任意列的宽度,而双飞翼布局则不存在这个问题。

5)双飞翼布局,双飞翼布局相对于圣杯布局来说,左右位置的保留是通过中间列的margin值来实现的,而不是通过父元素的padding来实现的。本质上来说,也是通过浮动和外边距负值来实现的。

13.实现一个三角形

通过设置不同方向边框来实现

给出上下左右的三角形:

.triangle-up {
  width: 0;
  height: 0;
  border-left: 50px solid transparent;
  border-right: 50px solid transparent;
  border-bottom: 100px solid red;
}

.triangle-down {
  width: 0;
  height: 0;
  border-left: 50px solid transparent;
  border-right: 50px solid transparent;
  border-top: 100px solid blue;
}

.triangle-left {
  width: 0;
  height: 0;
  border-top: 50px solid transparent;
  border-bottom: 50px solid transparent;
  border-right: 100px solid green;
}

.triangle-right {
  width: 0;
  height: 0;
  border-top: 50px solid transparent;
  border-bottom: 50px solid transparent;
  border-left: 100px solid orange;
}
<div class="triangle-up"></div>
<div class="triangle-left"></div>
<div class="triangle-down"></div>
<div class="triangle-right"></div>

14.如何实现单行/多行文本溢出的省略?

单行
overflow: hidden; // 溢出隐藏
text-overflow: ellipsis; // 溢出用省略号显示
whtie-space: nowrap; //规定段落中的文本不进行换行

多行
overflow:hidden
text-overflow: ellipsis;     // 溢出用省略号显示
display:-webkit-box;         // 作为弹性伸缩盒子模型显示。
-webkit-box-orient:vertical; // 设置伸缩盒子的子元素排列方式:从上到下垂直排列
-webkit-line-clamp:3;        // 显示的行数

15.style 标签写在 body 后与 body 前有什么区别?

页面加载自上而下当然是先加载样式,写在body标签后由于浏览器以逐行方式对HTML文档进行解析,当解析到写在尾部的样式表(外联或写在style标签)会导致浏览器停止之前的渲染,等待加载且解析样式表完成之后重新渲染,在windows的IE下可能会出现FOUC现象(即样式失效导致的页面闪烁问题)。

16.如果需要手动写动画,你认为最小时间间隔是多久,为什么?

多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms=16.7ms

17.margin 和 padding 分别适合什么场景使用?

margin是用来隔开元素与元素的间距;padding是用来隔开元素与内容的间隔。
margin用于布局分开元素使元素与元素互不相干。
padding用于元素与内容之间的间隔,让内容(文字)与(包裹)元素之间有一段距离。

何时应当使用margin:
•需要在border外侧添加空白时。
•空白处不需要背景(色)时。
•上下相连的两个盒子之间的空白,需要相互抵消时。如15px+20px的margin,将得到20px的空白。

何时应当时用padding:
•需要在border内测添加空白时。
•空白处需要背景(色)时。
•上下相连的两个盒子之间的空白,希望等于两者之和时。如15px+20px的padding,将得到35px的空白。

18.常见的CSS单位
1)px像素:①CSS像素 ②物理像素
2)百分比%:作用于父元素, 当浏览器的宽度或者高度发生变化时,当前元素依据比例发生变化。
3)em和rem:相对长度单位,它们之间的区别:em相对于父元素,rem相对于根元素。
4)vw/vh是与视图窗口有关的单位,代表视图窗口的宽高。


19.px、em、rem的区别
px 固定像素单位,不能随其它元素的变化而变化
em是相对于父元素的单位,会随着父元素变化而变化
rem是相对于根元素html,它会随着html元素变化而变化

本部分主要是在复习 CSS 相关知识和搜集到的一些相关面试题时所做的笔记,如果出现错误,希望大家指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值