前端面试实录CSS篇(最近一周)(上)

简介: 前端面试实录CSS篇(最近一周)

前端面试实录CSS篇


1. CSS 选择器以及优先级?

  • • CSS 选择器
选择器 格式 优先级权重
id 选择器 #id 100
类选择器 .classname 10
属性选择器 [title]/[title="one"] 10
伪类选择器 div:hover 10
标签选择器 div 1
伪元素选择器 input::after 1
子选择器 ul>li 0
后代选择器 li a 0
通配符选择器 * 0
  • • CSS 选择器优先级
  1. 1. !important 例外,优先级最高
  2. 2. 内联样式
  3. 3. id 选择器
  4. 4. 类选择器,属性选择器,伪类选择器
  5. 5. 标签选择器,伪元素选择器
  6. 6. 子选择器,后代选择器,通配符选择器
  • • 选择器权重

2. link 和 @import 的区别?

  • link: 链接外部资源的标签,此标签决定了文档与外部资源的关系,常用于链接样式表(css),网页站点图标(favicon)。
  • • 用法;
  • • 属性:
  1. 1. rel: 表示关系:realtionship,
  2. 2. href: 网络路径/相对路径/绝对路径
  3. 3. size: icon 的大小
  4. 4. disabled: 仅对 rel = "stylesheet" 类型生效
  • • 区别:
  1. 1. 从属差异:link 为 html 标签,可以加载 css, 也可以引入网站图标(facaion), 定义 rel 链接属性,而 @import 是 css 提供,只能用于加载 css
  2. 2. 加载差异:link 引用的 css,在页面加载时同时加载。而 @import 在页面加载完后才加载
  3. 3. 兼容性:link 是 html 标签,没有兼容问题。而 @ import 是 css2.1 提出的,IE5 以下的浏览器不支持。
  4. 4. 可操作性:link 可使用 js 来控制 DOM 去改变样式,而 @import 不支持,因为 DOM 方法是基于文档的。
  5. 5. 权重差异:
  • • 在样式中:link 样式的权重高于 @import 的权重吗,例如:
/* @import "03.css"; */
body,
html {
    background-color: aquamarine;
}
/* @import "03.css"; */
  • • 在页面中:不存在权重问题,谁在最低下就使用谁的样式
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta
            name="viewport"
            content="width=device-width, initial-scale=1.0"
        />
        <title>Document</title>
    </head>
    <body>
        <div class="container"></div>
    </body>
</html>
<link rel="stylesheet" href="./01.css" />
<style>
    @import "./03.css";
</style>

3. 对盒模型的理解?

  • • 组成:由四部分组成:margin, padding, border, content
  • • 分类:标准盒模型 和 怪异盒模型(IE 盒模型)
  • • 标准盒模型:width 和 height 的范围只包含了 content
    img
  • • 怪异盒模型:width 和 height 的范围只包含了 border, padding, content
    img
  • • 两者区别:在于 width 和 height 所包含的范围不同
  • • 属性:
  • • 标准盒模型:box-sizing: content-box;
  • • 怪异盒模型:box-sizing: border-box;

4. 隐藏元素的方法有哪些?

  1. 1. display: none;: 不会渲染该元素,不会占位,也不会响应绑定的监听事件
  2. 2. visibility: hidden;: 会渲染,但是不会显示且会占位,也不会响应绑定的监听事件
  3. 3. opacity: 0;: 将元素的透明度设置为 0, 以此来达到隐藏元素的效果,会占位,能够响应绑定的监听事件
  4. 4. position: absolute;: 使用绝对定位将元素移除了可视区域外,不会占位,以此来实现元素的隐藏
  5. 5. z-index:负值;: 使用其他元素将该元素隐藏,会占位
  6. 6. clip:position:absolute; clip: rect(200px, 200px, 200px, 200px);/clip-path:clip-path: circle(0); : 使用元素裁切的 方式实现元素隐藏,会占位,不会响应绑定的监听事件
  7. 7. transform: scale(0,0): 使用缩放,来实现元素的隐藏,会占位,但是不会响应绑定的监听事件
  8. 8. filter: opacity(0): 使用元素滤镜来改变元素的透明度, 会占位

5. 伪元素和伪类的区别和作用?

  • • 伪类:将某种状态时添加到已有元素上,这个状态是根据用户的行为变化而变化为的。比如: hover,active, visited
  • • 伪元素:用于创建一些原本不在文档树中的元素或样式, 比如:::after,::before。
  • • 区别:
  • • 伪类操作的对象是文档树种已有的元素或样式
  • • 伪元素则是创建一个文档树以外的元素或样式
  • • : 表示伪类
  • • :: 表示伪元素
  • • 作用:
  • • 伪类:通过在元素选择器上加入伪类改变元素的状态
  • • 伪元素:通过对元素的操作进而改变元素

6. CSS3 有哪些新特性?

  • • 圆角:border-radius: 8px;
  • • 阴影:text-shadown: 2px 2px #ff0000; box-shadown: 10px 10px 5px #888888;
  • • 文字方向:text-decoration
  • • 渐变:linear-gradient: 线性渐变 radial-gradient 径向渐变
  • • 旋转:transform
  • • css选择器:伪类选择器:first-child, 伪元素选择器,否定选择器(:not),属性选择器[title="one"]
  • • 多列布局:multi-column:
  • • column: 规定列宽和列数
  • • column-count: 列的数量
  • • column-width: 列宽
  • • column-gap: 列间隙
  • • column-rule: 列之间的宽度,样式和颜色
  • • column-span:
  • • column-fill: 列填充:auto: 根据内容填充。balance: 每列平均

7. 对媒体查询的理解?

  • • 使用 @media 查询,可针对不同的媒体类型定义不同的样式,@media 可针对不同的屏幕尺寸设置不同的样式,特别是设置响应式的页面, @media 非常有用。当重置浏览器大小的过程中,页面会根据浏览器的宽度和高度重新渲染页面。

8. 对 BFC 的理解,如何创建 BFC?

  • • 定义:
  • • Box: CSS 布局的对象和基本单位,一个页面由很多个 box 组成,这个 Box 就是我们常说的盒模型
  • • Formatting context: 块级格式化上下文,页面中的一个渲染区域,有一套渲染规则,它决定了其子元素如何定位,以及其他元素的关系和相互作用。
  • • 理解:BFC(Block Formatting Context, BFC) 块级格式化上下文,页面布局盒模型的一种 CSS 渲染模式,是一个独立的容器,在这个容器中里面的元素和外部的元素互不影响。
  • • 创建 BFC 的条件:
  1. 1. 根元素:html,body
  2. 2. 浮动:float 除 none 以外的值
  3. 3. 定位:position 为绝对定位(absoluate) 和 固定定位(fixed)
  4. 4. dispaly 属性:表格布局(grid: table-cell,table-caption) 和 flex(flex-items,flow-root) 布局
  5. 5. multi column(多列布局): column
  6. 6. overflow: 值为 hidden, auto, scroll
  • • BFC 的特点:
  1. 1. 垂直方向上,自上而下排列,和文档流的排列方式一致
  2. 2. 在 BFC 中上下两个相邻的两个容器的 margin 会重叠
  3. 3. 计算 BFC 的高度时,需要计算浮动元素的高度
  4. 4. BFC 区域不会与浮动的容器发生重叠
  5. 5. BFC 是独立的容器,容器内部的元素不会影响外部元素
  6. 6. 每个元素的 margin-left 值和容器的 border-left 相接触
  • • BFC 的作用:
  1. 1. 解决 margin 重叠问题:由于 BFC 是一个独立的区域,内部的元素和外部的元素互不影响,将两个元素变为两个 BFC,就解决了 margin 重叠的问题。
  2. 2. 解决高度塌陷问题:在对子元素设置浮动后,父元素会发生高度塌陷,也就是父元素的高度变为 0。解决这个问题,只需要把父元素变成一个 BFC。常用的办法是给父元素设置overflow:hidden
  3. 3. 创建自适应两栏布局:可以用来创建自适应两栏布局:左边的宽度固定,右边的宽度自适应。

9. 如何设置小于 12px 的字体?

  • • 使用 webkit 内核的: -webkit-text-size-adjust: none;。chrome 27 版本后不可用了。
  • • 使用 css3 的 transform 属性: transform: scale(0.5);
  • • 内容固定不变的情况下,将文字内容做成图片,使用图片来解决

10. 单行/多行文本溢出?

/* 多行文本溢出 */
display: -webkit-box; /*作为弹性伸缩盒子模型显示。 */
-webkit-box-orient:vertical;    /*设置伸缩盒子的子元素排列方式:从上到下垂直排列 */
-webkit-line-clamp:3;   /*显示的行数 */
overflow: hidden;   /*溢出隐藏 */
text-overflow: ellipsis;    /*溢出用省略号显示 */
/* 单行文本溢出 */
white-space: nowrap;    /*规定段落中的文本不进行换行 */
overflow: hidden;   /*溢出隐藏 */
text-overflow: ellipsis;    /*溢出用省略号显示 */

11. 实现一个三角形?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="div1"></div>
    <div class="div2"></div>
    <div class="div3"></div>
    <div class="div4"></div>
</body>
</html>
<style>
    div{
        width: 0px;
        height: 0px;
        border: 50px solid transparent;
    }
    .div1{
        border-top-color: red;
    }
    .div2{
        border-bottom-color: red;
    }
    .div3{
        border-left-color: red;
    }
    .div4{
        border-right-color: red;
    }
</style>

12. 实现一个扇形?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="div1"></div>
</body>
</html>
<style>
    .div1{
        width: 0;
        height: 0;
        border-radius: 100px;
        border: 100px solid transparent;
        border-top-color: red;
    }
</style>

13. 画一条0.5px的线?

  • • 使用 transform 的 scale 来完成
width: 250px;
height: 1px;
background-color: gray;
transform: scaleY(0.5);

14. 常见的图片格式以及使用场景?

  1. 1. bmp: 无损的,此图片格式不会对数据进行压缩,所以 bmp 格式的图片通常都是较大文件
  2. 2. git: 无损的,特点是文件小,适用场景:对色彩要求不高且文件体积较小
  3. 3. jpeg,jpg: 有损的,有损压缩会导致图片模糊,文件类型比 gif 较大
  4. 4. png-8:无损的,png-8 比 gif 文件还小
  5. 5. png-24: 无损的,优点在于压缩了图片数据
  6. 6. svg: 无损矢量图,放大不会失真,适用场景:绘制 LOGO, Icon
  7. 7. webp: 同时支持有损和无损,同质量的图片,webp 拥有更小的文件体积,更好地提升用户体验,
  • • 在无损压缩情况下:相同质量的 webp 图片,要比 png 小 26%
  • • 在有损压缩情况下,具有相同精度的 webp 图片,文件大小要比 jpeg 小 25%~34%
  • • webp 还支持图片透明度,一个无损压缩的 webp 图片,想要支持透明度,只需要 22% 的格外文件大小。

15. CSS 优化和提高性能的方法有哪些?

  • • 加载性能
  1. 1. css 压缩
  2. 2. 减少使用属性简写方式
  3. 3. 减少使用 @import,建议使用 link,
  • • 选择器性能
  1. 1. 减少选择器嵌套层级
  2. 2. 使用关键的选择器,不要逐层进行选择
  • • 渲染性能
  1. 1. 慎重使用浮动和定位
  2. 2. 尽量减少重绘和回流的发生
  3. 3. 删除空规则,也就是预留样式->{}
  4. 4. 属性值为浮点值时,省略前面的 0
  5. 5. 不要使用 @import 前缀引用样式,会影响 css 加载速度
  6. 6. 避免选择器嵌套过深
  7. 7. 不滥用 web 字体
  • • 可维护性,健壮性
  1. 1. 抽离公共样式
  2. 2. 样式与内容分离

16. ::before 和 :after 的双冒号和单冒号有什么区别?

  1. 1. 单冒号(:) 表示伪类,双冒号(::)表示伪元素
  2. 2. 在 CSS2.1 中,伪元素都是使用 单冒号 来表示伪元素的,但在 CSS3 规范中,伪元素的语法被修改为使用 双冒号

17. CSS 预处理器/后处理器是什么?为什么要使用他们?

  • • 预处理器:less, sass, styuls,它们增加了 css 代码的复用性,例如:变量,循环,方法等
  • • 后处理器:postcss,最常做的是给 css 代码添加浏览器前缀,实现跨浏览器兼容性的问题、
  • • 为什么要使用他们?
  1. 1. 结构清晰,便于扩展
  2. 2. 屏蔽浏览器私有语法的差异
  3. 3. 使用多重继承
  4. 4. 提到 css 代码的兼容性
目录
相关文章
|
4月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
transition过渡属性 早期在Web中要实现动画效果,都是依赖于JavaScript或Flash来完成。 但在CSS3中新增加了一个新的模块transition,它可以通过一些简单的CSS事件来触发元素的外观变化, 让效果显得更加细腻。简单点说,就是通过鼠标经过、获得焦点,被点击或对元素任何改变中触发, 并平滑地以动画效果改变CSS的属性值。 在CSS中创建简单的过渡效果可以从以下几个步骤来实现: 在默认样式中声明元素的初始状态样式; 声明过渡元素最终状态样式,比如悬浮状态; 在默认样式中通过添加
272 0
|
4月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
transform变形 css3在原来的基础上新增了变形和动画相关属性,通过这些属性可以实现以前需要大段JavaScript才能实现的 功能。 CSS3的变形功能可以对HTML组件执行位移、旋转、缩放、倾斜4种几何变换,这样的变换可以控制HTML组件 呈现出丰富的外观。 借助于位移、旋转、缩放、倾斜这4种几何变换,CSS3提供了transition动画。 transition动画比较简单,只要指定HTML组件的哪些CSS属性需要使用动画效果来执行变化,并指定动画时间,就可保证动画播放。 比transitio
233 1
|
4月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
Flex 布局 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。 一、Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
342 0
|
4月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
盒模型 盒模型: 所谓盒模型,就是浏览器为页面中的每个HTML元素生成的矩形盒子。 这些盒子们都要按照可见板式模型在页面上排布。 可见的板式模型主要由三个属性控制:position 属性、display 属性和 float属性。 position属性控制页面上元素间的位置关系。 display属性控制元素是堆叠、并排或者不在页面上显示。 float属性提供控制的方法,以便于把元素组成成多栏布局。 盒模型讲解: 在默认的情况下,每个盒子的边框是不可见的,背景也是透明的。 所以我们 不能直接的看到页面中的盒
272 1
|
4月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
伪类:伪类这个叫法源自于它们跟类相似,但实际上并没有类会附加到标记中的标签上。 伪类分为两种(以及新增的伪类选择器): UI伪类:会在HTML元素处于某种状态时(例如:鼠标指针位于连接上),为该元素应用CSS样式。 :hover 结构化伪类:会在标记中存在某种结构上的关系时 例如: 某元素是一组元素中的第一个或最后一个,为该元素应用CSS样式。 :not和:target(CSS3新增的两个特殊的伪类选择器)
267 1
|
4月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
上下文选择器(迭代选择器):基于祖先或同胞元素选择一个元素 ID和类选择器:基于id#和class的属性值进行选择元素。 属性选择器:基于属性的有无和特征进行选择。 ①上下文选择器: 上下文选择器的语法格式:标签1 标签2{属性:值;} //注意:组合选择器和上下文选择器的区别,组合选择器以逗号隔开, 上下文选择器以空格隔开 ②特殊的上下文选择器 子选择器> : 语法格式:标签1>标签2 解释说明:标签1和标签2
307 0
|
4月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
Animation属性 css3为Animation动画提供的几个属性如下: 属性名 属性值 animation-name 指定动画名称,该属性指定一个已有的关键帧定义。 animation-duration 指定动画持续时间。 animation-timing-funtion 指定动画变化速度。 animation-delay 指定动画延迟多长时间才开始执行。 animation-iteration-count 指定动画的循环执行次数。 animation:这是一个复合属性。
345 2
|
4月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
position定位(核心) 我们讲盒模型的时候,提到了3个属性可以用来控制页面排版。 三大属性:position属性,display属性,float属性。 position 属性控制页面上元素间的位置关系。 display 属性控制页面元素是否显示或者是堆叠还是并排显示。 float 属性提供控制方法。 通过float这种控制方法,可以实现多栏布局,导航菜单等等。 position属性是干嘛用的?怎么用?有哪些属性值? position属性控制页面上元素间的位置关系,也就是排版。 怎么用?要知道怎么用
473 1
|
4月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
继承 我们的CSS中很多的属性也是可以继承的,其中相当一部分是跟文字的相关的,比如说颜色、字体、字号。 当然还有一部分是不能继承的。 例如边框、内外边距。 层叠 层叠是CSS的核心机制。 层叠的工作机制: 当元素的同一个样式属性有多种样式值的时候,CSS就是靠层叠机制来决定最终应用哪种样式。 层叠规则: 层叠规则一:找到应用给每个元素和属性的声明。 说明:浏览器在加载每个页面时,都会据此查找到每条CSS规则, 并标识出所有受到影响的HTML元素。
159 1
|
10月前
|
前端开发