20240308-1-校招前端面试常见问题CSS

news2025/6/20 23:16:08

校招前端面试常见问题【3】——CSS

在这里插入图片描述

1、盒模型

Q:请简述一下 CSS 盒模型?

W3C 模式:盒子宽=width+padding+border+margin
怪异模式:盒子宽=width+margin

Q:inline、block、inline-block 元素的区别?

inline(行内元素):
使元素变成行内元素,拥有行内元素的特性,即可以与其他行内元素共享一行,不会独占一行。
不能更改元素的 height,width 的值,大小由内容撑开。
可以使用 padding 上下左右都有效,margin 只有 left 和 right 产生边距效果,但是 top 和 bottom 就不行。

block(块级元素):
使元素变成块级元素,独占一行,在不设置自己的宽度的情况下,块级元素会默认填满父级元素的宽度。
能够改变元素的 height,width 的值。
可以设置 padding,margin 的各个属性值,top,left,bottom,right 都能够产生边距效果。

inline-block(融合行内于块级):
结合了 inline 与 block 的一些特点,结合了上述 inline 的第 1 个特点和 block 的第 2,3 个特点。
用通俗的话讲,就是不独占一行的块级元素。

2、选择器

Q:请列举出你用过的 CSS 选择器?

普通选择器:

选择器例子描述
.class.intro选择 class=“intro” 的所有元素。
#id#firstname选择 id=“firstname” 的元素。
**选择所有元素
elementp选择所有

元素

层次选择器

选择器例子描述
element.classp.intro选择 class=“intro” 的所有

元素

element,elementdiv, p选择所有
元素和所有

元素

element elementdiv p选择
元素内的所有

元素

element>elementdiv > p选择父元素是
的所有

元素

element+elementdiv + p选择紧跟
元素的首个

元素

element1~element2p ~ ul选择前面有

元素的每个

  • 元素

属性选择器

选择器例子描述
[attribute][target]选择带有 target 属性的所有元素。
[attribute=value][target=_blank]选择带有 target=“_blank” 属性的所有元素。

伪类选择器

选择器例子描述
:activea:active选择活动链接。
::afterp::after在每个

的内容之后插入内容。

::beforep::before在每个

的内容之前插入内容。

:first-childp:first-child选择属于父元素的第一个子元素的每个

元素。

:focusinput:focus选择获得焦点的 input 元素。
:fullscreen:fullscreen选择处于全屏模式的元素。
:hovera:hover选择鼠标指针位于其上的链接。
:linka:link选择所有未访问过的链接。
:not(selector):not§选择非

元素的每个元素。

:nth-child(n)p:nth-child(2)选择属于其父元素的第二个子元素的每个

元素。

:visiteda:visited选择所有已访问的链接。

Q: CSS 选择器的权重是什么样的?

样式权重
!important权重最大
内联样式权重 1000
类选择器权重 10
id 选择器权重 100
派生选择器权重 1

3、常见规则

Q:position 的值有哪几种,布局方式是什么样的?

描述
static元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。
relative相对于其正常位置进行定位,元素仍保持其未定位前的形状,它原本所占的空间仍保留。
absolute元素框从文档流完全删除,相对于值不为 static 的第一个父元素进行定位。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
fixed元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。

Q: 简单描述下 flex 布局?

使用 flex 布局的元素会成为容器(flex container),它内部的元素自动成为 flex 项目(flex item)。
容器拥有两根隐形的轴,水平的主轴(main axis),和竖直的交叉轴。
此外,需注意使用 flex 容器内元素,即 flex item 的 float,clear、vertical-align 属性将失效。

flex 的各种属性:

1、flex-direction
属性决定主轴的方向(即项目的排列方向)。

row(默认值):主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。
2、flex-wrap
默认情况下,项目都排在”轴线”上。本属性定义如果一条轴线排不下,如何换行。

nowrap(默认值):不换行。
wrap:换行,第一行在上方。
wrap-reverse:换行,第一行在下方。

3、align-items
定义弹性盒子在交叉轴上如何对齐。

flex-start:交叉轴的起点对齐。
flex-end:交叉轴的终点对齐。
center:交叉轴的中点对齐。
baseline: 项目的第一行文字的基线对齐。
stretch(默认值):如果项目未设置高度或设为 auto,将占满整个容器的高度。


4、justify-content
定义弹性盒子在主轴方向上的对齐方式。

flex-start:容器开头对齐。
flex-end:容器终点对齐。
center:容器中点对齐。

4、常见概念

Q:FC 是什么?BFC 和 IFC 是什么?

FC:格式化模型。

FC 会根据 CSS 盒子模型将文档中的元素转换为一个个的盒子,每个盒子的布局由以下因素决定:
1、盒子的尺寸:精确指定、由约束条件指定或没有指定
2、盒子的类型:行内盒子(inline)、行内级盒子(inline-level)、原子行内级盒子(atomic inline-level)、块盒子(block)
3、定位方案:普通流定位、浮动定位或绝对定位
4、文档树中的其它元素:即当前盒子的子元素或兄弟元素
5、视窗尺寸与位置
6、包含的图片的尺寸
7、其他的某些外部因素

BFC:块级格式化上下文。

1、在 BFC 中,盒子从顶端开始垂直地一个接一个地排列,两个盒子之间的垂直的间隙是由它们的 margin 值所决定的。在一个 BFC 中,两个相邻的块级盒子的垂直外边距会产生折叠。
2、在 BFC 中,每一个盒子的左外边缘会触碰到容器的左边缘。
3、浮动元素、绝对定位元素,以及设置了 overflow 属性(除了 visible)的元素不是块级盒子的块容器,因此会为他们的内容创建新的 BFC。

IFC:行内级格式化上下文。

1、在 IFC 中,盒子一个接着一个地水平放置。这些盒子会通过不同的方式进行对齐,如底部对齐,顶部对齐,文字基线对齐。
2、矩形区域包含着来自一行的盒子叫做盒行盒(line box)。
3、line box 的宽度由浮动情况和它的包含块决定。line box 的高度由 line-height 计算决定(也就是说,由其内部的块撑开)。

Q:如何清除浮动?

浮动可以理解为让某个 div 元素脱离标准流,漂浮在标准流之上。
一个浮动元素会尽量向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。

清除浮动可以理解为打破横向排列。清除浮动的关键字是 clear,其取值有以下几种:
1、none,默认值。允许两边都可以有浮动对象
2、left,不允许左边有浮动对象
3、right,不允许右边有浮动对象
4、both,不允许有浮动对象
对于 CSS 的清除浮动(clear),一定要牢记:这个规则只能影响使用清除的元素本身,不能影响其他元素。

Q:什么是回流?什么是重绘?

当页面中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新绘制,这就称为回流。每个页面至少需要一次回流,就是在页面第一次加载的时候。

当页面中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如 background-color。则就叫称为重绘。

任何对页面中元素的操作都会引起回流或者重绘,比如:

1、添加、删除元素(回流+重绘)
2、隐藏元素,display:none(回流+重绘),visibility:hidden(只重绘,不回流)
3、移动元素,比如改变 top,left(重绘+回流)。
4、对 style 的操作(对不同的属性操作,影响不一样)。
5、还有一种是用户的操作,比如改变浏览器大小,改变浏览器的字体大小等(回流+重绘)

Q:如何开启 GPU 加速?其优缺点是什么?

当页面中某个 DOM 元素应用了某些 CSS 规则时就会开启 GPU 加速,如 3D 变换:

.cube {
  -webkit-transform: translate3d(250px, 250px, 250px) rotate3d(250px, 250px, 250px, -120deg) scale3d(0.5, 0.5, 0.5);
}

如果不想对元素用 3D 变换但是还想要开 GPU 加速,就可以:

.cube {
  -webkit-transform: translateZ(0);
  -moz-transform: translateZ(0);
  -ms-transform: translateZ(0);
  -o-transform: translateZ(0);
  transform: translateZ(0);
}

但是,一定要注意:不要随意使用 GPU 加速,如果的确能够显著提高性能,可以尝试使用 GPU 加速。但是另一方面,使用 GPU 可能会导致严重的性能问题,因为它增加了内存的使用,而且它会减少移动端设备的电池寿命。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1503306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0环PEB断链实现

截止到昨天那里我们的思路就清晰了,通过EPROCESS找到我们要隐藏的进程的ActiveProcessLinks,将双向链表的值修改,就可以将我们想要隐藏的这个进程的ActiveProcessLinks从双向链表中抹去的效果,这里的话如果在windbg里面直接使用ed…

[笔记]Crash Course Computer Science

文章目录 二进制算术逻辑单元 ALU算术单元逻辑单元 寄存器&内存CPU 中央处理器指令CPU结构运行命令时钟 高级CPU设计集成电路电子管晶体管集成电路印刷电路板 PCB Printed Circuit Board光刻摩尔定律 二进制 byte 在电脑中的单位换算: kilobyte 千字节 megaby…

【C++】手把手教你模拟实现 vector

目录 一、构造/析构/拷贝 1、构造函数 1️⃣无参的构造函数 2️⃣带参的构造函数 3️⃣类模板的构造函数 2、析构函数 3、拷贝构造 二、修改操作 1、reserve 【错误版本】 🌟【解答】正确版本 2、resize 3、push_back 4、pop_back 5、insert 6、era…

【LV15 DAY7 阻塞和非阻塞】

一、五种IO模型------读写外设数据的方式 阻塞: 不能操作就睡觉非阻塞:不能操作就返回错误 多路复用:委托中介监控信号驱动:让内核如果能操作时发信号,在信号处理函数中操作异步IO:向内核注册操作请求,内核…

Web本体语言OWL

语义网(Semantic Web): 语义网是万维网联盟(W3C)提出的一种愿景,旨在增强现有Web的表达能力和智能处理能力,通过标准化的技术手段赋予网络数据更加精确和可计算的语义,使得机器能够…

Ubuntu18/20运行ORB-SLAM3

ORB-SLAM3复现(ubuntu18/20) 文章目录 ORB-SLAM3复现(ubuntu18/20)1 坐标系与外参Intrinsic parameters2 内参Intrinsic parameters2.1 相机内参① 针孔模型Pinhole② KannalaBrandt8模型③ Rectified相机 2.2 IMU内参 3 VI标定—外参3.1 Visual calibration3.2 Inertial calib…

【Appium问题】每次启动appium都会安装一次uiautomator

问题 每次启动appium,都需要安装一次uiautomator2比较麻烦 解决 在配置文件capabilities 中增加参数skipServerInstallationTrue

CSDN,最全API接口测试入门教程到实战

由于自己想学习API方面的测试,但是市面上搜不到相关的图书可以系统学习,网上的内容又零零散散,适合有点API开发基础的人去搜索。为了方面新手学习API测试,现在整理了他人的宝贵经验和自己的学习心得,尽量在一篇文章中囊…

git删除comimit提交的记录

文章目录 本地的删除远程同步修改上次提交更多详情阅读 本地的删除 例如我的提交历史如下 commit 58211e7a5da5e74171e90d8b90b2f00881a48d3a Author: test <test36nu.com> Date: Fri Sep 22 20:55:38 2017 0800add d.txtcommit 0fb295fe0e0276f0c81df61c4fd853b7a00…

【开源】JAVA+Vue.js实现食品生产管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 加工厂管理模块2.2 客户管理模块2.3 食品管理模块2.4 生产销售订单管理模块2.5 系统管理模块2.6 其他管理模块 三、系统展示四、核心代码4.1 查询食品4.2 查询加工厂4.3 新增生产订单4.4 新增销售订单4.5 查询客户 五、…

水果音乐编曲软件 FL Studio v21.2.3.4004 中文免费版(附中文设置教程)以及新功能介绍

FL studio21中文别名水果编曲软件&#xff0c;是一款全能的音乐制作软件&#xff0c;包括编曲、录音、剪辑和混音等诸多功能&#xff0c;让你的电脑编程一个全能的录音室&#xff0c;它为您提供了一个集成的开发环境&#xff0c;使用起来非常简单有效&#xff0c;您的工作会变得…

Linux编程3.6 进程-其他进程及函数

1、僵尸进程 子进程结束但是没有完全释放内存&#xff08;在内核中的task_struct没有释放&#xff09;&#xff0c;该进程就成为僵尸进程。当僵尸进程的父进程结束后就会被init进程领养&#xff0c;最终被回收。避免僵尸进程 让僵尸进程的父进程来回收&#xff0c;父进程每隔一…

StringBuffer与StringBuilder的常用方法及源码分析。

StringBuffer与StringBuilder的常用方法及源码分析 1. 常用方法2. 源码分析 StringBuffer和StringBuilder都是用于处理字符串的可变对象&#xff0c;它们之间的主要区别在于StringBuffer是线程安全的&#xff0c;而StringBuilder是非线程安全的。 1. 常用方法 append()&#…

使用jar命令删除.jar文件中的重复的类和目录并重新打包

引言&#xff1a; android项目&#xff0c;引入的 .jar包 和 .aar中 有相同的类&#xff0c;导致编译冲突&#xff0c;由于这些依赖项没有上传到Maven仓库&#xff0c;无法使用 exclude 排除&#xff0c;只能尝试修改jar文件&#xff0c;删除重复的代码&#xff0c;再重新打包…

【深度学习笔记】6_8 长短期记忆(LSTM)

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 6.8 长短期记忆&#xff08;LSTM&#xff09; 本节将介绍另一种常用的门控循环神经网络&#xff1a;长短期记忆&#xff08;long shor…

qt自绘标尺,鼠标拖动画线测量两点距离

效果如图&#xff1a; 图像显示窗口元素组成&#xff1a; 图像显示窗口整体构成&#xff1a; 长度测量窗口ui&#xff1a; 思路&#xff1a; 首先自定了一个RulerWidget&#xff0c;其中有一个布局&#xff0c;布局中包含自定义的水平Ruler、自定义垂直Ruler、单位QLab…

洗地机怎么选|洗地机哪款好用?添可、希亦、美的洗地机哪个最耐用质量好?

在现代生活中&#xff0c;屋内清洁是一项必不可少的工作&#xff0c;但也是一项费时费力的工作。随着科技的进步&#xff0c;家庭清洁工具也正经历着革命性的变革。洗地机&#xff0c;一种集吸尘、拖地、清洗于一体的智能家居清洁工具&#xff0c;正逐渐成为现代家庭必备的家电…

15. 三数之和 - 力扣

1. 题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 …

华容道问题求解_详细设计(四)之查找算法2_BFS

&#xff08;续上篇&#xff09; 利用BFS查找&#xff0c;会找到最短路径&#xff08;没有权重的图&#xff09;&#xff0c;这个道理比较简单&#xff0c;这是由于寻找路径的方法都是从起点或者接近起点的位置开始的。查找过程如果画出图来&#xff0c;类似于一圈圈的放大&…

C++初阶:类与对象(中篇)

目录 2. 类的六个默认成员函数2.1 构造函数2.1.1 构造函数的定义方式 2.2 析构函数2.2.1 析构函数定义方式 2.3拷贝构造函数2.3.1 拷贝构造函数的定义方式2.3.2 深拷贝与浅拷贝 2.4 赋值运算符的重载2.4.1 运算符重载2.4.2 运算符的重载的定义方式2.4.3 默认成员函数&#xff1…