likes
comments
collection
share

勇闯秋招提前批:面试中的css大盘点

作者站长头像
站长
· 阅读数 19

在面试中,全面且有条理地回答问题是展现自己专业能力的重要方式。当感到有思路但难以清晰表达时,采用以下“三步走”策略来扩充回答,可以帮助更饱满地呈现想法。

1.xx是什么

2.xx的特点

3.xx的应用场景

一:说说你对盒子模型的理解

下面以这个问题为例,展示一下如何回答

  • 是什么
    • 盒子模型是浏览器在渲染页面时,会将浏览器渲染成包含content,padding,border,margin四部分的矩形
  • 特点
    • 标准盒模型:width = content
    • IE盒模型: width = content + padding + border

勇闯秋招提前批:面试中的css大盘点

  • 应用场景
    • 切换方法: box-sizing: content-box||border-box;

      border-box: 转换为IE盒模型

      content-box: 转换为标准盒模型(默认值)

二:css中的选择器有哪些?优先级?

  • id选择器 #id:选择具有指定 ID 的元素,ID 应该在一个文档中是唯一的
  • 类选择器 .classname:选择具有指定类的所有元素,一个元素可以拥有多个类
  • 属性选择器 div[class="foo"]:选择具有指定属性或属性值的元素
  • 伪类选择器 div::last-child:选择处于特定状态的元素,如第一个子元素、最后一个子元素等
  • 标签选择器 div:选择所有指定类型的元素
  • 伪元素选择器 div:after:选择元素的某个部分,如第一个字母或元素后面的内容
  • 兄弟选择器 div+span:选择紧接在另一个元素后的元素,且二者拥有共同的父元素
  • 子选择器 ui>li:选择作为指定父元素直接子元素的元素
  • 后代选择器 div span:选择作为指定祖先元素的后代元素
  • 通配符选择器*:选择文档中的所有元素
  • 群组选择器:使用逗号 , 分隔不同的选择器

优先级: !important > 行内样式 > id选择器 > 类选择器 > (属性选择器, 伪类选择器, 伪元素选择器, 后代选择器,子集选择器,兄弟选择器)>标签选择器 > 通配符选择器

三:说说em,rem,vw,vh,px 的区别?

  • css3之前:px, em, %

  • css3新增:rem, vw, vh

  • 区别:

      1. px:绝对单位,不随浏览器的缩放比例而改
      1. em, % ,rem, vw, vh:相对单位,随浏览器的缩放比例而改

em是相对于父元素的单位,会随着父元素变化而变化, rem是相对于根元素html,它会随着html元素变化而变化

四:css中有哪些方式可以隐藏一个元素

  • display:none:完全移除元素及其占据的空间。
  • visibility:hidden:隐藏元素,但保留其在页面布局中的空间。
  • opacity:0:设置元素的透明度为 0,元素变得完全透明,但仍然占用空间。
  • position:absolute:定位元素,使其相对于最近的非 static 定位的祖先元素进行定位,定位到可视区域以外
  • width:0;height:0:元素的水平尺寸和垂直属性变为 0
  • clip-path:polygon(0px 0px,0px 0px):将元素全部裁剪掉,但仍占用空间

区别:

  • display:none:无文档流,不触发事件,会触发回流重绘
  • visibility:hidden:有文档流,不触发事件,不会回流,会重绘
  • opacity:0:有文档流,会触发事件,不会回流,会重绘
  • position:absolute:无文档流,会触发事件,会触发回流重绘
  • width:0;height:0:无文档流,不触发事件,会触发回流重绘
  • clip-path:polygon(0px 0px,0px 0px):有文档流,不触发事件,不会回流,会重绘

五:谈谈你对BFC的理解

BFC是块级格式上下文,是一种特殊的容器,拥有一套自己的渲染规则

规则:

  1. BFC容器,内部子容器依旧遵从块级,行内块,行内的排列
  2. BFC容器在计算高度时,会将浮动元素的高度也计算在内
  3. BFC容器的margin-top不会跟子容器的margin-top重叠

触发条件:

  • overflow:hidden || xxx
  • folat: right || left
  • display: table-xxx || inline-xxx || flex || grid
  • position: absolute || fixed

应用场景:

  • 清除浮动
  • 防止margin重叠

六: 元素水平垂直居中的方法有哪些

  • 已知父子容器宽高: 使用 margin: auto; 将元素水平居中;使用 top: 50%; left: 50%; transform: translate(-50%, -50%); 将元素垂直居中。

  • 未知父容器,已知子容器:

    • 使用 margin: auto; 和 calc() 函数结合,
    margin: 0 auto; 
    top: calc(50% - (element-height / 2));
    
    • 使用 position: absolute; 和负 margin

    position: absolute;
    left: 50%; 
    margin-left: -50px;
    
    • 使用 position: absolute; 和 `margin: auto;
    position: absolute;
    left: 0; 
    right: 0; 
    top: 0; 
    bottom: 0; 
    margin: auto;
    
  • 未知父子容器宽高:

    • 使用 position: absolute; 和 transform
    position: absolute;
    top: 50%; 
    left: 50%; 
    transform:translate(-50%, -50%);
    
    • 使用 display: flex; 和 align-items: center; justify-content: center;
    • 使用 display: grid; 和 align-items: center; justify-content: center;
    • 使用 display: table-cell; 和 vertical-align: middle;

七: 说说 flexbox

  • 是什么 弹性布局是CSS中的一种简便高效的布局方式,它提供了强大的容器与子元素间的空间分配机制。弹性容器中有主轴(默认沿x轴)和交叉轴(默认沿y轴)的概念,可以通过属性调整这些轴的方向。

  • 属性

    • 父容器属性:

      • flex-direction: 定义主轴的方向(默认为 row)。
      • justify-content: 控制主轴上的子元素对齐方式。
      • align-items: 控制交叉轴上的子元素对齐方式。
      • align-content: 当有多行子元素时,控制行之间的对齐方式。
      • flex-wrap: 决定子元素是否换行(默认为 nowrap)。
    • 子容器属性:

      • order: 定义子元素在容器中的顺序。
      • flex-grow: 定义子元素如何分配剩余空间。
      • flex-shrink: 定义子元素在空间不足时如何缩小。
      • flex-basis: 定义子元素在主轴上的初始大小。
      • align-self: 覆盖 align-items 设置,让单个子元素自定义对齐方式。
  • 应用场景

    • 三栏布局
    • 水平垂直居中

八: 如何实现三栏布局

  • 使用弹性布局 (flex)
  .container {
    display: flex;
  }
  .column {
    flex: 1;
    border: 1px solid #ccc;
    padding: 10px;
  }
  .middle {
    flex: 2;
  }
  • 使用浮动(圣杯、双飞翼)
  .container {
    overflow: auto;
  }
  .column {
    float: left;
    width: 25%;
    border: 1px solid #ccc;
    padding: 10px;
  }
  .middle {
    width: 50%;
  }
  .clearfix::after {
    content: "";
    display: table;
    clear: both;
  }
  • 使用网格布局 (grid)
.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}
.column {
  border: 1px solid #ccc;
  padding: 10px;
}
.middle {
  grid-column: 2 / span 2;
}
  • 使用表格 (table)
  .table-layout {
    display: table;
    width: 100%;
  }
  .cell {
    display: table-cell;
    border: 1px solid #ccc;
    padding: 10px;
  }
  .middle {
    width: 50%;
  }
  • 使用定位 (position)
.container {
    position: relative;
    min-height: 100%;
  }
  .left, .right {
    position: absolute;
    width: 200px;
    top: 0;
    border: 1px solid #ccc;
    padding: 10px;
  }
  .left {
    left: 0;
  }
  .right {
    right: 0;
  }
  .middle {
    margin-left: 200px;
    margin-right: 200px;
    border: 1px solid #ccc;
    padding: 10px;
  }

九: CSS3 新增了哪些属性

  • border-radius: 创建圆角边框。

  • box-shadow: 为元素添加阴影效果。

  • border-image: 为边框添加背景图片。

  • 背景:

    • background-size: 控制背景图像的大小。
    • background-origin: 控制背景图像的绘制范围。
    • background-clip: 控制背景图像的绘制范围。
  • 动画:

    • transition: 控制元素过渡效果。
    • animation: 控制元素动画效果。
    • @keyframes: 定义动画的关键帧。
  • transform: 控制元素变形,包括2D和3D变换。

  • 渐变:

    • linear-gradient: 线性渐变。
    • radial-gradient: 径向渐变。
  • 布局:

    • flex: 弹性布局。
    • grid: 网格布局。
  • 其他:

    • text-shadow: 为文本添加阴影效果。
    • box-sizing: 控制元素的盒子模型。
    • filter: 为元素添加各种视觉效果,如模糊、灰度、饱和度等。
    • backdrop-filter: 为元素背后的元素添加滤镜效果。
    • mask: 使用蒙版遮罩效果。
    • mix-blend-mode: 混合模式,控制元素与其背后内容的混合方式。
    • will-change: 提前优化性能,准备动画效果。

十: CSS画一个三角形,梯形

  • 三角形

    • 使用伪元素和边框,通过设置宽度和高度为0,以及不同的边框宽度来形成三角形。
    • 使用 clip-path,利用 polygon() 函数裁剪出三角形形状。
  .triangle-down {
    width: 0;
    height: 0;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 100px solid red;
  }
  • 梯形

    • 使用伪元素和边框,调整不同边框宽度和颜色来形成梯形。
    • 使用 clip-path,利用 polygon() 函数裁剪出梯形形状。
  .trapezoid {
    width: 100px;
    height: 50px;
    background-color: blue;
    overflow: hidden;
  }
  .trapezoid:before {
    content: "";
    display: block;
    width: 0;
    height: 0;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 50px solid white;
    position: relative;
    top: -50px;
  }

十一: 画一个0.5px的线

  • 缩放 (transform: scaleY(0.5);)
  • SVG (<line> 元素和 CSS 样式)
  • CSS Gradients (利用背景色渐变模拟细线效果)
转载自:https://juejin.cn/post/7398378565182832666
评论
请登录