1. 什么是浮动,有哪些属性,怎么清除浮动?
浮动float常用属性是left、right、none,设置了浮动的元素会脱离文档流,会导致盒子塌陷。
清除浮动的方法:
- 给父级元素设置overflow:hidden
<div class="parent">
<div class="float-element">浮动元素</div>
</div>
<style>
.parent {
overflow: auto;
}
.float-element {
float: left;
}
</style>
- 给父级元素定义after伪类,设置clear: both
<div class="clearfix">
<div class="float-element">浮动元素</div>
</div>
<style>
.clearfix:after {
content: "";
display: table;
clear: both;
}
.float-element {
float: left;
}
</style>
2. 行内元素与块级元素
区别:
(1)行内元素不会以新行开始,而块级元素会新起一行。
(2)行内元素只能包含文本和其他行内元素;而块级元素可以包含行内元素和其他块级元素。
(3)行内元素与块级元素属性的不同,主要是盒模型属性上:行内元素设置 width 无效,height 无效 (可以设置 line-height),设置 margin 和 padding 的上下不会对其他元素产生影响。
3. 什么是重绘和重排?(浏览器绘制过程)
重绘: 当一个元素的外观发生改变,但没有改变布局,重新把元素外观绘制出来的过程,叫做重绘。
重排:当DOM的变化影响了元素的位置和尺寸大小,浏览器需要重新计算元素的几何属性,这个过程叫做重排。
常见引起重排属性和方法:
- 添加或者删除可见的 DOM 元素;
- 元素尺寸改变——边距、填充、边框、宽度和高度
- 内容变化,比如用户在 input 框中输入文字
- 设置 style 属性的值
为了避免重绘和重排,可以采用以下的最佳实践:
- 避免使用 table 布局,因为 table 布局的重排成本相对较高。
- 避免使用 CSS 表达式,因为 CSS 表达式会在每次计算时重新计算其值。
- 避免使用 JavaScript 代码修改 DOM 元素的几何结构,因为这会触发重排。
- 避免在循环中修改 DOM 元素的样式,因为这会触发重排和重绘。
重排必定会发生重绘,重绘不一定会引发重排。重排所需的成本比重绘高的多,改变父节点里的子节点很可能会导致父节点的一系列重排。
4. disabled 和 readonly 的区别?
- disabled 指当 input 元素加载时禁用此元素。input 内容不会随着表单提交。
- readonly 规定输入字段为只读。input 内容会随着表单提交。
无论设置 readonly 还是 disabled,通过 js 脚本都能更改 input 的 value。
5. HTML5 有哪些新特性?
- 绘画 canvas;
- 用于媒介回放的 video 和 audio 元素;
- 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;sessionStorage 的数据在浏览器关闭后自动删除;
- 语意化更好的内容元素,比如 article、footer、header、nav、section;
- 新的技术 webworker, websocket;