最近2周前端css面试题整理

113 阅读5分钟

css

1. 选择器的类型与优先级?(上海xx科技)

1. 基础选择器:

ID选择器、类选择器、标签选择器、通配符选择器

2. 复合选择器:

由两个或多个基础选择器,通过不同的方式组合而成的。

常用的复合选择器包括:后代选择器、子选择器、并集选择器、伪类选择器等

3. 优先级

先看一张图

image-20230608235750979转存失败,建议直接上传图片文件

!important > 内联 > id > 类 =属性 = 伪类 > 标签 = 伪元素 > 子选择器 = 兄弟选择器 = 后代选择器 = 通配符

2. 垂直居中如何实现?

2.1 居中元素宽高已知

2.1.1 absolute + margin auto

.parent{
  position: relative;
  width: 90vw;
  height: 90vh;
  border: 3px solid steelblue;
}

.child{
  background: tomato;
  width: 50vw; height: 50vh;
  /* 核心代码 */
  position:absolute;
  top: 0; bottom: 0; left: 0; right: 0;
  margin: auto;
}

**2.1.2 absolute + 负 margin **

.parent{
  position:relative;
  width: 90vw;
  height: 90vh;
  border: 3px solid steelblue;
}
 
.child{
  background: tomato;
  width: 100px; height: 100px;
  /* 核心代码 */
  position:absolute;
  top: 50%; left: 50%;
  margin-top: -50px;
  margin-left: -50px;
}

**2.1.3 flex(justfy-content:center;align-items:center) **

2.2 居中元素宽高未知

**2.2.1 **absolute + transform

.parent{
  width: 90vw;
  height: 90vh;
  border: 3px solid steelblue;
  /* 核心代码 */
  position:relative;
}
 
.child{
  background: tomato;
  /* 核心代码 */
  position:absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

2.2.2 Flex

.parent {
  width: 90vw;
  height: 90vh;
  border: 3px solid steelblue;
  
  /* 核心代码 */
  display: flex;
  justify-content: center;
  align-items: center;
}
.child{
  background: tomato;
}

3. 什么是BFC(Block formatting context)?(重庆xx有限责任公司)

3.1 定义

直译为 块级格式化上下文 ,把BFC理解成一块独立的渲染区域,BFC看成是元素的一种属性, 当元素拥有了BFC属性后,这个元素就可以看做成隔离了的独立容器。容器内的元素不会影响容器外的元素.

3.2 实现BFC属性的方法

  • 浮动元素:float除none以外的值
  • 定位元素: position的值不为static或者relative
  • display为inline-block、flex、grid
  • overflow除了visible以外的值(hidden、auto、scroll)
  • 根元素

3.3 BFC的作用

3.2.1 避免外边距重叠(防止margin塌陷) 3.2.2 用于清除浮动 (当给一个父元素设置边框,内部元素会将父元素撑起来,但是如果内部元素设置了 float属性,则该父元素会失去支撑,从而没有高度)

3.2.3 阻止元素被浮动元素覆盖

3.4 外边距重叠的补充

外边距重叠分2种情况

1.兄弟元素外边距重叠

<style>
        .inner-box1,
        .inner-box2 {
            width: 100px;
            height: 100px;
            background-color: yellow;
            margin-left: 20px;
            border: 1px solid;
 
 
        }
 
        .inner-box1 {
            margin-bottom: 10px;
        }
 
        .inner-box2 {
            margin-top: 20px;
        }
</style>
 
<body>
    <div class="inner-box1">
    </div>
    <div class="inner-box2"></div>
</body>

image-20230609002930292转存失败,建议直接上传图片文件

此时两个盒子之间的距离由两个外边距之中较大的决定,也就是20px,如果两个盒子的距离都是负值则由绝对值较大的决定。

而如果两者的间距一正一负盒子之间的间距就是两者相加的值,这点有点不同,需要特殊记忆

2.父子元素外边距重叠问题

上面的兄弟元素外边距重叠一般来说问题不是很大,可是父子元素外边距重叠问题会影响页面布局,需要及时解决。

所谓父子元素外边重叠问题,便是子元素的外边距会传递个父元素,导致父子元素同时移动,从而达不到应有的效果

解决方式:

  1. 给父元素添加一个外边框(bordr)
  2. 对父元素添加overflow:hidden 开启元素的BFC
  3. 伪类
    .clearfix:before,
    .clearfix:after{
        content:'';
        display:table;
        clear:both;
    }

3.5 高度塌陷的补充

高度塌陷简单说就是,父级元素包涵的子元素浮动了,当父级元素没有设置高度时,会因为没有子元素“撑开”,而变成一条线。

image-20230609003500745转存失败,建议直接上传图片文件

解决方式:

  1. 给父级元素设置高度(不推荐)

    这样就写死了,不过当整体布局确定了可以使用
    
  2. 结尾添加空标签,给其设置 clear:both(不推荐)

直接在高度塌陷的父元素的最后添加一个空的div,由于这个div没有浮动,所以它可以撑开父元素的高度,然后对其进行[清除浮动,通过这个空白div来撑起父元素的高度,clear:both 本质就是闭合浮动, 就是让父盒子闭合出口和入口,不让子盒子出来。缺点是添加无意义标签,语义化差。

3.用伪元素::after清除浮动(推荐)

可以通过给父级元素添加after伪类,再向元素添加一个空白的块元素,然后对其清除浮动,这样做和添加一个div的原理一样,可以达到一个相同的效果,而且不会在页面中添加多余的div,这是我们最推荐使用的方式,几乎没有副作用  
.clearfix::after{
    content: "";
    display: block;
    clear: both;
  }
 
.one {
    border: 10px solid red;
  }
 
.two {
    width: 100px;
    height: 100px;
    background: yellowgreen;
    float: left;
  }