2024年最全CSS前端经典面试题及解析——小白入门必备,2024年最新计算机网络专业面试常问问题
2401_84617080 2024-07-04 12:03:02 阅读 75
最后
喜欢的话别忘了关注、点赞哦~
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
在大型项目中,我会使用 Clearfix 方法,在需要的地方使用<code>.clearfix。设置overflow: hidden
的方法可能使其子元素显示不完整,当子元素的高度大于父元素时。
6.如何解决不同浏览器的样式兼容性问题?
在确定问题原因和有问题的浏览器后,使用单独的样式表,仅供出现问题的浏览器加载。这种方法需要使用服务器端渲染。
使用已经处理好此类问题的库,比如 Bootstrap。
使用 autoprefixer
自动生成 CSS 属性前缀。
使用 Reset CSS 或 Normalize.css。
7.如何为功能受限的浏览器提供页面? 使用什么样的技术和流程?
优雅的降级:为现代浏览器构建应用,同时确保它在旧版浏览器中正常运行。
Progressive enhancement - The practice of building an application for a base level of user experience, but adding functional enhancements when a browser supports it.
渐进式增强:构建基于用户体验的应用,但在浏览器支持时添加新增功能。
利用 caniuse.com 检查特性支持。
使用 autoprefixer
自动生成 CSS 属性前缀。
使用 Modernizr进行特性检测。
8.有什么不同的方式可以隐藏内容(使其仅适用于屏幕阅读器)?
这些方法与可访问性有关。
visibility: hidden
:元素仍然在页面流中,并占用空间。
width: 0; height: 0
:使元素不占用屏幕上的任何空间,导致不显示它。
position: absolute; left: -99999px
: 将它置于屏幕之外。
text-indent: -9999px
:这只适用于block
元素中的文本。
Metadata: 例如通过使用 Schema.org,RDF 和 JSON-LD。
WAI-ARIA:如何增加网页可访问性的 W3C 技术规范。
即使 WAI-ARIA 是理想的解决方案,我也会采用绝对定位方法,因为它具有最少的注意事项,适用于大多数元素,而且使用起来非常简单。
参考资料:
www.w3.org/TR/wai-aria…
developer.mozilla.org/en-US/docs/…
a11yproject.com/
9.编写高效的 CSS 应该注意什么?
首先,浏览器从最右边的选择器,即关键选择器(key selector),向左依次匹配。根据关键选择器,浏览器从 DOM 中筛选出元素,然后向上遍历被选元素的父元素,判断是否匹配。选择器匹配语句链越短,浏览器的匹配速度越快。避免使用标签和通用选择器作为关键选择器,因为它们会匹配大量的元素,浏览器必须要进行大量的工作,去判断这些元素的父元素们是否匹配。
BEM (Block Element Modifier) methodology recommends that everything has a single class, and, where you need hierarchy, that gets baked into the name of the class as well, this naturally makes the selector efficient and easy to override. BEM (Block Element Modifier)原则上建议为独立的 CSS 类命名,并且在需要层级关系时,将关系也体现在命名中,这自然会使选择器高效且易于覆盖。
搞清楚哪些 CSS 属性会触发重新布局(reflow)、重绘(repaint)和合成(compositing)。在写样式时,避免触发重新布局的可能。
参考资料:
developers.google.com/web/fundame…
csstriggers.com/
10.使用 CSS 预处理的优缺点分别是什么?
优点:
提高 CSS 可维护性。
易于编写嵌套选择器。
引入变量,增添主题功能。可以在不同的项目中共享主题文件。
通过混合(Mixins)生成重复的 CSS。
Splitting your code into multiple files. CSS files can be split up too but doing so will require a HTTP request to download each CSS file.
将代码分割成多个文件。不进行预处理的 CSS,虽然也可以分割成多个文件,但需要建立多个 HTTP 请求加载这些文件。
缺点:
需要预处理工具。
重新编译的时间可能会很慢。
11.对于你使用过的 CSS 预处理,说说喜欢和不喜欢的地方?
喜欢:
绝大部分优点上题以及提过。
Less 用 JavaScript 实现,与 NodeJS 高度结合。
Dislikes:
我通过node-sass
使用 Sass,它用 C ++ 编写的 LibSass 绑定。在 Node 版本切换时,我必须经常重新编译。
Less 中,变量名称以@
作为前缀,容易与 CSS 关键字混淆,如@media
、@import
和@font-face
。
12.如何实现一个使用非标准字体的网页设计?
使用@font-face
并为不同的font-weight
定义font-family
。
13.解释浏览器如何确定哪些元素与 CSS 选择器匹配。
这部分与上面关于编写高效的 CSS 有关。浏览器从最右边的选择器(关键选择器)根据关键选择器,浏览器从 DOM 中筛选出元素,然后向上遍历被选元素的父元素,判断是否匹配。选择器匹配语句链越短,浏览器的匹配速度越快。
例如,对于形如p span
的选择器,浏览器首先找到所有<span>
元素,并遍历它的父元素直到根元素以找到<p>
元素。对于特定的<span>
,只要找到一个<p>
,就知道’`已经匹配并停止继续匹配。
参考资料:
stackoverflow.com/questions/5…
14.描述伪元素及其用途。
CSS 伪元素是添加到选择器的关键字,去选择元素的特定部分。它们可以用于装饰(:first-line
,:first-letter
)或将元素添加到标记中(与 content:…组合),而不必修改标记(:before
,:after
)。
:first-line
和:first-letter
可以用来修饰文字。
上面提到的.clearfix
方法中,使用clear: both
来添加不占空间的元素。
使用:before
和after
展示提示中的三角箭头。鼓励关注点分离,因为三角被视为样式的一部分,而不是真正的 DOM。如果不使用额外的 HTML 元素,只用 CSS 样式绘制三角形是不太可能的。
参考资料:
css-tricks.com/almanac/sel…
15.说说你对盒模型的理解,以及如何告知浏览器使用不同的盒模型渲染布局。
CSS 盒模型描述了以文档树中的元素而生成的矩形框,并根据排版模式进行布局。每个盒子都有一个内容区域(例如文本,图像等)以及周围可选的padding
、border
和margin
区域。
CSS 盒模型负责计算:
块级元素占用多少空间。
边框是否重叠,边距是否合并。
盒子的尺寸。
盒模型有以下规则:
块级元素的大小由width
、height
、padding
、border
和margin
决定。
如果没有指定height
,则块级元素的高度等于其包含子元素的内容高度加上padding
(除非有浮动元素,请参阅下文)。
如果没有指定width
,则非浮动块级元素的宽度等于其父元素的宽度减去父元素的padding
。
元素的height
是由内容的height
来计算的。
元素的width
是由内容的width
来计算的。
默认情况下,padding
和border
不是元素width
和height
的组成部分。
参考资料:
www.smashingmagazine.com/2010/06/the…
这是我整理的面试题中的一部分,此外还包含HTML、JavaScript、React、Vue、浏览器、服务端与网络、算法等等…
篇幅有限,仅展示部分内容
如果你需要这份完整版的面试题+解析,【点击我】就可以了,免费分享给大家。
16.<code>* { box-sizing: border-box; }会产生怎样的效果?
元素默认应用了box-sizing: content-box
,元素的宽高只会决定内容(content)的大小。
box-sizing: border-box
改变计算元素width
和height
的方式,border
和padding
的大小也将计算在内。
元素的height
= 内容(content)的高度 + 垂直方向的padding
+ 垂直方向border
的宽度
元素的width
= 内容(content)的宽度 + 水平方向的padding
+ 水平方向border
的宽度
17. display
的属性值都有哪些?
none
, block
, inline
, inline-block
, table
, table-row
, table-cell
, list-item
.
18. inline
和inline-block
有什么区别?
我把block
也加入其中,为了获得更好的比较。
| | block
| inline-block
| inline
|
| — | — | — | — |
| 大小 | 填充其父容器的宽度。 | 取决于内容。 | 取决于内容。 |
| 定位 | 从新的一行开始,并且不允许旁边有 HTML 元素(除非是float
) | 与其他内容一起流动,并允许旁边有其他元素。 | 与其他内容一起流动,并允许旁边有其他元素。 |
| 能否设置width
和height
| 能 | 能 | 不能。 设置会被忽略。 |
| 可以使用vertical-align
对齐 | 不可以 | 可以 | 可以 |
| 边距(margin)和填充(padding) | 各个方向都存在 | 各个方向都存在 | 只有水平方向存在。垂直方向会被忽略。 尽管border
和padding
在content
周围,但垂直方向上的空间取决于’line-height’ |
| 浮动(float) | - | - | 就像一个block
元素,可以设置垂直边距和填充。 |
19.relative
、fixed
、absolute
和static
四种定位有什么区别?
经过定位的元素,其position
属性值必然是relative
、absolute
、fixed
或sticky
。
static
:默认定位属性值。该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时 top, right, bottom, left 和 z-index 属性无效。
relative
:该关键字下,元素先放置在未添加定位时的位置,再在不改变页面布局的前提下调整元素位置(因此会在此元素未添加定位时所在位置留下空白)。
absolute
:不为元素预留空间,通过指定元素相对于最近的非 static 定位祖先元素的偏移,来确定元素位置。绝对定位的元素可以设置外边距(margins),且不会与其他边距合并。
fixed
:不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时,元素会出现在的每页的固定位置。fixed 属性会创建新的层叠上下文。当元素祖先的 transform 属性非 none 时,容器由视口改为该祖先。
sticky
:盒位置根据正常流计算(这称为正常流动中的位置),然后相对于该元素在流中的 flow root(BFC)和 containing block(最近的块级祖先元素)定位。在所有情况下(即便被定位元素为 table
时),该元素定位均不对后续元素造成影响。当元素 B 被粘性定位时,后续元素的位置仍按照 B 未定位时的位置来确定。position: sticky
对 table
元素的效果与 position: relative
相同。
参考资料:
developer.mozilla.org/en/docs/Web…
20.你了解 CSS Flex 和 Grid 吗?
Flex 主要用于一维布局,而 Grid 则用于二维布局。
Flex
flex容器中存在两条轴, 横轴和纵轴, 容器中的每个单元称为flex item。
在容器上可以设置6个属性:
flex-direction
flex-wrap
flex-flow
justify-content
align-items
align-content
注意:当设置 flex 布局之后,子元素的 float、clear、vertical-align 的属性将会失效。
Flex 项目属性
有六种属性可运用在 item 项目上:
order
flex-basis
flex-grow
flex-shrink
flex
align-self
Grid
CSS网格布局用于将页面分割成数个主要区域,或者用来定义组件内部元素间大小、位置和图层之间的关系。
像表格一样,网格布局让我们能够按行或列来对齐元素。 但是,使用CSS网格可能还是比CSS表格更容易布局。 例如,网格容器的子元素可以自己定位,以便它们像CSS定位的元素一样,真正的有重叠和层次。
21.响应式设计与自适应设计有何不同?
响应式设计和自适应设计都以提高不同设备间的用户体验为目标,根据视窗大小、分辨率、使用环境和控制方式等参数进行优化调整。
响应式设计的适应性原则:网站应该凭借一份代码,在各种设备上都有良好的显示和使用效果。响应式网站通过使用媒体查询,自适应栅格和响应式图片,基于多种因素进行变化,创造出优良的用户体验。就像一个球通过膨胀和收缩,来适应不同大小的篮圈。
自适应设计更像是渐进式增强的现代解释。与响应式设计单一地去适配不同,自适应设计通过检测设备和其他特征,从早已定义好的一系列视窗大小和其他特性中,选出最恰当的功能和布局。与使用一个球去穿过各种的篮筐不同,自适应设计允许使用多个球,然后根据不同的篮筐大小,去选择最合适的一个。
参考资料:
developer.mozilla.org/en-US/docs/…
mediumwell.com/responsive-…
css-tricks.com/the-differe…
22.你有没有使用过视网膜分辨率的图形?当中使用什么技术?
我倾向于使用更高分辨率的图形(显示尺寸的两倍)来处理视网膜显示。更好的方法是使用媒体查询,像@media only screen and (min-device-pixel-ratio: 2) { ... }
,然后改变background-image
。
对于图标类的图形,我会尽可能使用 svg 和图标字体,因为它们在任何分辨率下,都能被渲染得十分清晰。
还有一种方法是,在检查了window.devicePixelRatio
的值后,利用 JavaScript 将<img>
的src
属性修改,用更高分辨率的版本进行替换。
参考资料:
www.sitepoint.com/css-techniq…
23.什么情况下,用translate()
而不用绝对定位?什么时候,情况相反。
translate()
是transform
的一个值。改变transform
或opacity
不会触发浏览器重新布局(reflow)或重绘(repaint),只会触发复合(compositions)。而改变绝对定位会触发重新布局,进而触发重绘和复合。transform
使浏览器为元素创建一个 GPU 图层,但改变绝对定位会使用到 CPU。 因此translate()
更高效,可以缩短平滑动画的绘制时间。
当使用translate()
时,元素仍然占据其原始空间(有点像position:relative
),这与改变绝对定位不同。
参考资料:
www.paulirish.com/2012/why-mo…
其他答案
neal.codes/blog/front-…
quizlet.com/28293152/fr…
peterdoes.it/2015/12/03/…
24.一边固定宽度一边宽度自适应
可以使用flex布局 复制下面的HTML和CSS代码 用浏览器打开可以看到效果
.wrap {
display: flex;
justify-content: space-between;
}
.div1 {
min-width: 200px;
}
.div2 {
width: 100%;
background: #e6e6e6;
}
html,
body,
div {
height: 100%;
margin: 0;
}
25.水平垂直居中的方式
flex
// 父容器
display: flex;
justify-content: center;
align-items: center;
position
// 父容器
position: relative;
// 子容器
position:absolute;
margin:auto;
top:0;
bottom:0;
left:0;
right:0;
position+transform
// 父容器
position: relative;
// 子容器
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
table-cell
html, body {
height: 100%;
width: 100%;
margin: 0;
}
.box {
display: table;
height: 100%;
width: 100%;
}
.content {
display: table-cell;
vertical-align: middle;
text-align: center;
}
.inner {
background-color: #000;
display: inline-block;
width: 200px;
height: 200px;
}
前端框架
前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。
以 Vue 为例,我整理了如下的面试题。
如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
上一篇: 解决QT使用QWebEngineView加载不出网页问题和实现qt与html网页基础通信
下一篇: 前端vue使用onlyoffice控件实现word在线编辑、预览(仅列出前端部分需要做的工作,不包含后端部分)
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。