共计 15267 个字符,预计需要花费 39 分钟才能阅读完成。
前言
2019 互联网寒冬已至,大批互联网公司纷纷裁员,其实从 2018 年下半年开始,裁员和市场部收缩预算就经常被提及,阿里巴巴,华为都传出了收缩招聘的新闻。网易的游戏部门和门户部门也先后裁员,趣店裁员 90%,斗鱼裁员 30%。小肆也是被这些消息吓得瑟瑟发抖,不过生活就是这样,谁也无法预料到第二天会发生什么,只有把握好现在,积极为未知的明天做好准备才是正道。
这里小肆给大家几点建议:
对于目前在职的同学,保持学习,提升自己核心竞争力,让自己成为不会被轻易替代的那个人。对于必须面临重新找工作的同学,积极复习,多多刷题,把技术基础打牢,这样才容易在面试竞争中获取领先地位。
小肆深知找工作的不易,今天给大家精选了一些前端近一年常见的面试题,供大家复习,即便是在职的同学,也推荐有空就看看,保持忧患意识在目前的大环境下是非常有必要的。
HTML 篇
Doctype 作用?标准模式与兼容模式各有什么区别?
<!DOCTYPE> 声明位于 HTML 文档中的第一行,处于 <html> 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE 不存在或格式不正确会导致文档以兼容模式呈现。
标准模式的排版 和 JS 运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示, 模拟老式浏览器的行为以防止站点无法工作。
1.HTML5 为什么只需要写 <!DOCTYPE HTML>?
HTML5 不基于 SGML,因此不需要对 DTD 进行引用,但是需要 doctype 来规范浏览器的行为(让浏览器按照它们应该的方式来运行);而 HTML4.01 基于 SGML, 所以需要对 DTD 进行引用,才能告知浏览器文档所使用的文档类型。
2. 行内元素有哪些?块级元素有哪些?空 (void) 元素有那些?
首先:CSS 规范规定,每个元素都有 display 属性,确定该元素的类型,每个元素都有默认的 display 值,如 div 的 display 默认值为“block”,则为“块级”元素;span 默认 display 属性值为“inline”,是“行内”元素。
1. 行内元素有:a b span img input select strong(强调的语气)
2. 块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…
3. 常见的空元素:
`<br>` `<hr>` `<img>` `<input>` `<link>` `<meta>`
** 说这些可能会加分的 **:
`<area>` `<base>` `<col>` `<command>` `<embed>` `<keygen>` `<param>` `<source>` `<track>` `<wbr>`
3. 页面导入样式时,使用 link 和 @import 有什么区别?
link 属于 XHTML 标签,除了加载 CSS 外,还能用于定义 RSS, 定义 rel 连接属性等作用;而 @import 是 CSS 提供的,只能用于加载 CSS;
页面被加载的时,link 会同时被加载,而 @import 引用的 CSS 会等到页面被加载完再加载;
import 是 CSS2.1 提出的,只在 IE5 以上才能被识别,而 link 是 XHTML 标签,无兼容问题;
link 支持使用 js 控制 DOM 去改变样式,而 @import 不支持;
4. 介绍一下你对浏览器内核的理解?
主要分成两部分:渲染引擎 (layout engineer 或 Rendering Engine) 和 JS 引擎。
渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入 CSS 等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。
JS 引擎则:解析和执行 javascript 来实现网页的动态效果。
最开始渲染引擎和 JS 引擎并没有区分的很明确,后来 JS 引擎越来越独立,内核就倾向于只指渲染引擎。
5. 常见的浏览器内核有哪些?
Trident 内核:IE,MaxThon,TT,The World,360, 搜狗浏览器等。[又称 MSHTML]Gecko 内核:Netscape6 及以上版本,FF,MozillaSuite/SeaMonkey 等 Presto 内核:Opera7 及以上。[Opera 内核原为:Presto,现为:Blink;]Webkit 内核:Safari,Chrome 等。[Chrome 的:Blink(WebKit 的分支)]
6.html5 有哪些新特性、移除了那些元素?如何处理 HTML5 新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?
HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
绘画 canvas;
用于媒介回放的 video 和 audio 元素;
本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 的数据在浏览器关闭后自动删除;
语意化更好的内容元素,比如 article、footer、header、nav、section;
表单控件,calendar、date、time、email、url、search;
新的技术 webworker, websocket, Geolocation;
移除的元素:
纯表现的元素:basefont,big,center,font, s,strike,tt,u;
对可用性产生负面影响的元素:frame,frameset,noframes;
支持 HTML5 新标签:
IE8/IE7/IE6 支持通过 document.createElement 方法产生的标签,可以利用这一特性让这些浏览器支持 HTML5 新标签,浏览器支持新标签后,还需要添加标签默认的样式。当然也可以直接使用成熟的框架、比如 html5shim;
<!–[if lt IE 9]>
<script> src=”http://html5shim.googlecode.com/svn/trunk/html5.js”</script>
<![endif]–>
如何区分 HTML5:DOCTYPE 声明 / 新增的结构元素 / 功能元素
7. 简述一下你对 HTML 语义化的理解?
用正确的标签做正确的事情。
html 语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
即使在没有样式 CSS 情况下也以一种文档格式显示,并且是容易阅读的;
搜索引擎的爬虫也依赖于 HTML 标记来确定上下文和各个关键字的权重,利于 SEO;
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
8. HTML5 的离线储存怎么使用,工作原理能不能解释一下?
在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件。
** 原理:HTML5 的离线存储是基于一个新建的.appcache 文件的缓存机制(不是存储技术),通过这个文件上的解析清单离线存储资源,这些资源就会像 cookie 一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示。**
如何使用:
页面头部像下面一样加入一个 manifest 的属性;
在 cache.manifest 文件的编写离线存储的资源;
CACHE MANIFEST
#v0.11
CACHE:
js/app.js
css/style.css
NETWORK:
resourse/logo.png
FALLBACK:
/ /offline.html
3、在离线状态时,操作 window.applicationCache 进行需求实现。
9. 浏览器是怎么对 HTML5 的离线储存资源进行管理和加载的呢?
在线的情况下,浏览器发现 html 头部有 manifest 属性,它会请求 manifest 文件,如果是第一次访问 app,那么浏览器就会根据 manifest 文件的内容下载相应的资源并且进行离线存储。如果已经访问过 app 并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的 manifest 文件与旧的 manifest 文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。
离线的情况下,浏览器就直接使用离线存储的资源。
10. 请描述一下 cookies,sessionStorage 和 localStorage 的区别?
cookie 是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
cookie 数据始终在同源的 http 请求中携带(即使不需要),记会在浏览器和服务器间来回传递。
sessionStorage 和 localStorage 不会自动把数据发给服务器,仅在本地保存。
存储大小:
cookie 数据大小不能超过 4k。sessionStorage 和 localStorage 虽然也有存储大小的限制,但比 cookie 大得多,可以达到 5M 或更大。
有期时间:
localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;sessionStorage 数据在当前浏览器窗口关闭后自动删除。cookie 设置的 cookie 过期时间之前一直有效,即使窗口或浏览器关闭
11.iframe 有那些缺点?
iframe 会阻塞主页面的 Onload 事件;
搜索引擎的检索程序无法解读这种页面,不利于 SEO;
iframe 和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
12.Label 的作用是什么?是怎么用的?
label 标签来定义表单控制间的关系, 当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上。
<label for=”Name”>Number:</label>
<input type=“text“name=”Name” id=”Name”/>
<label>Date:<input type=”text” name=”B”/></label>
13.HTML5 的 form 如何关闭自动完成功能?
给不想要提示的 form 或某个 input 设置为 autocomplete=off。
14. 如何实现浏览器内多个标签页之间的通信?
WebSocket、SharedWorker;也可以调用 localstorge、cookies 等本地存储方式;
localstorge 另一个浏览上下文里被添加、修改或删除时,它都会触发一个事件,我们通过监听事件,控制它的值来进行页面信息通信;在无痕模式下设置 localstorge 值时会抛出 QuotaExceededError 的异常;
15.webSocket 如何兼容低浏览器?
Adobe Flash Socket、ActiveX HTMLFile (IE)、基于 multipart 编码发送 XHR、基于长轮询的 XHR
16. 页面可见性(Page Visibility API)可以有哪些用途?
通过 visibilityState 的值检测页面当前是否可见,以及打开网页的时间等; 在页面被切换到其他后台进程的时候,自动暂停音乐或视频的播放;
17. 如何在页面上实现一个圆形的可点击区域?
map+area 或者 svg
border-radius
纯 js 实现 需要求一个点在不在圆上简单算法、获取鼠标坐标等等
18. 实现不使用 border 画出 1px 高的线,在不同浏览器的标准模式与怪异模式下都能保持一致的效果。
<div style=”height:1px;overflow:hidden;background:red”></div>
19. 网页验证码是干嘛的,是为了解决什么安全问题。
区分用户是计算机还是人的公共全自动程序。可以防止恶意破解密码、刷票、论坛灌水;有效防止黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。
20.title 与 h1 的区别、b 与 strong 的区别、i 与 em 的区别?
title 属性没有明确意义只表示是个标题,H1 则表示层次明确的标题,对页面信息的抓取也有很大的影响;strong 是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:<strong> 会重读,而 <B> 是展示强调内容。i 内容展示为斜体,em 表示强调的文本;Physical Style Elements — 自然样式标签 b, i, u, s, preSemantic Style Elements — 语义样式标签 strong, em, ins, del, code 应该准确使用语义样式标签, 但不能滥用, 如果不能确定时首选使用自然样式标签。
CSS 篇
1. 介绍一下标准的 CSS 的盒子模型?低版本 IE 的盒子模型有什么不同的?
(1)有两种,IE 盒子模型、W3C 盒子模型;(2)盒模型:内容(content)、填充(padding)、边界(margin)、边框(border);(3)区 别:IE 的 content 部分把 border 和 padding 计算了进去;
2.CSS 选择符有哪些?哪些属性可以继承?
id 选择器(# myid)
类选择器(.myclassname)
标签选择器(div, h1, p)
相邻选择器(h1 + p)
子选择器(ul > li)
后代选择器(li a)
通配符选择器(*)
属性选择器(a[rel = “external”])
伪类选择器(a:hover, li:nth-child)
可继承的样式:font-size font-family color, UL LI DL DD DT;
不可继承的样式:border padding margin width height ;
3.CSS 优先级算法如何计算?
优先级就近原则,同权重情况下样式定义最近者为准;
载入样式以最后载入的定位为准;
优先级为:
同权重: 内联样式表(标签内部)> 嵌入样式表(当前文件中)> 外部样式表(外部文件中)。
!important > id > class > tag
important 比 内联优先级高
4.CSS3 新增伪类有那些?
举例:p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。p:last-of-type 选择属于其父元素的最后 <p> 元素的每个 <p> 元素。p:only-of-type 选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。p:only-child 选择属于其父元素的唯一子元素的每个 <p> 元素。p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素。
::after 在元素之前添加内容, 也可以用来做清除浮动。::before 在元素之后添加内容:enabled :disabled 控制表单控件的禁用状态。:checked 单选框或复选框被选中。
5. 如何居中 div?
水平居中:给 div 设置一个宽度,然后添加 margin:0 auto 属性
div{
width:200px;
margin:0 auto;
}
让绝对定位的 div 居中
div {
position: absolute;
width: 300px;
height: 300px;
margin: auto;
top: 0;
left: 0;
bottom: 0;
right: 0;
background-color: pink; /* 方便看效果 */
}
水平垂直居中一确定容器的宽高 宽 500 高 300 的层设置层的外边距
div {
position: relative; /* 相对定位或绝对定位均可 */
width:500px;
height:300px;
top: 50%;
left: 50%;
margin: -150px 0 0 -250px; /* 外边距为自身宽高的一半 */
background-color: pink; /* 方便看效果 */
}
水平垂直居中二未知容器的宽高,利用 transform 属性
div {
position: absolute; /* 相对定位或绝对定位均可 */
width:500px;
height:300px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: pink; /* 方便看效果 */
}
水平垂直居中三利用 flex 布局实际使用时应考虑兼容性
.container {
display: flex;
align-items: center; /* 垂直居中 */
justify-content: center; /* 水平居中 */
}
.container div {
width: 100px;
height: 100px;
background-color: pink; /* 方便看效果 */
}
6.display 有哪些值?说明他们的作用。
block 块类型。默认宽度为父元素宽度,可设置宽高,换行显示。none 缺省值。象行内元素类型一样显示。inline 行内元素类型。默认宽度为内容宽度,不可设置宽高,同行显示。inline-block 默认宽度为内容宽度,可以设置宽高,同行显示。list-item 象块类型元素一样显示,并添加样式列表标记。table 此元素会作为块级表格来显示。inherit 规定应该从父元素继承 display 属性的值。
7.position 的值 relative 和 absolute 定位原点是?
absolute
生成绝对定位的元素,相对于值不为 static 的第一个父元素进行定位。
fixed(老 IE 不支持)
生成绝对定位的元素,相对于浏览器窗口进行定位。
relative
生成相对定位的元素,相对于其正常位置进行定位。
static
默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right z-index 声明)。
inherit
规定从父元素继承 position 属性的值。
8.CSS3 有哪些新特性?
新增各种 CSS 选择器(: not(.input):所有 class 不是“input”的节点)圆角(border-radius:8px)多列布局(multi-column layout)阴影和反射(ShadowReflect)文字特效(text-shadow、)文字渲染(Text-decoration)线性渐变(gradient)旋转(transform)缩放, 定位, 倾斜, 动画, 多背景例如:transform:scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg)Animation:
9. 请解释一下 CSS3 的 Flexbox(弹性盒布局模型), 以及适用场景?
一个用于页面布局的全新 CSS3 功能,Flexbox 可以把列表放在同一个方向(从上到下排列,从左到右),并让列表能延伸到占用可用的空间。较为复杂的布局还可以通过嵌套一个伸缩容器(flex container)来实现。采用 Flex 布局的元素,称为 Flex 容器(flex container),简称 ” 容器 ”。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称 ” 项目 ”。常规布局是基于块和内联流方向,而 Flex 布局是基于 flex-flow 流可以很方便的用来做局中,能对不同屏幕大小自适应。在布局上有了比以前更加灵活的空间。
10. 用纯 CSS 创建一个三角形的原理是什么?
把上、左、右三条边隐藏掉(颜色设为 transparent)
#demo {
width: 0;
height: 0;
border-width: 20px;
border-style: solid;
border-color: transparent transparent red transparent;
}
11. 一个满屏 品 字布局 如何设计?
简单的方式:
上面的 div 宽 100%,
下面的两个 div 分别宽 50%,
然后用 float 或者 inline 使其不换行即可
12.css 多列等高如何实现?
利用 padding-bottom|margin-bottom 正负值相抵;设置父容器设置超出隐藏(overflow:hidden),这样子父容器的高度就还是它里面的列没有设定 padding-bottom 时的高度,当它里面的任 一列高度增加了,则父容器的高度被撑到里面最高那列的高度,其他比这列矮的列会用它们的 padding-bottom 补偿这部分高度差。
13. 经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用 hack 的技巧?
png24 位的图片在 iE6 浏览器上出现背景,解决方案是做成 PNG8.
浏览器默认的 margin 和 padding 不同。解决方案是加一个全局的 *{margin:0;padding:0;}来统一。
IE6 双边距 bug: 块属性标签 float 后,又有横行的 margin 情况下,在 ie6 显示 margin 比设置的大。
浮动 ie 产生的双倍距离 #box{float:left; width:10px; margin:0 0 0 100px;}
这种情况之下 IE 会产生 20px 的距离,解决方案是在 float 的标签样式控制中加入 ——_display:inline; 将其转化为行内属性。(_这个符号只有 ie6 会识别)
渐进识别的方式,从总体中逐渐排除局部。
首先,巧妙的使用“9”这一标记,将 IE 游览器从所有情况中分离出来。接着,再次使用“+”将 IE8 和 IE7、IE6 分离开来,这样 IE8 已经独立识别。
.bb{
background-color:red;/* 所有识别 */
background-color:#00deff\9; /*IE6、7、8 识别 */
+background-color:#a200ff;/*IE6、7 识别 */
_background-color:#1e0bd1;/*IE6 识别 */
}
IE 下, 可以使用获取常规属性的方法来获取自定义属性, 也可以使用 getAttribute()获取自定义属性;Firefox 下, 只能使用 getAttribute()获取自定义属性。解决方法: 统一通过 getAttribute()获取自定义属性。
IE 下,even 对象有 x,y 属性, 但是没有 pageX,pageY 属性;Firefox 下,event 对象有 pageX,pageY 属性, 但是没有 x,y 属性。
解决方法:(条件注释)缺点是在 IE 浏览器下可能会增加额外的 HTTP 请求数。
Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示, 可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决。
超链接访问过后 hover 样式就不出现了 被点击访问过的超链接样式不在具有 hover 和 active 了解决方法是改变 CSS 属性的排列顺序:L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
14.li 与 li 之间有看不见的空白间隔是什么原因引起的?有什么解决办法?
行框的排列会受到中间空白(回车空格)等的影响,因为空格也属于字符, 这些空白也会被应用样式,占据空间,所以会有间隔,把字符大小设为 0,就没有空格了。
15. 为什么要初始化 CSS 样式。
因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对 CSS 初始化往往会出现浏览器之间的页面显示差异。
当然,初始化样式会对 SEO 有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。
最简单的初始化方法:* {padding: 0; margin: 0;}(强烈不建议)
淘宝的样式初始化代码:
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td {margin:0; padding:0;}
body, button, input, select, textarea {font:12px/1.5tahoma, arial, \5b8b\4f53;}
h1, h2, h3, h4, h5, h6{font-size:100%;}
address, cite, dfn, em, var {font-style:normal;}
code, kbd, pre, samp {font-family:couriernew, courier, monospace;}
small{font-size:12px;}
ul, ol {list-style:none;}
a {text-decoration:none;}
a:hover {text-decoration:underline;}
sup {vertical-align:text-top;}
sub{vertical-align:text-bottom;}
legend {color:#000;}
fieldset, img {border:0;}
button, input, select, textarea {font-size:100%;}
table {border-collapse:collapse; border-spacing:0;}
16.absolute 的 containing block(容器块)计算方式跟正常流有什么不同?
无论属于哪种,都要先找到其祖先元素中最近的 position 值不为 static 的元素,然后再判断:
若此元素为 inline 元素,则 containing block 为能够包含这个元素生成的第一个和最后一个 inline box 的 padding box (除 margin, border 外的区域) 的最小矩形;
否则, 则由这个祖先元素的 padding box 构成。
如果都找不到,则为 initial containing block。
补充:
static(默认的)/relative:简单说就是它的父元素的内容框(即去掉 padding 的部分)
absolute: 向上找最近的定位为 absolute/relative 的元素
fixed: 它的 containing block 一律为根元素(html/body),根元素也是 initial containing block
17.CSS 里的 visibility 属性有个 collapse 属性值是干嘛用的?在不同浏览器下以后什么区别?
对于普通元素 visibility:collapse; 会将元素完全隐藏, 不占据页面布局空间, 与 display:none; 表现相同. 如果目标元素为 table,visibility:collapse; 将 table 隐藏, 但是会占据页面布局空间. 仅在 Firefox 下起作用,IE 会显示元素,Chrome 会将元素隐藏, 但是占据空间.
18. position 跟 display、margin collapse、overflow、float 这些特性相互叠加后会怎么样?
如果元素的 display 为 none, 那么元素不被渲染,position,float 不起作用, 如果元素拥有 position:absolute; 或者 position:fixed; 属性那么元素将为绝对定位,float 不起作用. 如果元素 float 属性不是 none, 元素会脱离文档流, 根据 float 属性值来显示. 有浮动, 绝对定位,inline-block 属性的元素,margin 不会和垂直方向上的其他元素 margin 折叠.
19. 对 BFC 规范 (块级格式化上下文:block formatting context) 的理解?
(W3C CSS 2.1 规范中的一个概念, 它是一个独立容器,决定了元素如何对其内容进行定位, 以及与其他元素的关系和相互作用。)一个页面是由很多个 Box 组成的, 元素的类型和 display 属性, 决定了这个 Box 的类型。不同类型的 Box, 会参与不同的 Formatting Context(决定如何渲染文档的容器), 因此 Box 内的元素会以不同的方式渲染, 也就是说 BFC 内部的元素和外部的元素不会互相影响。
20.css 定义的权重
以下是权重的规则:标签的权重为 1,class 的权重为 10,id 的权重为 100,以下例子是演示各种定义的权重值:
/* 权重为 1 */
div{
}
/* 权重为 10*/
.class1{
}
/* 权重为 100*/
#id1{
}
/* 权重为 100+1=101*/
#id1 div{
}
/* 权重为 10+1=11*/
.class1 div{
}
/* 权重为 10+10+1=21*/
.class1 .class2 div{
}
如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现
21. 请解释一下为什么需要清除浮动?清除浮动的方式
清除浮动是为了清除使用浮动元素产生的影响。浮动的元素,高度会塌陷,而高度的塌陷使我们页面后面的布局不能正常显示。
1、父级 div 定义 height;2、父级 div 也一起浮动;3、常规的使用一个 class;
.clearfix::before, .clearfix::after {
content: ” “;
display: table;
}
.clearfix::after {
clear: both;
}
.clearfix {
*zoom: 1;
}
4、SASS 编译的时候,浮动元素的父级 div 定义伪类:after
&::after,&::before{
content: ” “;
visibility: hidden;
display: block;
height: 0;
clear: both;
}
解析原理:1) display:block 使生成的元素以块级元素显示, 占满剩余空间;2) height:0 避免生成内容破坏原有布局的高度。3) visibility:hidden 使生成的内容不可见,并允许可能被生成内容盖住的内容可以进行点击和交互;4)通过 content:”.” 生成内容作为最后一个元素,至于 content 里面是点还是其他都是可以的,例如 oocss 里面就有经典的 content:”.”, 有些版本可能 content 里面内容为空, 一丝冰凉是不推荐这样做的,firefox 直到 7.0 content:”” 仍然会产生额外的空隙;5)zoom:1 触发 IE hasLayout。
通过分析发现,除了 clear:both 用来闭合浮动的,其他代码无非都是为了隐藏掉 content 生成的内容,这也就是其他版本的闭合浮动为什么会有 font-size:0,line-height:0。
22. 什么是外边距合并?
外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
23.zoom:1 的清除浮动原理?
清除浮动,触发 hasLayout;Zoom 属性是 IE 浏览器的专有属性,它可以设置或检索对象的缩放比例。解决 ie 下比较奇葩的 bug。譬如外边距(margin)的重叠,浮动清除,触发 ie 的 haslayout 属性等。
来龙去脉大概如下:当设置了 zoom 的值之后,所设置的元素就会就会扩大或者缩小,高度宽度就会重新计算了,这里一旦改变 zoom 值时其实也会发生重新渲染,运用这个原理,也就解决了 ie 下子元素浮动时候父元素不随着自动扩大的问题。
Zoom 属是 IE 浏览器的专有属性,火狐和老版本的 webkit 核心的浏览器都不支持这个属性。然而,zoom 现在已经被逐步标准化,出现在 CSS 3.0 规范草案中。
目前非 ie 由于不支持这个属性,它们又是通过什么属性来实现元素的缩放呢?可以通过 css3 里面的动画属性 scale 进行缩放。
24. 移动端的布局用过媒体查询吗?
假设你现在正用一台显示设备来阅读这篇文章,同时你也想把它投影到屏幕上,或者打印出来,
而显示设备、屏幕投影和打印等这些媒介都有自己的特点,CSS 就是为文档提供在不同媒介上展示的适配方法
<!– link 元素中的 CSS 媒体查询 –>
当媒体查询为真时,相关的样式表或样式规则会按照正常的级联规被应用。
当媒体查询返回假,<link> 标签上带有媒体查询的样式表 仍将被下载(只不过不会被应用)。
<link rel=”stylesheet” media=”(max-width: 800px)” href=”example.css” />
<!– 样式表中的 CSS 媒体查询 –>
包含了一个媒体类型和至少一个使用 宽度、高度和颜色等媒体属性来限制样式表范围的表达式。
CSS3 加入的媒体查询使得无需修改内容便可以使样式应用于某些特定的设备范围。
<style>
@media (min-width: 700px) and (orientation: landscape){
.sidebar {
display: none;
}
}
</style>
25. 使用 CSS 预处理器吗?喜欢那个?
SASS (SASS、LESS 没有本质区别,只因为团队前端都是用的 SASS)
26.CSS 优化、提高性能的方法有哪些?
关键选择器(key selector)。选择器的最后面的部分为关键选择器(即用来匹配目标元素的部分);如果规则拥有 ID 选择器作为其关键选择器,则不要为规则增加标签。过滤掉无关的规则(这样样式系统就不会浪费时间去匹配它们了);提取项目的通用公有样式,增强可复用性,按模块编写组件;增强项目的协同开发性、可维护性和可扩展性; 使用预处理工具或构建工具(gulp 对 css 进行语法检查、自动补前缀、打包压缩、自动优雅降级);
23. 浏览器是怎样解析 CSS 选择器的?
样式系统从关键选择器开始匹配,然后左移查找规则选择器的祖先元素。只要选择器的子树一直在工作,样式系统就会持续左移,直到和规则匹配,或者是因为不匹配而放弃该规则。
24.margin 和 padding 分别适合什么场景使用?
margin 是用来隔开元素与元素的间距;padding 是用来隔开元素与内容的间隔。margin 用于布局分开元素使元素与元素互不相干;padding 用于元素与内容之间的间隔,让内容(文字)与(包裹)元素之间有一段
25. ::before 和 :after 中双冒号和单冒号 有什么区别?解释一下这 2 个伪元素的作用。
单冒号 (:) 用于 CSS3 伪类,双冒号 (::) 用于 CSS3 伪元素。(伪元素由双冒号和伪元素名称组成)双冒号是在当前规范中引入的,用于区分伪类和伪元素。不过浏览器需要同时支持旧的已经存在的伪元素写法,比如:first-line、:first-letter、:before、:after 等,而新的在 CSS3 中引入的伪元素则不允许再支持旧的单冒号的写法。
想让插入的内容出现在其它内容前,使用::before,否者,使用::after;在代码顺序上,::after 生成的内容也比::before 生成的内容靠后。如果按堆栈视角,::after 生成的内容会在::before 生成的内容之上
26. 如何修改 chrome 记住密码后自动填充表单的黄色背景?
input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill {
background-color: rgb(250, 255, 189); /* #FAFFBD; */
background-image: none;
color: rgb(0, 0, 0);
}
27. 设置元素浮动后,该元素的 display 值是多少?
自动变成了 display:block
28. 怎么让 Chrome 支持小于 12px 的文字?
1、用图片:如果是内容固定不变情况下,使用将小于 12px 文字内容切出做图片,这样不影响兼容也不影响美观。2、使用 12px 及 12px 以上字体大小:为了兼容各大主流浏览器,建议设计美工图时候设置大于或等于 12px 的字体大小,如果是接单的这个时候就需要给客户讲解小于 12px 浏览器不兼容等事宜。3、继续使用小于 12px 字体大小样式设置:如果不考虑 chrome 可以不用考虑兼容,同时在设置小于 12px 对象设置 -webkit-text-size-adjust:none,做到最大兼容考虑。4、使用 12px 以上字体:为了兼容、为了代码更简单 从新考虑权重下兼容性。
29. 让页面里的字体变清晰,变细用 CSS 怎么做?
-webkit-font-smoothing: antialiased;
30. font-style 属性可以让它赋值为“oblique”oblique 是什么意思?
倾斜的字体样式
31. position:fixed; 在 android 下无效怎么处理?
fixed 的元素是相对整个页面固定位置的,你在屏幕上滑动只是在移动这个所谓的 viewport,原来的网页还好好的在那,fixed 的内容也没有变过位置,所以说并不是 iOS 不支持 fixed,只是 fixed 的元素不是相对手机屏幕固定的。
<meta name=”viewport” content=”width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no”/>
32. 如果需要手动写动画,你认为最小时间间隔是多久,为什么?(阿里)
多数显示器默认频率是 60Hz,即 1 秒刷新 60 次,所以理论上最小间隔为 1 /60*1000ms = 16.7ms
33. display:inline-block 什么时候会显示间隙?(携程)
移除空格、使用 margin 负值、使用 font-size:0、letter-spacing、word-spacing
34. 什么是 CSS 预处理器 / 后处理器?
预处理器例如:LESS、Sass、Stylus,用来预编译 Sass 或 less,增强了 css 代码的复用性,还有层级、mixin、变量、循环、函数等,具有很方便的 UI 组件模块化开发能力,极大的提高工作效率。
后处理器例如:PostCSS,通常被视为在完成的样式表中根据 CSS 规范处理 CSS,让其更有效;目前最常做的是给 CSS 属性添加浏览器私有前缀,实现跨浏览器兼容性的问题。
其他
除了 HTML,CSS 我们需要复习之外,还有 JS、网络,框架相关等知识需要复习,关于这些知识点,在 github 上有一个 10000+star 的项目,该项目为我们整理了相当全的知识图谱。小肆把链接放在下面,有需要的同学快去看看吧!
https://github.com/InterviewM…
最后别忘了关注我哦!