面试集锦

**介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的**

标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin
低版本IE盒子模型:宽度=内容宽度(content+border+padding)+ margin

**box-sizing属性**

用来控制元素的盒子模型的解析模式,默认为content-box
context-box:W3C的标准盒子模型,设置元素的 height/width 属性指的是content部分的高/宽
border-box:IE传统盒子模型。设置元素的height/width属性指的是border + padding + content部分的高/宽

**CSS选择器有哪些?哪些属性可以继承**

1.* 通用元素选择器,匹配任何元素
2.E 标签选择器,匹配所有使用 E 标签的元素
3…info class 选择器,匹配所有 class 属性中包含 info 的元素
4. #footer id 选择器,匹配所有 id 属性等于 footer 的元素
5. E,F 多元素选择器,同时匹配所有 E 元素或 F 元素,E 和 F 之间用逗号分隔
6. E F 后代元素选择器,匹配所有属于 E 元素后代的 F 元素,E 和 F 之间用空格分隔
7. E > F 子元素选择器,匹配所有 E 元素的子元素 F
8. E + F 毗邻元素选择器,匹配所有紧随 E 元素之后的同级元素 F
9. E[att] 匹配所有具有 att 属性的 E 元素,不考虑它的值。(注意:E 在此处可以省略,比 如"[cheacked]"。以下同。)
10. E[att=val]匹配所有 att 属性等于"val"的 E 元素
11. E[att~=val] 匹配所有 att 属性具有多个空格分隔的值、其中一个值等于"val"的 E 元素
12. E[att|=val] 匹配所有 att 属性具有多个连字号分隔(hyphen-separated)的值、其 中一个值以"val"开头的 E 元素,主要用于 lang 属性,比如"en"、“en-us”、"en-gb"等等
13. E:first-child 匹配父元素的第一个子元素
14. E:link 匹配所有未被点击的链接
15. E:visited 匹配所有已被点击的链接
16. E:active 匹配鼠标已经其上按下、还没有释放的 E 元素
17. E:hover 匹配鼠标悬停其上的 E 元素
18. E:focus 匹配获得当前焦点的 E 元素
19. E:lang© 匹配 lang 属性等于 c 的 E 元素
20. E:first-line 匹配 E 元素的第一行
21. E:first-letter 匹配 E 元素的第一个字母
22. E:before 在 E 元素之前插入生成的内容 23. E:after 在 E 元素之后插入生成的内容
24. E ~ F 匹配任何在 E 元素之后的同级 F 元素
25. E[att^=“val”] 属性 att 的值以"val"开头的元素
26. E[att$=“val”] 属性 att 的值以"val"结尾的元素
27. E[att*=“val”] 属性 att 的值包含"val"字符串的元素
28. E:enabled 匹配表单中激活的元素
29. E:disabled匹配表单中禁用的元素
30. E:checked 匹配表单中被选中的 radio(单选框)或 checkbox(复选框)元素
31. E::selection 匹配用户当前选中的元素
32. E:root 匹配文档的根元素,对于 HTML 文档,就是 HTML 元素
33. E:nth-child(n) 匹配其父元素的第 n 个子元素,第一个编号为 1
34. E:nth-last-child(n) 匹配其父元素的倒数第 n 个子元素,第一个编号为 1
35. E:nth-of-type(n) 与:nth-child()作用类似,但是仅匹配使用同种标签的元素
36. E:nth-last-of-type(n) 与:nth-last-child() 作用类似,但是仅匹配使用同种标签 的元素
37. E:last-child 匹配父元素的最后一个子元素,等同于:nth-last-child(1)
38. E:first-of-type 匹配父元素下使用同种标签的第一个子元素,等同于:nth-of-type(1)
39. E:last-of-type 匹配父元素下使用同种标签的最后一个子元素,等同 于:nth-last-of-type(1)
40. E:only-child 匹配父元素下仅有的一个子元素,等同于:first-child:last-child 或 :nth-child(1):nth-last-child(1)
41. E:only-of-type 匹配父元素下使用同种标签的唯一一个子元素,等同 于:first-of-type:last-of-type 或 :nth-of-type(1):nth-last-of-type(1)
42. E:empty 匹配一个不包含任何子元素的元素,注意,文本节点也被看作子元素
43. E:not(s) 匹配不符合当前选择器的任何元素
44. E:target 匹配文档中特定"id"点击后的效果

可继承的属性:font-size, font-family, color
不可继承的样式:border, padding, margin, width, height

**CSS3新增伪类有那些**

p:first-of-type 选择属于其父元素的首个元素
p:last-of-type 选择属于其父元素的最后元素
p:only-of-type 选择属于其父元素唯一的元素
p:only-child 选择属于其父元素的唯一子元素
p:nth-child(2) 选择属于其父元素的第二个子元素
:enabled :disabled 表单控件的禁用状态。
:checked 单选框或复选框被选中

**display有哪些值?说明他们的作用?**

inline(默认)–内联
none–隐藏
block–块显示
inline-block - 行内块显示
table –表格显示,表格前后有换行符
inline-table - 内联表格显示,表格前后没有换行符
table-cell - 表格单元格显示,类似td和th
table-caption - 表格标题显示,类似caption
table-row - 表格行显示,类似tr
list-item–项目列表

 **position的值**

static(默认):按照正常文档流进行排列;
relative(相对定位):不脱离文档流,参考自身静态位置通过 top, bottom, left, right 定位;
absolute(绝对定位):参考距其最近一个不为static的父级元素通过top, bottom, left, right 定位;
fixed(固定定位):所固定的参照对像是可视窗口。

**CSS3有哪些新特性**

box-shadow 盒子阴影
border-radius 盒子圆角
text-shadow 文字阴影
background:linear-gradient() 线性渐变
background:radial-gradient() 径向渐变
Transition 过渡属性
Transform:scale()/rotate()/translate() 缩放、旋转、平移
Animation 动画
border-image 边框图片
Column:多列布局

**Transition和animation的不同**

1、transition需要交互,animation既可以自动播放,也可以借助交互
2、Transition只能定义开始和结束状态,animation既可以定义开始和结束状态,还能通过关 键帧定义中间状态
3、Transition不可以控制暂停和播放,animation可以控制暂停和播放

**Css浏览器兼容写法**

-moz- 火狐等
-webkit- 苹果,谷歌等
-o- opera
-ms- IE
把不带前缀的版本放到最后一行

**需要加前缀的属性有哪些**

@keyframes animation border-radius box-shadow backface-visibility
Column flex perspective

 **请解释一下CSS3的flexbox(弹性盒布局模型),以及适用场景**

该布局模型的目的是提供一种更加高效的方式来对容器中的条目进行布局、对齐和分配空间。在传统的布局方式中,block 布局是把块在垂直方向从上到下依次排列的;而 inline 布局则是在水平方向来排列。弹性盒布局并没有这样内在的方向限制,可以由开发人员自由操作。
试用场景:弹性布局适合于移动前端开发,在Android和ios上也完美支持。

**为什么要初始化CSS样式**

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异

**CSS里的visibility属性有个collapse属性值?在不同浏览器下以后什么区别**

当一个元素的visibility属性被设置成collapse值后,对于一般的元素,它的表现跟hidden是一样的。
chrome中,使用collapse值和使用hidden没有区别。
firefox,opera和IE,使用collapse值和使用display:none没有什么区别。

**display:none与visibility:hidden的区别**

display:none 不显示对应的元素,在文档布局中不再分配空间
visibility:hidden 隐藏对应元素,在文档布局中仍保留原来的空间

**对BFC规范(块级格式化上下文:block formatting context)的理解**

布局规则:
1 内部的box会在垂直方向,一个接一个的放置
2 box垂直方向的距离由margin决定,属于同一个bfc的两个相邻box的margin会发生重叠
3 每个元素的margin的左边,与包含块的左边相接触
4 bfc的区域不会与float重叠
5 bfc就是页面上的一个独立容器,容器里面的子元素不会影响到外面的元素
6 计算bfc的高度时,浮动元素也参与计算

以下这些元素会生成bfc:
1 根元素
2 float不为none
3 position为absolute或者fixed
4 overflow不为auto
5 display 为inline-block inline-flex flex table-cell table-caption

应用为防止覆盖,清除浮动,防止margin重叠

**为什么会要清除浮动?清除浮动的方式**

子元素浮动,从而造成父元素高度塌陷,当给父元素设置背景色时,无效。所以要清除浮动
方法:
1 给父元素添加overflow:hidden
2 空标签法 clear:both
3 伪元素清除浮动:
::after{
Content:””;
Clear:both;
Height:0;
Display:block;
Overflow:hidden
}

**CSS优化、提高性能的方法有哪些**

避免过度约束
避免后代选择符
避免链式选择符
使用紧凑的语法
避免不必要的命名空间
避免不必要的重复
最好使用表示语义的名字。一个好的类名应该是描述他是什么而不是像什么
避免!important,可以选择其他选择器
尽可能的精简规则,你可以合并不同类里的重复规则

**margin和padding分别适合什么场景使用**

何时使用margin
需要在border外侧添加空白
空白处不需要背景色
上下相连的两个盒子之间的空白,需要相互抵消时。
何时使用padding
需要在border内侧添加空白
空白处需要背景颜色
上下相连的两个盒子的空白,希望为两者之和。

**元素竖向的百分比设定是相对于容器的高度吗**

当按百分比设定一个元素的宽度时,它是相对于父容器的宽度计算的,但是,对于一些表示竖向距离的属性,例如 padding-top , padding-bottom , margin-top , margin-bottom 等,当按百分比设定它们时,依据的也是父容器的宽度,而不是高度

**什么是响应式设计?响应式设计的基本原理是什么**

响应式网站设计(Responsive Web design)是一个网站能够兼容多个终端,而不是为每一个终端做一个特定的版本。
基本原理是通过媒体查询检测不同的设备屏幕尺寸做处理。
页面头部必须有meta声明的viewport。

**`::before 和 :after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用`**

单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素
::before就是以一个子元素的存在,定义在元素主体内容之前的一个伪元素。并不存在于dom之中,只存在在页面之中

**`你对line-height是如何理解的`**

行高是指一行文字的高度,具体说是两行文字间基线的距离。CSS中起高度作用的是height和line-height,没有定义height属性,最终其表现作用一定是line-height。
单行文本垂直居中:把line-height值设置为height一样大小的值可以实现单行文字的垂直居中,其实也可以把height删除。

**`怎么让Chrome支持小于12px 的文字`**

p{font-size:10px;-webkit-transform:scale(0.8);} //0.8是缩放比例

**`让页面里的字体变清晰,变细用CSS怎么做`**

-webkit-font-smoothing在window系统下没有起作用,但是在IOS设备上起作用-webkit-font-smoothing:antialiased是最佳的,灰度平滑

**`position:fixed;在android下无效怎么处理`**
**`如果需要手动写动画,你认为最小时间间隔是多久,为什么`**

多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms = 16.7ms。

**`li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法`**

行框的排列会受到中间空白(回车空格)等的影响,因为空格也属于字符,这些空白也会被应用样式,占据空间,所以会有间隔,把字符大小设为0,就没有空格了
解决方法:
1、可以将

  • 代码全部写在一排
    2、浮动li中float:left
    3、在ul中用font-size:0(谷歌不支持);可以使用letter-space:-3px
  • **`png、jpg、gif 这些图片格式解释一下,分别什么时候用。有没有了解过webp`**
    

    png是便携式网络图片(Portable Network Graphics)是一种无损数据压缩位图文件格式.优点是:压缩比高,色彩好。 大多数地方都可以用。
    jpg是一种针对相片使用的一种失真压缩方法,是一种破坏性的压缩,在色调及颜色平滑变化做的不错。在www上,被用来储存和传输照片的格式。
    gif是一种位图文件格式,以8位色重现真色彩的图像。可以实现动画效果.
    webp格式是谷歌在2010年推出的图片格式,压缩率只有jpg的2/3,大小比png小了45%。缺点是压缩的时间更久了,兼容性不好,目前谷歌和opera支持。

    **`style标签写在body后与body前有什么区别`**
    

    页面加载自上而下 当然是先加载样式。
    写在body标签后由于浏览器以逐行方式对HTML文档进行解析,当解析到写在尾部的样式表(外联或写在style标签)会导致浏览器停止之前的渲染,等待加载且解析样式表完成之后重新渲染,在windows的IE下可能会出现FOUC现象(即样式失效导致的页面闪烁问题)

    **`CSS属性overflow属性定义溢出元素内容区的内容会如何处理`**
    

    参数是scroll时候,必会出现滚动条。
    参数是auto时候,子元素内容大于父元素时出现滚动条。
    参数是visible时候,溢出的内容出现在父元素之外。
    参数是hidden时候,溢出隐藏。

    **`阐述一下CSS Sprites`**
    

    将一个页面涉及到的所有图片都包含到一张大图中去,然后利用CSS的 background-image,background- repeat,background-position 的组合进行背景定位。利用CSS Sprites能很好地减少网页的http请求,从而大大的提高页面的性能;CSS Sprites能减少图片的字节。

    **`上下margin重合的问题`**
    

    在重合元素外包裹一层容器,并触发该容器生成一个BFC

    **`你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么`**
    

    Trident 内核:IE 系列
    Gecko 内核:Firefox
    Webkit 内核:Safari
    Blink 内核:是基于 Webkit 内核的子项目,使用的浏览器有: Chrome/opera 等除 IE、Firefox、Safari 之外的几乎所有浏览器 几乎所有国产双内核浏览器(Trident/Blink)如 360、猎豹、qq、百度等

    **`每个 HTML 文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗,严格模式与混杂模式的区别`**
    

    文档声明。 声明位于文档中的最前面的位置,处于 标签之前。此标签可告知浏览器文档使用 哪种 HTML 或 XHTML 规范。(重点:告诉浏览器按照何种规范解析页面) IE 下如不书写文档声明会使用怪异模式解析网页导致一系列 CSS 兼容性问题。
    严格模式下:页面排版及 JS 解析是以该浏览器支持的最高标准来执行
    混杂模式:不严格按照标准执行,主要用来兼容旧的浏览器,向后兼容

    **`div+css 的布局较 table 布局有什么优点`**
    

    正常场景一般都适用 div+CSS 布局,优点: 结构与样式分离 代码语义性好 更符合 HTML 标准规范 SEO 友好 Table 布局的适用场景: 某种原因不方便加载外部 CSS 的场景,例如邮件正文,此时用 table 布局可以在无 css 情况下保持页面布局正常

    面试集锦_第1张图片

    为什么利用多个域名来存储网站资源会更有效
    

    CDN 缓存更方便
    突破浏览器并发限制
    节约 cookie 带宽
    节约主域名的连接数,优化页面响应速度 防止不必要的安全问题

    **`请谈一下你对网页标准和标准制定机构重要性的理解`**
    

    网页标准和标准制定机构都是为了能让 web 发展的更‘健康’,开发者遵循统一的标准,降低开发难度, 开发成本,SEO 也会更好做,也不会因为滥用代码导致各种 BUG、安全问题,最终提高网站易用性

    **`请描述一下 cookie,session,sessionStorage 和 localStorage 的区别`**
    

    cookie和session都是用来跟踪浏览器用户身份的会话方式
    cookie保存在浏览器端,session保存在服务器端
    cookie机制:如果不在浏览器中设置过期时间,cookie被保存在内存中,生命周期随浏览器的关闭而结束,这种cookie简称会话cookie。如果在浏览器中设置了cookie的过期时间,cookie被保存在硬盘中,关闭浏览器后,cookie数据仍然存在,直到过期时间结束才消失
    session机制:当服务器收到请求需要创建session对象时,首先会检查客户端请求中是否包含sessionid。如果有sessionid,服务器将根据该id返回对应session对象。如果客户端请求中没有sessionid,服务器会创建新的session对象,并把sessionid在本次响应中返回给客户端。通常使用cookie方式存储sessionid到客户端,在交互中浏览器按照规则将sessionid发送给服务器
    cookie只能保存字符串类型,以文本的方式;session通过类似与Hashtable的数据结构来保存,能支持任何类型的对象(session中可含有多个对象)
    cookie:单个cookie保存的数据不能超过4kb;session大小没有限制
    Cookie与Session的区别:
    (1)存储位置:cookie数据存放在客户浏览器上,session数据放在服务器上;
    (2)安全性:cookie不是很安全,别人可以分析存放在本地的cookie,考虑到安全应当使用session;
    (3)性能:session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能。考虑到服务器性能,适当使用cookie;
    (4)大小限制:单个cookie在客户端的存储大小有限制

    WebStorage的目的是克服由cookie所带来的一些限制,当数据需要被严格控制在客户端时,不需要持续的将数据发回服务器
    WebStorage提供了两种API:localStorage(本地存储)和sessionStorage(会话存储)
    localStorage:localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失。localStorage除非主动删除数据,否则数据永远不会消失。
    essionStorage的生命周期是在仅在当前会话下有效
    localStorage和sessionStorage的存储数据大小一般都是:5MB
    localStorage和sessionStorage都保存在客户端,不与服务器进行交互通信
    localStoragese:常用于长期登录(+判断用户是否已登录),适合长期保存在本地的数据。sessionStorage:敏感账号一次性登录
    WebStorage的优点:
    (1)存储空间更大:cookie为4KB,而WebStorage是5MB;
    (2)节省网络流量:WebStorage不会传送到服务器,存储在本地的数据可以直接获取,也不会像cookie一样美词请求都会传送到服务器,所以减少了客户端和服务器端的交互,节省了网络流量;
    (3)对于那种只需要在用户浏览一组页面期间保存而关闭浏览器后就可以丢弃的数据,sessionStorage会非常方便;
    (4)快速显示:有的数据存储在WebStorage上,再加上浏览器本身的缓存。获取数据时可以从本地获取会比从服务器端获取快得多,所以速度更快;
    (5)安全性:WebStorage不会随着HTTP header发送到服务器端,所以安全性相对于cookie来说比较高一些,不会担心截获,但是仍然存在伪造问题;
    (6)WebStorage提供了一些方法,数据操作比cookie方便;
       setItem (key, value) —— 保存数据,以键值对的方式储存信息。
    getItem (key) —— 获取数据,将键值传入,即可获取到对应的value值。
    removeItem (key) —— 删除单个数据,根据键值移除对应的信息。
    clear () —— 删除所有的数据

    **`说一下你对cookie的了解`**
    

    Cookie 是一小段文本信息,存储于客户端,每当用户访问站点时,程序都可以读取 Cookie 包含的信息。
    作用为Cookie 能够帮助 站点保存有关访问者的信息。更概括地说,Cookie 是一种保持Web 应用程序连续性(即执行“状态管理”)的方法.使 Web 站点记住你。
    Cookie分为会话型cookie和持久型cookie
    cookie局限性:
    ①数量限制 不超过20个
    ②清理方式 cookie过多时,每个浏览器会自动清理一些
    ③大小限制 一般不超过4095字节
    ④安全性 cookie是将数据存储在客户端,所以相对来说安全性较低

    **`简述一下 src 与 href 的区别`**
    

    src 用于替换当前元素,href 用于在当前文档和引用资源之间确立联系。
    src 是 source 的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求 src 资源时会将其指向的资源下载并应用到文档内,例如 js 脚本,img 图片和 frame 等元素。 当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和 框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将 js 脚本放在底部而不是头部。
    href 是 Hypertext Reference 的缩写,指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链 接)之间的链接,如果我们在文档中添加 那么浏览器会识别该文档为 css 文件,就会并行下载资源并且不会停止对当前文档的处理。这也是为什么 建议使用 link 方式来加载 css,而不是使用@import 方式

    **`在 css/js 代码上线之后开发人员经常会优化性能,从用户刷新网页开始,一 次 js 请求一般情况下有哪些地方会有缓存处理?`**
    

    dns 缓存,cdn 缓存,浏览器缓存,服务器缓存

    **`一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化 这些图片的加载,给用户更好的体验`**
    

    图片懒加载,在页面上的未可视区域可以添加一个滚动条事件,判断图片位置与浏览器顶端的距离与页面 的距离,如果前者小于后者,优先加载
    如果为幻灯片、相册等,可以使用图片预加载技术,将当前展示图片的前一张和后一张优先下载。
    如果图片为 css 图片,可以使用 CSSsprite,SVGsprite,Iconfont、Base64 等技术。
    如果图片过大,可以使用特殊编码的图片,加载时会先加载一张压缩的特别厉害的缩略图,以提高用户体 验。
    如果图片展示区域小于图片的真实大小,则因在服务器端根据业务需要先行进行图片压缩,图片压缩后大 小与展示一致

    **`谈谈以前端角度出发做好 SEO 需要考虑什么`**
    

    SEO(Search Engine Optimization):汉译为搜索引擎优化。是一种方式:利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名
    搜索引擎主要以: 外链数量和质量 网页内容和结构 来决定某关键字下的网页搜索排名。
    前端应该注意网页结构和内容方面的情况: Meta 标签优化 主要包括主题(Title),网站描述(Description)。还有一些其它的隐藏文字比如 Author(作者),Category (目录),Language(编码语种)等。 符合 W3C 规范的语义性标签的使用。 如何选取关键词并在网页中放置关键词 搜索就得用关键词。
    关键词分析和选择是 SEO 最重要的工作之一。首先要给网站确定主关键词(一般在 5 个上下),然后针对这些关键词进行优化,包括关键词密度(Density),相关度(Relavancy),突出性 (Prominency)等等。

    **`把一个元素隐藏有几种方式`**
    

    ①把宽高都设置为0,再添加一个overflow:hidden(在页面不占空间)
    ②display:none(在页面不占空间)
    ③visibility:hidden(在页面占空间)
    ④opacity:0(在页面占空间,只是透明)
    ⑤background:rgba(0,0,0,0)(局限不推荐使用,无法隐藏子元素)
    ⑥设置 text-indent:-9999px;

    **`rgba()和 opacity 的透明效果有什么不同?`**
    

    rgba()和 opacity 都能实现透明效果,但最大的不同是 opacity 作用于元素,以及元素内的所有内容的透 明度,
    而 rgba()只作用于元素的颜色或其背景色。(设置 rgba 透明的元素的子元素不会继承透明效果!)

    **`超链接访问过后 hover 样式就不出现的问题是什么?如何解决?`**
    

    被点击访问过的超链接样式不再具有 hover 和 active 了,解决方法是改变 CSS 属性的排列顺 序: L-V-H-A(link,visited,hover,active)

    **`什么是外边距重叠?重叠的结果是什么`**
    

    外边距重叠就是 margin-collapse。
    在 CSS 当中,相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边 距。这种合并外边距的方式被称为折叠,并且因而所结合成的外边距称为折叠外边距。
    折叠结果遵循下列计算规则: 两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。 两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。 两个外边距一正一负时,折叠结果是两者的相加的和。

    **`display:inline-block换行符/空格间隙问题`**
    

    同行显示的inline-block元素之间经常会出现一定的空隙,这就是“换行符/空格间隙问题”
    元素被当成行内元素排版的时候,元素之间的空白符(空格、回车换行等)都会被浏览器处理,根据white-space的处理方式(默认是normal,合并多余空白),原来HTML代码中的回车换行被转成一个空白符,在字体不为0的情况下,空白符占据一定宽度,所以inline-block的元素之间就出现了空隙
    解决空隙的办法:
    办法一:解决元素之间的空白符,取消换行。缩进
    缺点:代码可读性下降
    方法二:为父元素中设置font-size: 0,在子元素上重置正确的font-size
    缺点:inline-block元素必须设定字体,不然行内元素中的字体不会显示。 增加了代码量
    方法三:为inline-block元素添加样式float:left
    缺点:float布局会有高度塌陷问题
    方法四:设置子元素margin值为负数
    缺点:元素之间间距的大小与上下文字体大小相关;并且同一大小的字体,元素之间的间距在不同浏览器下是不一样的,如:font-size:16px时,Chrome下元素之间的间距为8px,而Firefox下元素之间的间距为4px。所以不同浏览器下margin-right的负值是不一样的,因此这个方法不通用
    方法五:设置父元素,display:table和word-spacing
    方法六:设置父元素letter-space负值

    **`关于letter-space和word-spacing区别`**
    

    这两个属性都用来添加他们对应的元素中的空白。letter-spacing添加字母之间的空白,而word-spacing添加每个单词之间的空白。请大家注意,word-spacing对中文无效。可以写负值

    **`如何垂直居中一个浮动元素`**
    

    方法一:已知元素的高宽
    #div1{
    background-color:#6699FF;
    width:200px;
    height:200px;
    position: absolute; /父元素需要相对定位/
    top: 50%;
    left: 50%;
    margin-top:-100px ; /二分之一的 height,width/
    margin-left: -100px;
    }
    方法二:未知元素的高宽
    #div1{
    width: 200px;
    height: 200px;
    background-color: #6699FF;
    margin:auto;
    position: absolute; /父元素需要相对定位/
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    }
    如何垂直居中一个img?(用更简便的方法。)
    #container /的容器设置如下/ {
    display:table-cell;
    text-align:center;
    vertical-align:middle;
    }

    **`px 和 em 的区别`**
    

    px 和 em 都是长度单位,
    区别是: px 值固定,容易计算。 em 值不固定,是相对单位,其相对应父级元素的字体大小会调整

    **`描述一个”reset”的 CSS 文件并如何使用它。知道 normalize.css 吗?你了解 他们的不同之处`**
    

    Reset 样式的目的是清除浏览器某些默认样式,方便 css 书写,例如:
    {margin:0;padding:0;list-style:none;}
    Normalize 的理念与 reset 不同,它并不清除浏览器默认样式,而是尽量将所有浏览器的默认样式统一。
    它有以下的作用:
    1、保护了有价值的默认值
    2、修复了浏览器的bug
    3、不会让调试工具变得杂乱
    4、它是模块化的
    5、拥有更详细的文档
    normalize.css的部分原文
    html {
    line-height: 1.15; /
    1 /
    -webkit-text-size-adjust: 100%; /
    2 */
    }
    body {
    margin: 0;
    }
    main {
    display: block;
    }
    h1 {
    font-size: 2em;
    margin: 0.67em 0;
    }

    **`Sass、LESS 是什么?大家为什么要使用他们?`**
    

    他们是 CSS 预处理器。他是 CSS 上的一种抽象层。他们是一种特殊的语法/语言编译成 CSS
    为什么要使用它们?
    结构清晰,便于扩展。
    可以方便地屏蔽浏览器私有语法差异。
    可以轻松实现多重继承。 完全兼容 CSS 代码,可以方便地应用到老项目中。LESS 只是在 CSS 语法上做了扩展,所以老的 CSS 代 码也可以与 LESS 代码一同编译

    **`HTML 与 XHTML二者有什么区别`**
    

    XHTML可扩展超文本标记语言(英语:eXtensible HyperText Markup Language,XHTML),是一种标记语言,表现方式与超文本标记语言(HTML)类似,不过语法上更加严格。从继承关系上讲,HTML是一种基于标准通用标记语言(SGML)的应用,是一种非常灵活的置标语言
    1.所有的标记都必须要有一个相应的结束标记
    2.所有标签的元素和属性的名字都必须使用小写
    3.所有的 XML 标记都必须合理嵌套
    4.所有的属性必须用引号 “” 括起来
    5.把所有 < 和 & 特殊符号用编码表示
    6.给所有属性赋一个值
    7.不要在注释内容中使用 “–”
    8.图片必须有说明文字

    **`对 WEB 标准以及 W3C 的理解与认识`**
    

    WEB标准 不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3C DOM)、ECMAScript等。
    这些标准大部分由 万维网联盟 (外语缩写: W3C )起草和发布,也有一些是其他标准组织制订的标准,比如ECMA(European Computer Manufacturers Association)的ECMAScript标准

    **`前端页面有哪三层构成,分别是什么`**
    

    结构层 Html 表示层 CSS 行为层 js

     空(void)元素有那些
    

    常见的空元素:



    鲜为人知的: (带有可点击区域的图像射) http://www.w3school.com.cn/tags/tag_area.asp

    (在head之间,设置整体超链接的打开状态)
    **`行内元素和块级元素的具体区别是什么?行内元素的 padding 和 margin 可设 置吗`**
    

    块级元素(block)特性: 总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显示; 宽度(width)、高度(height)、内边距(padding)和外边距(margin)都可控制;
    内联元素(inline)特性: 和相邻的内联元素在同一行; 宽度(width)、高度(height)、内边距的 top/bottom(padding-top/padding-bottom)和外边距的 top/bottom(margin-top/margin-bottom)都不可改变(也就是 padding 和 margin 的 left 和 right 是可以 设置的),就是里面文字或图片的大小。

    **`b 标签和 strong 标签,i 标签和 em 标签的区别`**
    

    后者有语义,为腔调,前者则无

    **`html5 有哪些新特性、移除了那些元素`**
    

    1.拖拽释放(Drag and drop) API
    2. 语义化更好的内容标签(header,nav,footer,aside,article,section,progress)
    3. 音频、视频 API(audio,video)
    4. 画布(Canvas) API
    5. 地理(Geolocation) API
    6. 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
    7. sessionStorage 的数据在浏览器关闭后自动删除
    8. 表单控件,calendar、date、time、email、url、search

    **`如何实现浏览器内多个标签页之间的通信`**
    

    调用 localstorge、cookies 等本地存储方式

    **`你如何对网站的文件和资源进行优化?`**
    

    文件合并
    文件最小化/文件压缩
    使用 CDN 托管
    缓存的使用

    **`HTML5 Canvas 元素有什么用`**
    

    Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML 上进行图形操作

    **`前端h5存储方式的几种总结https://www.cnblogs.com/LuckyWinty/p/5699117.html`**
    

    1、本地存储localStorage
    2、本地存储sessionStorage
    3、离线缓存application cache
    4、Web SQL
    5、IndexedDB

    **`知道 css 有个 content 属性吗?有什么作用?有什么应用`**
    

    css 的 content 属性专门应用在 before/after 伪元素上,用来插入生成内容。
    最常 见的应用是利用伪类清除浮动。
    //一种常见利用伪类清除浮动的代码
    .clearfix:after { content:"."; //这里利用到了 content 属性 display:block; height:0; visibility:hidden; clear:both; }
    .clearfix { *zoom:1; } after
    伪元素通过 content 在元素的后面生成了内容为一个点的块级素,再利用 clear:both 清除浮动。

    **`知道 css 计数器(序列数字字符自动递增)吗?如何通过 css content 属性实现 css 计数器?`**
    

    https://www.cnblogs.com/liuxianan/p/css-counters.html
    初始化计数器:counter-reset:section;
    计数器递增:counter-increment:section;
    显示计数器:content:counter/counters

    **`zoom了解吗`**
    

    设置或检索对象的缩放比例
    zoom:normal 使用对象的实际尺寸| 用浮点数来定义缩放比例。不允许负值 | 用百分比来定义缩放比例。不允许负值

    **`javascript 的 typeof 返回哪些数据类型`**
    

    alert(typeof [1, 2]); //object
    alert(typeof ‘leipeng’); //string
    var i = true; alert(typeof i); //boolean
    alert(typeof 1); //number
    var a; alert(typeof a); //undefined
    function a(){;}; alert(typeof a) //function

    **`强制类型转换和隐式类型转换`**
    

    强制类型转换
    parseInt 取整,只保留整数部分,丢弃小数部分,字符串转数字
    parseFloat 会解析第一个.之前
    Number 转数字,只要里面有不是数字的就转不了
    toString 转字符串
    Boolean 转布尔值
    Symbol(es6)
    隐式类型转换
    == !!

    **`split() 、join() 的区别`**
    

    前者是切割成数组的形式,后者是将数组转换成字符串

    **`数组操作方法`**
    

    1、直接添加元素 arr[2]=8
    2、修改元素 arr[0]=666
    3、数组末尾添加元素 arr.push(9)
    会改变原始数组,返回值为数组更新后的新数组长度
    4、数组开头添加元素 arr.unshift(999)
    会改变原始数组,返回更新后新数组长度
    5、数组末尾删除元素 arr.pop()
    会改变原始数组,返回值为被删除的数组元素
    6、数组开头删除元素 arr.shift()
    会改变原始数组,返回被删除的数组元素
    7、倒序 arr.reverse()
    会改变原始数组,返回翻转后的数组
    8、拼接 arr.concat()
    不会改变原始数组,返回拼接后的新数组
    9、截取/拷贝 arr.slice(start,end)
    不会改变原始数组,返回截取的数组元素
    包含start元素,不包含end元素,end可以省略。省略表示拷贝从start位置到数组结束,原数组不变
    10、数组排序 arr.sort()
    Arr.sort(function(a,b){
    Return a-b;//升序
    })
    Arr.sort(function(a,b){
    Return b-a;//降序
    })
    11、splice 会改变原始数组,
    ①插入:返回空
    插入起始位置、0(要删除的项数)和要插入的项—arr.splice(1,0,666,888)
    ②替换:返回被替换掉的数组元素
    起始位置、要删除的项数和要插入的任意数量项—arr.splice(1,2,666,888)
    ③删除:返回被删除的数组元素
    删除(任意个数)—参数1:开始的索引;参数2:删除的长度—arr.splice(1,2)
    12、正序查找:indexOf(要检索的值,开始检索的位置[如果省略,则从第一个开始])
    13、倒序查找:lastIndexOf(要检索的值)
    正序查找和倒序查找的区别:
    ①当数组中要查询的数在数组中只出现一次的时候,二者返回的索引值是一样的
    ②到要查询的数在数组中出现两次及以上时,indexOf返回的是第一次出现的位置(从左往右)
    lastIndexOf返回的是最后一次在数组中出现的位置(从左往右)
    14、将数组转换成字符串:arr.join(“-”)
    15、将数组转换成字符串类型:arr.toString()
    16、筛选:filter
    不会改变原始数组,返回筛选后的新数组
    可以有3个参数,第一个为数组的每个元素,第二个索引,第三个为数组本身
    面试集锦_第2张图片

    17、forEach迭代器
    面试集锦_第3张图片
    18、map迭代器
    面试集锦_第4张图片

    19、every迭代器(有假即假)
    面试集锦_第5张图片
    true
    20、some迭代器(有真即真)
    面试集锦_第6张图片
    true

    **`简述一下内联事件模型,动态绑定事件模型(DOM0级事件)和DOM2级事件,优缺点和区别,以及解绑`**
    

    1、内联模型

    你可能感兴趣的:(面试集锦)