❝ 我是从5月中旬裸辞的,其实在裸辞时,我已经拿了3个 北京
offer
,都是远程面试的,过程还算可以。 我是不太喜欢北京这个城市的,后来都放弃了。又踏上了面试求职之路,一边刷题一边面试,复盘。找工作运气
真的很重要, 运气 + 技术能力,面试过程太难了,来回跑折腾。 如今,我现在已经入职新公司一个月了,公司还可以,955
,办公环境和同事也都挺Nice
。 接下来,我将把我之前遇到的高频面试题分享给读者,送给正在面试的你,由于篇幅 比较长,为了方便阅读 「本篇文章 分享高频HTML
+CSS
面试题」 ❞
HTML
❝
<!DOCTYPE>
声明位于 HTML 文档中的第一行,处于 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。 解析模式 分为标准模式
和兼容模式
. ❞
❝「标准模式」的渲染方式和
JavaScript
引擎的解析方式都是以浏览器支持的最高标准运行。 「兼容模式」页面以宽松的向后兼容方式显示 ❞
❝在 HTML4 中,元素被分为两大类:
inline 行内元素
和block 块级元素
「行内元素」: 一个 行内元素只占据它自身的空间大小。 常见的行内元素有:a b span img button input label select textarea
「块级元素:」 块级元素占据父容器的整个宽度。 常见的块级元素有:div ul ol li dl dt h1 h2 h3 h4 h5 h6 p
❞
❝在 盒模型中,行内元素 设置
width
height
无效, 可以设置line-height
❞
❝标签内没有内容的
html
标签称为 空元素。空元素是在开始标签中关闭的。 常见的空标签有:br hr img input link meta
❞
❝目前主要使用的还是
link
导入 样式, 因为@import
兼容性不太好,它是 在 ` CSS2.1 才有的语法,只能在 IE5+ 中 可以识别。 使用link
不仅可以引入 样式文件,还可以引入网站图标等; 而@import
只是引入样式作用。 加载顺序不同:使用 link 时, 它是和页面同时加载的
, 而` @import 是 等待页面 加载完成,才会加载样式的。 ❞
❝主要分为两部分:
渲染引擎
和JS引擎
「渲染引擎:」 主要职责就是负责渲染所请求网站内容,默认支持显示html, xml 图片
. 它还可以借助第三方插件来渲染,例如 pdf。 「JS引擎:」 解析和执行JavaScript
来实现网页动态效果。 ❞
❝
Chrome 内核
/ Blink 内核
Gecko 内核
/ FireFox 内核
Webkit 内核
Blink 内核
IE + Chrome
双内核IE 内核
❞
❝
DOM
树,DOM
树由 DOM
元素 和属性节点组成。CSSOM
规则树。DOM 树
和 CSSOM 规则树
构建生成 渲染树
,❞
❝
当DOM的变化影响了元素的几何信息(元素的的位置和尺寸大小),浏览器需要重新计算元素的几何属性,将其安放在界面中的正确位置,这个过程叫做重排。
:hover
)getComputedStyle
方法,或者IE里的 currentStyle
时,也会触发重排,原理是一样的,都为求一个“即时性”和“准确性”。常见引起重排属性和方法 | -- | -- | -- |
---|---|---|---|
width | height | margin | padding |
display | border-width | border | position |
overflow | font-size | vertical-align | min-height |
clientWidth | clientHeight | clientTop | clientLeft |
offsetWudth | offsetHeight | offsetTop | offsetLeft |
scrollWidth | scrollHeight | scrollTop | scrollLeft |
scrollIntoView() | scrollTo() | getComputedStyle() | |
getBoundingClientRect() | scrollIntoViewIfNeeded() |
❞
❝
**重绘:**当渲染树中的一些元素只需要更新属性的外观,而不影响布局操作就称之为 「重绘」, 例如:改变背景,字体颜色等。
属性: | -- | -- | -- |
---|---|---|---|
color | border-style | visibility | background |
text-decoration | background-image | background-position | background-repeat |
outline-color | outline | outline-style | border-radius |
outline-width | box-shadow | background-size |
❞
❝
❞
❝
title
description
. keyword
: 浏览器会对这三项权重排名
❝title
: 强调网站主题内容,每个页面的 title
不一样,
description
: 网站主要内容描述,提炼关键。
keywords
: 列出关键词即可
❞HTML
代码, 便于浏览器解析。iframe
, 搜索引擎不会抓取 iframe
中的内容alt
❞
❝浏览器常见的存储技术包括:
cookie
,localStronge
和sessionStronge
大规模数据存储:indexDB
❞
cookie
sessionStronge
localStronge
理解❝「cookie:」 它是服务器端用于记录用户状态的一种方式,由服务器设置,在客户端存储,然后每次发起同源请求时,携带
cookie
,进行身份通信,cookie
最多可以存储4 K 数据,它的时间由exoires
属性指定,并且cookie
只能被同源页面共享。 「sessionStrong:」 它是一次会话存储的数据,当页面关闭时,它的数据也会随之销毁掉,最大存储 5M **localStronge: ** 它是浏览器本地永久存储的一种方法,它 与sessionStronge
的区别是不会随之浏览器关闭消失,除非主动删除,最大存储 5M ❞
❝
iframe
会 阻塞页面的 onload
事件,它会等待 iframe
加载执行完后,再执行 onload
事件。iframe
,不便于SEO优化❞
❝
title
: 当鼠标滑到元素上时显示alt
: 当图片无法加载时显示文字内容,提供图片的可访问性, ❞
CSS
❝它分为
IE 盒模型
和W3C 标准盒模型
. 盒模型包括:内容 content
,填充 padding
,边界 margin
,边框 border
IE 盒模型和 W3C 标准盒模型的区别是:W3C 标准 盒模型
: 属性width
height
只包含内容content
, 不包含border
和padding
IE 盒模型
: 属性width
height
包含content
border
padding
❞
❝
单冒号
: 用于 CSS3
伪类选择器中
双冒号
: 用于 CSS3
伪元素选择器中
伪类选择器
是用来向元素添加特殊效果的,用伪类定义的样式并不是作用在标记上,而是作用在标记的状态上,如a标签的:hover,表单元素的:disabled。
关于 a
标签的四种状态
选择器 | 示例 | 示例说明 |
---|---|---|
:link | a:link | 选择所有未访问链接 |
:visited | a:visited | 选择所有访问过的链接 |
:active | a:active | 选择正在活动链接 |
:hover | a:hover | 把鼠标放在链接上的状态 |
关于 form
表单的伪类选择器
选择器 | 示例 | 示例说明 |
---|---|---|
:focus | input:focus | 选择元素输入后具有焦点 |
:enabled | input:enabled | 匹配每个已启用的元素 |
:disabled | input:disabled | 匹配每个被禁用的元素 |
:checked | input:checked | 匹配每个已被选中的 input 元素 |
:required | input:required | 选择有"required"属性指定的元素属性 |
:optional | input:optional | 选择没有"required"的元素属性 |
:read-only | input:read-only | 选择只读属性的元素属性 |
:read-write | input:read-write | 选择没有只读属性的元素属性 |
:valid | input:valid | 选择所有有效值的属性 |
:invalid | input:invalid | 在表单元素中的值是非法时设置指定样式 |
:in-range | input:in-range | 用于标签的值在指定区间值时显示的样式 |
:out-of-range | input:out-of-range | 选择指定范围以外的值的元素属性 |
伪元素
:指它创建了一个虚拟容器,这个容器不包含任何DOM元素,但是可以包含内容。
伪元素只有以下几种
选择器 | 示例 | 示例说明 |
---|---|---|
::first-letter | p::first-letter | 选择器的首字母 |
::first-line | p::first-line | 选择器的首行 |
::selection | p::selection | 被用户选取的部分 |
::before | p::before | 在选择器前增加内容 |
::after | p::after | 在选择器后增加内容 |
❞
CSS
样式权重❝css优先级规则:
css
选择规则的权重值不同时,权重值高的优先;css
选择规则的权重值相同时,后定义的规则优先;css
属性后面加 !importand
时,无条件绝对优先;内联选择器style
> id 选择器
> class / 伪类 / 属性 选择器
> 标签 / 伪元素
❞
text-align: center
❝外层盒子 设置 对齐方式 为
居中
内层盒子display
为inline-block
, ❞
<body>
<div class="container">
<div class="box">
</div>
</div>
</body>
<style>
.container {
text-align: center;
}
.box {
width: 300px;
height: 300px;
border-radius: 15px;
background: red;
display: inline-block;
}
</style>
margin: 0 atuo
div {
width: 500px;
margin: 0 auto;
}
.box{
width: 200px;
height: 200px;
background: deepskyblue;
position: absolute; //绝对定位
top: 50%;
left: 50%;
/* - 高的一半 - 宽的一半 */
margin: -100px -100px;
}
.box{
width: 200px;
height: 200px;
background: deepskyblue;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
❝
translate(-50%,-50%)在这个代码段的具体作用是什么?
当使用:top: 50%;left: 50%;, 是以左上角为原点,故不处于中心位置 translate(-50%,-50%) 作用是,往上(x轴),左(y轴)移动自身长宽的 50%,以使其居于中心位置 ❞
<body>
<div class="container">
<div class="box">
</div>
</div>
</body>
<style>
.container{
width: 100%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.box{
width: 300px;
height: 300px;
background: orange;
}
</style>
❝
top:50%
和 left: 50%
定位到页面中心,然后使用 margin
来调整元素到页面中心,-width/2 -height/2top:50%
和 left: 50%
定位到页面中心, 然后使用 transform: translate(-50%, -50%)
将元素调整到页面中心flex
,在父元素上,设置 aligin-items 垂直居中
和 justify-content 水平居中
❞
❝
block
块类型。默认宽度为父元素宽度,可设置宽高,换行显示。如果不指定宽度,默认为100% 宽none
元素不显示,并从文档流中移除inline
行内元素类型。默认宽度为内容宽度,不可设置宽高,同行显inline-block
默认宽度为内容宽度,可以设置宽高,同行显示list-item
像块类型元素一样显示,并添加样式列表标记。table
此元素会作为块级表格来显示。inherit
规定应该从父元素继承display属性的值。块级元素block | div ul ol li dl dt h1 h2 h3 h4 h5 h6 p |
---|---|
行内元素 inline | a b span img button input label select textarea |
❞
CSS
实现 一个 📐 三角形/* 采用的是相邻边框连接处的均分原理
将元素的宽高设置为0,border-width 来设置线条粗细
然后使用 transparent 隐藏掉任意3条边即可
*/
#box {
width: 0;
height: 0;
border-width: 10px;
border-style: solid;
border-color: red transparent ;
cursor: pointer;
}
❝
margin
和 padding
不同。
❝解决方案:
可以使用 reset.css
,重置浏览器的css
默认属性
❞❞
❝
width : 100%
: 它会的宽度等于父元素的宽度大小。width : auto
: 它会使元素撑满整个父元素,margin
padding
border
content
会自动 分配空间。 ❞
❝
base64编码
是一种图片处理格式,通过特定的算法将图片编码成一长串字符串,在页面上显示的时候,可以用该字符串来代替图片的url
属性。优点
: 「1. 减少图片HTTP 请求」缺点
: 「1.文件体积比源文件大1/3,影响浏览器加载,渲染时间加长」 「2.兼容性问题,ie8
以下的版本不支持」 ❞
BFC
? 如何生成BFC
?❝定义
BFC
是 块级可视化上下文,一个元素形成了BFC
之后,它内部元素产生的布局不会影响到外部元素,外部元素布局也不会影响到BFC
内部元素。 一个BFC
像是一个隔离区域,和其它区域互不影响。 如何生成BFC
?
❞
❝文档流分别是:
普通流
浮动流
定位流
CSS
属性:top、bottom、left、right;❞
postion
有哪些属性? 它们的作用分别是?❝
position
static
默认定位
❝按正常布局走,top
, right
, bottom
, left
和 z-index
属性无效。
❞relative
相对定位
❝元素会放置在定位时的位置,不改变原有布局,通过改变 top
, right
, bottom
, left
来改变所在位置,但原所在位置会留下预留空间。
小结:通过自身改变位置,但会预留空间。
❞absolute
绝对定位
❝元素会「脱离文档流」,不会预留原有位置空间。
如果就近都没有指定 position
, 那么它会 以全局 为定位来定位了。
绝对定位的元素可以设置外边距(margins),且不会与其他边距合并。
「最佳实践」 :也是我常用的 技巧布局方式 子绝父相
它基本可以满足你复杂的日常布局需求。
❞fixed
固定定位
❝元素会「脱离文档流」,不会预留原有位置空间。
元素的包含块为 viewport
视口。该定位方式常用于创建在滚动屏幕时仍固定在相同位置的元素。
元素的位置在屏幕滚动时不会改变。
❞sticky
粘性定位
❝元素根据正常文档流进行定位,然后相对它的最近滚动祖先 和 最近块级祖先 。
包括table-related元素,基于top
, right
, bottom
, 和 left
的值进行偏移。偏移值不会影响任何其他元素的位置。
「元素在跨越特定阈值前为相对定位,之后为固定定位。」
「应用:」 手机通讯录联系人
❞❞
❝中间 flex = 1, 宽用百分比,左右固定宽,父元素 display:flex。 ❞
❝父元素 display:flex,子元素 flex:1 ❞
❝
px
px
像素(Pixel)。相对长度单位。像素px
是相对于显示器屏幕分辨率而言的。
em
em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸.
rem
rem是CSS3
新增的一个相对单位,使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。
p {font-size:14px; font-size:.875rem;}
「使用最新版的浏览器,那推荐使用rem,如果要考虑兼容性,那就使用px
,或者两者同时使用。」
手机端适配时可以采用 rem
rpx
rpx
是微信小程序解决自适应屏幕尺寸的尺寸单位。微信小程序规定屏幕的宽度为750rpx
。
❞
END