前端开发面试知识点摘要:
HTML&CSS:
对 ****Web 标准的理解、浏览器内核差异、兼容性、hack、CSS 基本
功:布局、盒子模型、选择器优先级及使用、HTML5、CSS3、移
动端适应
JavaScript:
数据类型、面向对象、继承、闭包、插件、作用域、跨域、原型链、
模块化、自定义事件、内存泄漏、事件机制、异步装载回调、模板引
擎、Nodejs、JSON、ajax 等。
其他:
HTTP、安全、正则、优化、重构、响应式、移动端、团队协作、可
维护、SEO、UED、架构、职业生涯
在本题库中,涵盖了市场上主流的面试题,希望大家能够利用好时间
和精力掌握里面的内容。其中 ****REACT、兼容性方面属于进阶掌握部
分,可根据实际情况了解和掌握。
兼容性面试题整理(三年及以上经验被问及)
(一)html ****部分
1. H5 ****新标签在 IE9 以下的浏览器识别
①引入cdn地址
②引入本地html5文件
③自己写代码解决
引入:
html5shiv.js 下载地址
2. ****ul ****标签内外边距问题 ****ul ****标签在 ****IE6\IE7 ****中,有个默认的外边距,但是在 ****IE8
以上及其他浏览器中有个默认的内边距。****
解决方法:统一设置 ****ul ****的内外边距为 0
(二)CSS ****样式的兼容性
1. ****css ****的 ****hack ****问题:主要针对 ****IE ****的不同版本,不同的浏览器的写法不同
IE 的条件注释 hack:
2. 在使用绝对定位或者相对定位后,IE ****中设置 ****z-index 失效
原因是因为其元素依赖于父元素的 ****z-index,但是父元素默认为 ****0, 子高父低,
所以不会改变显示的顺序 , 解决给父元素设置z-index
(三)Javascript ****兼容性
1.标准的事件绑定方法函数为 ****addEventListener,但 ****IE ****下是 ****attachEvent;
2.事件的捕获方式不一致,标准浏览器是由外至内,而 ****IE ****是由内到外,但是最
后的结果是将 ****IE ****的标准定为标准
3.window.event ****获取的。并且获取目标元素的方法也不同,标准浏览器是
event.target,而 ****IE ****下是 ****event.srcElement
4.在低版本的 ****IE ****中获取的日期处理函数的值不是与 ****1900 ****的差值,但是在高版
本的 ****IE ****中和标准浏览器保持了一致,获取的值也是与 ****1900 ****的差值。
比如:var year= new Date().getYear();
5.ajax ****的实现方式不同,这个我所理解的是获取 ****XMLHttpRequest ****的不同,
IE ****下是 ****activeXObject
6.IE ****中不能操作 ****tr ****的 ****innerHtml7.获得 ****DOM ****节点的父节点、子节点的方式不
同
其他浏览器:parentNode parentNode.childNodes
IE:parentElement parentElement.childre
HTML5\CSS3 ****面试题整理
1.Doctype ****作用? ****严格模式与混杂模式-如何触发这两种模式,区分它们有何意
义?
(1) 声明位于文档中的最前面,处于 标签之前。
告知浏览器的解析器,用什么文档类型 规范来解析这个文档。
(2)严格模式的排版和 JS 运作模式是以该浏览器支持的最高标准运行。
(3)在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的
行为以防止站点无法工作。
(4)DOCTYPE 不存在或格式不正确会导致文档以混杂模式呈现。
2.行内元素有哪些?块级元素有哪些? ****空(void)元素有那些?
(1)CSS 规范规定,每个元素都有 display 属性,确定该元素的类型,每个
元素都有默认的 display 值,
比如 div 默认 display 属性值为“block”,成为“块级”元素;
span 默认 display 属性值为“inline”,是“行内”元素。
(2)行内元素有:a b span input select strong(强调的语气)
块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
(3)知名的空元素:
3.CSS ****盒子模型是什么?
盒子模型分为标准模型和 IE 盒子模型,其中
标准模型「默认:box-sizing: content-box」由四部分组成,从内到外依次是:
内容区域「content」:可以放置元素的区域如文本,图像等,一般设置宽高度
指的是这个内容的宽高;
内边距区域「padding」:内容与边框之间的距离
边框区域「border」:就是边框
外边距区域「margin」:由外边边距限制,用空白区域扩展边框区域,来分开
相邻的元素。
标准模型指的是设置 box-sizing 为 content-box 的盒子模型,一般 width,
height 指的是 content 的宽高。
而 IE 模 型 指 的 是 box-sizing 为 border-box 的 盒 子 模 型 。 宽 高 的 计 算 是
content+padding+border;
4.link ****和@import ****的区别是?
(1)link 属于 HTML 标签,而@import 是 CSS 提供的;
(2)页面被加载的时,link 会同时被加载,而@import 会等 CSS 被加载完
再加载;
(3)import 只在 IE5 以上才能识别,而 link 是 HTML 标签,无兼容问题;
(4)link 方式的样式的权重 高于@import 的权重.
5.CSS ****选择符有哪些?哪些属性可以继承?优先级算法如何计算? ****CSS3 ****新增
伪类有那些?
1.id 选择器( # myid)
2.类选择器(.myclassname)
3.标签选择器(div, h1, p)
4.相邻选择器(h1 + p)
5.子选择器(ul < li)
6.后代选择器(li a)
7.通配符选择器( * )
8.属性选择器(a[rel = "external"])
9.伪类选择器(a: hover, li: nth - child)
可继承: font-size font-family color, UL LI DL DD DT;
不可继承 :border padding margin width height ;
优先级就近原则,样式定义最近者为准;
载入样式以最后载入的定位为准;
优先级为:
!important > id > class > tag
important 比内联优先级高
CSS3 新增伪类举例:
p:first-of-type 选择属于其父元素的首个
元素的每个
元素。
p:last-of-type 选择属于其父元素的最后
元素的每个
元素。
p:only-of-type 选择属于其父元素唯一的
元素的每个
元素。
p:only-child 选择属于其父元素的唯一子元素的每个
元素。
p:nth-child(2) 选择属于其父元素的第二个子元素的每个
元素。
:enabled、:disabled 控制表单控件的禁用状态。
:checked,单选框或复选框被选中。
6.如何居中 ****div,如何居中一个浮动元素?
给 div 设置一个宽度,然后添加 margin:0 auto 属性
div{width:200px;margin:0 auto;}
居中一个浮动元素
.div {
Width:500px ; height:300px;//高度可以不设
Margin: -150px 0 0 -250px;
position:relative;相对定位
background-color:pink;//方便看效果
left:50%;
top:50%;
}
7.浏览器的内核分别是什么? ****经常遇到的浏览器的兼容性有哪些?原因,解决方
法是什么,常用 ****hack ****的技巧 ****?
1. IE 浏览器的内核 Trident、Mozilla 的 Gecko、google 的 WebKit、Opera
内核 Presto;
2. 浏 览 器 默 认 的 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 会识别)
渐进识别的方式,从总体中逐渐排除局部。
3.首先,巧妙的使用“\9”这一标记,将 IE 游览器从所有情况中分离出来。
接着,再次使用“+”将 IE8 和 IE7、IE6 分离开来,这样 IE8 已经独立识别。
.bb{
background-color:#f1ee18;/所有识别/
.background-color:#00deff\9; /IE6、7、8 识别/
+background-color:#a200ff;/IE6、7 识别/
_background-color:#1e0bd1;/IE6 识别/
}
4.IE 下,可以使用获取常规属性的方法来获取自定义属性,
解决方法:统一通过 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 {}
8.css ****属性那些有继承性?哪些没有?
有继承性的属性:color ,font-size,font-weight
没有继承性的属性:border,width,height
9.如果盒子都为浮动,父类会没有高度,如何解决
解决方法:(1)给父类设置相应的高度
(2)创建一个孩子对象,设置清除浮动
(3) 设置父类为 overflow:hidden
(4)用 before 和 after 动态添加
10.visibility ****和 ****display ****的隐藏有什么区别?
display 隐藏对象,会清空面积;visibility 隐藏对象还会占有以前的面积
11.伪类的写作顺序?
hover 必须在 link、visited 之后,active 必须在 hover 之后
Link,visited,hover,active
12.border ****和 ****outline ****的区别
1.outlinte 显示在 border 之外
2.border 会占像素,outline 没有面积
3.outline 低版本浏览器不支持
13.iframe ****的缺点?如何解决?
1.iframe 会影响页面的 onload(加载)事件
2.iframe 和主页共享连接池,而浏览器对相同域的链接有限制,所以影响页面
的并行加载
解决:使用时通过 js 动态调用给 iframe 添加 src 路径,可以避免以上两个问题
14.html5\CSS3 ****有哪些新特性、移除了那些元素?
1.语意化更好的内容元素,比如 article、footer、header、nav
表单控件,date、time、email、url
CSS3 实现圆角,阴影,对文字加特效,增加了更多的 CSS 选择器, 多背景
2.center,font,u,frame,frameset
15.你怎么来实现页面设计图,你认为前端应该如何高质量完成工作? ****一个满屏
品 ****字布局 ****如何设计?
1.首先划分成头部、body、脚部......
实现效果图是最基本的工作,精确到 2px;
与设计师,产品经理的沟通和项目的参与
做好的页面结构,页面重构和用户体验
处理 hack,兼容、写出优美的代码格式
针对服务器的优化、支持 HTML5 标签。
<div class="header">上
<div class="left">左
<div class="right">右
16.常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?
1.使用率较高的框架有 jQuery、YUI、Prototype、Dojo、Ext.js、Mootools
等。尤其是 jQuery,超过 91%。
轻量级框架有 Modernizr、underscore.js、backbone.js、Raphael.js 等。
(理解这些框架的功能、性能、设计原理)
2. WebStorm 、Eclipse、IETester、Photoshop、PhpStorm、MySQL。
3。 城市选择插件,汽车型号选择插件、幻灯片插件。弹出层。(写过开源程
序,加载器,js 引擎更好)
17.列出 ****display ****的值,说明他们的作用。position ****的值,relative ****和 ****absolute
定位原点是?
1.block 象块类型元素一样显示。
none 缺省值。向行内元素类型一样显示。
inline-block 象行内元素一样显示,但其内容象块类型元素一样显示。
list-item 象块类型元素一样显示,并添加样式列表标记。
2.absolute 生成绝对定位的元素,相对于 static 以外的父元素进行定位。
fixed 生成绝对定位的元素,相对于浏览器窗口进行定位。
relative 生成相对定位的元素,相对于其正常位置进行定位。
static 默认值。没有定位,忽略 top, bottom, left, right 声明。
inherit 规定从父元素继承 position 属性的值。
18.页面重构怎么操作?
编写 CSS、让页面结构更合理化,提升用户体验,实现良好的页面效果和提
升性能。
19. ****H5 ****新特性了解多少?
新增语义化标签:
标记定义一个页面或一个区域的头部
标记定义导航链接
标记定义一个区域
标记定义页面内容部分的侧边栏
标记定义一篇文章
标记定义文件中一个区块的相关信息
标记定义一个对话框(会话框)类似微信
标记定义一个页面或一个区域的底部
标签语义化含义:
根据内容的结构化(内容语义化),选择合适的标签(代码语义化)。在没
有 CSS 的情况下,页面也能呈现出很好地内容结构、代码结构。另外有利于 SEO,
和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息,爬虫依赖于标签来
确定上下文和各个关键字的权重;最后是便于团队开发和维护,语义化更具可读
性,遵循 W3C 标准的团队都遵循这个标准,可以减少差异化。
Input 新增的 type:
url
number
range
Date picker:
Date —— 选取日、月、年
Month —— 选取月、年
Week —— 选取周和年
Time —— 选取时间(小时和分钟)
Datetime —— 选取时间、日、月、年(UTC 时间)
Datetime-local —— 选取时间、日、月、年(本地时间)
表单新增的属性:
autocomplete:自动完成,适用于
标签,以及以下类型的
标 签 : text, search, url, telephone, email, password, datepickers, range,
color。用法:<form autocomplete="on“>
或者单独在 input 中用
off
autofocus:自动地获得焦点,适用于所有 标签的类型用法:<input
autofocus="autofocus" />
multiple:可选择多个值,适用于中 type 为 email 和 file 用法:<input
type="file" multiple="multiple" />
placeholder:适用于中 type 为:text, search, url, telephone, email,
password
required:规定不能为空,适用于以下类型的 标签:text, search, url,
telephone, email, password, date pickers, number, checkbox, radio, file 用
法:<input type="text" required="required" />
Web Storage 客户端存储:
使用 HTML5 可以在本地存储用户的浏览数据。早些时候,本地存储使用的是
cookies。但是 Web 存储需要更加的安全与快速.
这些数据不会被保存在服务器上,但是这些数据只用于用户请求网站数据上.
它也可以存储大量的数据,而不影响网站的性能。数据以 键/值 对存在,web 网
页的数据只允许该网页访问使用。
客户端存储数据的两个对象为:
localStorage - 没有时间限制的数据存储
sessionStorage - 针对一个 session 的数据存储, 当用户关闭浏览器窗口
后,数据会被删除。
不管是 localStorage,还是 sessionStorage,可使用的 API 都相同,常用的有
如下几个(以 localStorage 为例):
保存数据:localStorage.setItem(key,value);
读取数据:localStorage.getItem(key);
删除单个数据:localStorage.removeItem(key);
删除所有数据:localStorage.clear();
得到某个索引的 key:localStorage.key(index);
其他作为补充,还有 web worker、web socket、canvas、video、audio 等,
使用相对较少。
20.为什么要初始化 ****CSS ****样式?如何初始化?
1.因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没
对 CSS 初始化往往会出现浏览器之间的页面显示差异。当然,初始化样式会对
SEO(搜索引擎优化) 有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。
2.最简单的初始化方法就是: * {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; }
Img{border:none}
21.描述一段语义的 ****html ****代码吧
HTML5 中新增加的很多标签(如:
、、和等)就是基于语义化设计原则
例如:<div id="header">
标题< /h1>
专注 Web 前端技术< /h2>
22. ****哪些方法有助于 ****SEO(搜索引擎优化) ****优化?
1.尽可能少的使用无语义的标签 div 和 span;
2.在语义不明显时,既可以使用 div 或者 p 时,尽量用 p, 因为 p 在默认情况下
有上下间距,对兼容特殊终端有利;
3.不要使用纯样式标签,如:b、font、u 等,改用 css 设置。
4.需要强调的文本,可以包含在 strong 或者 em 标签中(替换 b/i);
5.使用表格时,标题要用 caption,表头用 thead,主体部分用 tbody 包围,尾
部用 tfoot 包围。表头和一般单元格要区 6.分开,表头用 th,单元格用 td;
7.表单域要用 fieldset 标签包起来,并用 legend 标签说明表单的用途;
8.每个 input 标签对应的说明文本都需要使用 label 标签,并且通过为 input 设
置 id 属性,在 lable 标签中设置 for=someld 来让说明文本和相对应的 input
关联起来
23.什么叫优雅降级和渐进增强?
优雅降级:Web 站点在所有新式浏览器中都能正常工作,如果用户使用的是
老式浏览器,则代码会检查以确认它们是否能正常工作。由于 IE 独特的盒模型
布局问题,针对不同版本的 IE 的 hack 实践过优雅降级了,为那些无法支持功能
的浏览器增加候选方案,使之在旧式浏览器上以某种形式降级体验却不至于完全
失效.
渐进增强:从被所有浏览器支持的基本功能开始,逐步地添加那些只有新式
浏览器才支持的功能,向页面增加无害于基础浏览器的额外样式和功能的。当浏
览器支持时,它们会自动地呈现出来并发挥作用。
24.web ****标准网站有那些优点?
(1) Web 标准网站结构和布局分离,使网站的访问和维护更加容易
(2) Web 标准网站结构,布局以及页面访问都标准化,使网站能在更多的 web
标准设备中访问,兼容性更好
(3) Web 标准网站语义化更好,语义化的 XHTML 不仅对用户友好,对搜索
引擎也友好。
25.中 ****alt ****和 ****tittle ****的区别?
alt:图片显示不出来了就提示 alt
title:鼠标划过图片显示的提示
26.平时如何管理你的项目,如何设计突发大规模并发架构
先期团队必须确定好全局样式(globe.css),编码模式(utf-8) 等
编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);
标注样式编写人,各模块都及时标注(标注关键样式调用的地方);
页面进行标注(例如 页面 模块 开始和结束);
CSS 跟 HTML 分文件夹并行存放,命名都得统一(例如 style.css)
JS 分文件夹存放 命民以该 JS 功能为准英文翻译;
图片采用整合的 images.png png8 格式文件使用 尽量整合在一起使用方
便将来的管理
27.你说你热爱前端,那么应该 ****WEB ****行业的发展很关注吧? ****说说最近最流行的
一些东西吧
Node.js、Mongodb、npmM、MVVM、MEAN
28.移动端(比如:Android ****IOS)怎么做好用户体验?
提高浏览器访问速度,做响应式布局,内容要简单明了,做网页语义化和优化等
29.xhtml ****和 ****html ****有什么区别?
HTML 是一种基本的 WEB 网页设计语言,XHTML 是一个基于 XML 的置标语
言
最主要的不同:
XHTML 元素必须被正确地嵌套。
XHTML 元素必须被关闭。
标签名必须用小写字母。
XHTML 文档必须拥有根元素。
30.解释 ****css ****sprites,如何使用。
Css 精灵 把一堆小的图片整合到一张大的图片上,减轻服务器对图片的请求数
量
31.清除浮动的几种方式,各自的优缺点
1.使用空标签清除浮动 clear:both,会增加无意义的标签
2.使用 overflow:auto,空标签元素清除浮动,使用 zoom:1 用于兼容 IE
3.是用 afert 伪元素清除浮动(用于非 IE 浏览器)
4.使用 overflow:hidden,IE 低版本不兼容
32.一个网站制作完成之后,在发布之前,我们会对页面进行测试,测试内容主
要包括哪几个方面?
页面效果是否美观
链接是否完好
页面功能(如验证、交互等)是否正确
测试不同浏览器的兼容性
33. 你都有用过什么布局?瀑布流布局或者流式布局 (百分比布局) 是否有了解?****
静态布局,响应式布局
流式布局(百分比布局)
定宽布局:浮动法,定位法,转化表格法
1. 高度定死,宽度自适应
2. 对于大的轮播图等,宽度100%自适应
3. 对于小图标挥着文本,一般都是固定宽高大小
流式布局的缺点: 对于大屏幕来说,用户体验并不是特别好,有些布局元素会显得很长****
瀑布流布局原理
变宽布局:等比变宽,单列固定,优化浮动
设置图片宽度一致
根据浏览器宽度以及每列宽度计算出列表个数,列表默认0
当图片加载完成,所有图片依次放置在最小的列数下面
父容器高度取列表数组的最大值
34. 是否有接你使用那些版本管理系统,比如 ****Git,SVN 等
git是分布式版本管理控制系统(工具)。可以有效、高速地处理从很小到非常大的项目版本管理。
用过,svn 是集中式版本控制器,可以管理代码,不让代码错误覆盖
35.你能描述一下你制作一个网页的工作流程吗?
1.美工做图片
2.收集资料(文字、图片、音频、视屏)
4.色彩搭配,版块布局,风格主题
5.定尺寸,画版块,填充主要内容
6.定义页面内容
7.用户的体验性,动画的制作
8.用户审核
36.谈谈你认为怎样做能是项目做的更好?
例如:
了解客户需求
有很好的设计流程
掌握 web 前端知识
调整页面兼容性,或者设置响应式页面
优化网页,提高加载速度
设置友好的客户体验性等
37.如何提高用户的体验性?
提高浏览器加载速度
能让用户点击的,就不要设计敲键盘
设置友情链接,可以访问外部网站
设置站内搜索,可以关键字查询
页面之间有很好的关联性
可以设置论坛或在线交流问用户解答等
1、在视觉上:设计风格符合目标客户的审美习惯,保持整个站点的视觉一致性,
针对目标客户的审美 喜好,进行分析,从而确定网站的总体设计风格。可以从
网站 LOGO、页面布局、页面色彩、页面大小 、图标使用、广告位、动画效果
等方面呈现给用户视听上的体验与舒适性。
2、在操作上:表单提交、按钮设置、点击提示、错误提示、意见反馈、在线搜
索、新开窗口、等方面 呈现给用户操作上的体验,强调易用/可用性。
3、在体验上:会员交流、售后反馈、邮件/短信问候、网站地图等方面呈现给用
户心理上的体验,强调 友好性
4、在信任感上:联系方式准确有效的地址、电话等联系方式,便于查找。从服
务热线、法律声明、帮 助中心、公司介绍、服务保障等方面呈现给用户的信任
体验,强调可靠性。
做好用户体验照顾目标受众的需要,分析他们的需要和行业特征。用户体验做好了,
客户的粘性就增加了,也会给企业带来利益。
38.一个页面上有大量的图片,加载很慢,你有哪些方法优化这些图片的加载
1、使用 Sprites 图片技术
它将一个页面涉及到的所有零星图片都包含到一张大图中去,然后利用 CSS 技
术展现出来。这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一
幅地慢慢显示出来了,可以减少了整个网页的图片大小,并且利用 CSSSprites
能很好地减少网页的 http 请求,从而大大的提高页面的性能。
2、压缩文本和图片
压缩技术如 gzip 可以有效减少页面加载的时间。压缩率都可以在大小 70%左右。
虽然文本压缩用得比较多,但图片的压缩就比较随意,很多都是直接上传,其实
还有很大的压缩空间。
3、延迟显示可见区域外的内容
为了确保用户可以更快地看见可见区域的网页可以延迟加载或展现可见区域外
的内容,为了避免页面变形,可以使用占位符标签制定正确的高度和宽度。比如
WP 的 jQueryImage LazyLoad 插件就可以在用户停留在第一屏的时候,不加
载任何第一屏以下的图片信息,只有当用户把鼠标往下滚动的时候,这些图片才
开始加载。这样很明显提升可见区域的加载速度,提高用户体验。
4、确保功能图片优先加载
先加载图片再加载其它,会使用户体验感好。但速度不会提升
5、图片格式优化
不恰当的图像格式是一种极为常见的减慢加载速度的罪魁祸首。正确的图片格式
可以让图片缩小数倍,如果保存为最佳格式。可以节省大量带宽,减少处理时间
时间,大大加快页面加载速。
6、使用 Progressive JPEGs
ProgressiveJPEGs 图片是 JPEG 格式的一个特殊变种,名为“高级 JPEG”。在
创建高级 JPEG 文件时,数据是这样安排的:在装入图像时,开始只显示一个模
糊的图像,随着数据的装入,图像逐步变得清晰。它相当于交织的 GIF 格式的图
片。
39.Src ****和 ****href ****的区别?
1.请求资源类型不同
(1) href是表示超文本引用。用来建立当前元素和文档之间的链 接。常用
的有:link、a。
(2)在请求 src 资源时会将其指向的资源下载并应用到文档中,常用的有script、img;
2.作用结果不同
(1)href 用于在当前文档和引用资源之间确立联系;
(2)src 用于替换当前内容;
3.浏览器解析方式不同
(1)若在文档中添加href ,浏览器会识别该文档为 CSS 文件,就会并行下载资源
并且不会停止对当前文档的处理。
(2)当浏览器解析到src ,会暂停其他资源的下载和处理,直到将该资源加载、编译、
执行完毕,图片和框架等也如此,类似于将所指向资源应用到当前内容。这也是为什么
建议把 js 脚本放在底部而不是头部的原因。
40.重绘和重排的区别
重排(重构/回流/reflow):当渲染树中的一部分(或全部)因为元素的规模尺寸,
布局,隐藏等改变而需要重新构建, 这就称为回流(reflow)。每个页面至少需要
一次回流,就是在页面第一次加载的时候。
重绘(repaint 或 redraw):当盒子的位置、大小以及其他属性,例如颜色、
字体大小等都确定下来之后,浏览器便把这些原色都按照各自的特性绘制一遍,
将内容呈现在页面上。重绘是指一个元素外观的改变所触发的浏览器行为,浏览
器会根据元素的新属性重新绘制,使元素呈现新的外观。
重排必定会引发重绘,但重绘不一定会引发重排
引发重排
1、页面渲染初始化;(无法避免)
2、添加或删除可见的 DOM 元素;
3、元素位置的改变,或者使用动画;
4、元素尺寸的改变——大小,外边距,边框;
5、浏览器窗口尺寸的变化(resize 事件发生时);
6、填充内容的改变,比如文本的改变或图片大小改变而引起的计算值宽度和高
度的改变;
7 、 取 某 些 元 素 属 性 : ( offsetLeft/Top/Height/Width,
clientTop/Left/Width/Height,
scrollTop/Left/Width/Height,width/height,getComputedStyle(),currentSt
yle(IE))
重绘发生的情况:
重绘发生在元素的可见的外观被改变,但并没有影响到布局的时候。比如,仅修
改 DOM 元素的字体颜色(只有 Repaint,因为不需要调整布局)
优化:
1、浏览器自己的优化:浏览器会维护 1 个队列,把所有会引起回流、重绘的操
作放入这个队列,等队列中的操作到了一定的数量或者到了一定的时间间隔,浏
览器就会 flush 队列,进行一个批处理。这样就会让多次的回流、重绘变成一次
回流重绘。
2、我们要注意的优化:我们要减少重绘和重排就是要减少对渲染树的操作,则
我们可以合并多次的 DOM 和样式的修改。并减少对 style 样式的请求。
(1)直接改变元素的 className
(2)display:none;先设置元素为 display:none;然后进行页面布局等操
作;设置完成后将元素设置为 display:block;这样的话就只引发两次重绘和
重排;
(3)不要经常访问浏览器的 flush 队列属性;如果一定要访问,可以利用缓存。
将访问的值存储起来,接下来使用就不会再引发回流;
(4)使用 cloneNode(true or false) 和 replaceChild 技术,引发一次回流和
重绘;
(5)将需要多次重排的元素,position 属性设为 absolute 或 fixed,元素脱离
了文档流,它的变化不会影响
到其他元素;
(6)如果需要创建多个 DOM 节点,可以使用 DocumentFragment 创建完后
一次性的加入 document;
(7)尽量不要使用 table 布局。
41. ****px ****和 ****em ****和 ****rem ****的区别
px 实际上就是像素,用 px 设置字体大小时,比较稳定和精确。相对长度单位。
像素 px 是相对于显示器屏幕分辨率而言的。px 的缺点是其不能适应浏览器缩放
时产生的变化,因此一般不用于响应式网站。
em 就是根据基准来缩放字体的大小,是相对长度单位。相对于当前对象内文
本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的
默认字体尺寸。
rem 相对于根元素 ,这样就意味着,我们只需要在根元素确定一个参
考值。rem 是 CSS3 新增的一个相对单位(root em,根 em)。
rem 特点
rem 相对单位,相对于根元素 ;
相对大小和绝对大小的优点于一身;
修改根元素就成比例地调整所有字体大小;
避免字体大小逐层复合的连锁反应.
42.什么是 ****BFC?
BFC (Block formatting context)块级格式化格式化上下文,它是一种独立的渲染区域,它规定了内部的如何布局,并且与这个区域外部毫不相干。
BFC布局规则:
内部的Box(盒子)会在垂直方向,一个接一个的放置
Box的垂直方向的距离由margin决定,属于同一个BFC的两个相邻的Box会重叠
BFC的区域不会与float box重叠(定位情况除外)
计算BFC的高度时,浮动元素也参与计算
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
BFC作用:
1、防止垂直 margin 重叠2、避免浮动元素和其他元素重叠3、清除内部浮动
43.移动端的适配方案有哪些?
1. 百分比布局
百分比布局(流式布局)是通过百分比单位 " % " 来实现对不同屏幕宽度的
响应式效果
百分比布局在布局中应用比较广泛,通过百分比单位使页面中组件的宽高随着浏
览器宽高的变化而变化,从而实现响应式的效果
缺点:大量计算百分比值比较困难,各个属性使用百分比,相对父元素的属性并
不唯一,使布局变得复杂(比如 margin、padding 垂直水平方向都相对比父元
素的宽度,border-radius、translate 相对于元素自身,定位元素属性相对于直
接非 static 定位的父元素..)
核心:css 的单位为%,值为该元素属性值除以相对于元素属性值的比。
2.vw/vh 适配
vw/vh 是 CSS3 新增的相对单位,相对于视口的宽度 / 高度,视口被均分
为 100 单位,每单位等于 1vw/vh
vw:视口宽度的百分比(100vw 等于视口宽度的 100%)
vh:视口高度的百分比(100vh 等于视口高度的 100%)
通过 vw/vh 设置元素的大小可以实现对不同屏幕宽度的响应式效果。
核心:css 单位为 vw/vh,以 ip6 的设计图为例,1px =(1/375)*100 vw/vh
3. @media 媒体查询
@media 媒体查询 通过查询不同的媒体类型来实现不同的样式,特别是响
应式页面,可以通过不同媒体类型的不同屏幕大小,实现多套不同的样式,达到
自适应的效果。
缺点:配置多个响应断点,可能造成响应式断层问题,对用户不友好。
例如:
//通过查询不同的媒体类型,使用不同的 css 代码
@media screen and (min-width:1200px) {
//css 代码
}
@media screen and (min-width:992px) {
//css 代码
}
@media screen and (min-width:768px) {
//css 代码
}
@media screen and (min-width:480px) {
//css 代码
}
4.rem 适配
rem 是 CSS3 新增的相对长度单位,相对于根元素(html)的 font-size 值
的大小来计算,1rem 等于根元素 font-size 的 px 值。可以搭配媒体查询划
分不同屏幕下根标签的字体大小进行使用,也可以直接引入第三方 js 库,例如
flexible.js。框架开发中可以引入 amfe-flexible 或者 lib-flxible。
5.弹性盒子(Flex 布局)
弹性盒子是 CSS3 的一种新的布局模式,可以简便、完整、响应式地实现各
种页面布局 CSS3 弹性盒,是一种当页面需要适应不同的屏幕大小以及设备类
型时确保元素拥有恰当的行为的布局方式。
移动端可以使用,PC 端仅现代主流浏览器支持,要考虑兼容性问题。
44.CSS ****怎么画出一个三角形?
1. 将一个 div 的宽度和高度设置为 0,然后设置边框样式,让边框来撑开盒子
2. 将左右下边框设置成 transparent,只保留上边框的颜色,就可以画出一个三角形