• 前端面试题


    HTML问题

    HTML5语义化

    什么是语义化?就是用合理、正确的标签来展示内容,比如h1~h6定义标题。

    好处

    • 易于用户阅读,样式丢失的时候能让页面呈现清晰的结构。
    • 有利于SEO,搜索引擎根据标签来确定上下文和各个关键字的权重。
    • 方便其他设备解析,如盲人阅读器根据语义渲染网页
    • 有利于开发和维护,语义化更具可读性,代码更好维护,与CSS3关系更和谐。

    为什么最好把 CSS 的<link>标签放在<head></head>之间?为什么最好把 JS 的<script>标签恰好放在</body>之前,有例外情况吗?

    <link>放在<head>

    <link>标签放在<head></head>之间是规范要求的内容。此外,这种做法可以让页面逐步呈现,提高了用户体验。将样式表放在文档底部附近,会使许多浏览器(包括 Internet Explorer)不能逐步呈现页面。一些浏览器会阻止渲染,以避免在页面样式发生变化时,重新绘制页面中的元素。这种做法可以防止呈现给用户空白的页面或没有样式的内容。

    <script>标签恰好放在</body>之前

    脚本在下载和执行期间会阻止 HTML 解析。把<script>标签放在底部,保证 HTML 首先完成解析,将页面尽早呈现给用户。

    例外情况是当你的脚本里包含document.write()时。但是现在,document.write()不推荐使用。同时,将<script>标签放在底部,意味着浏览器不能开始下载脚本,直到整个文档(document)被解析。也许,对此比较好的做法是,<script>使用defer属性,放在<head>中。

    什么是渐进式渲染(progressive rendering)?

    渐进式渲染是用于提高网页性能(尤其是提高用户感知的加载速度),以尽快呈现页面的技术。

    在以前互联网带宽较小的时期,这种技术更为普遍。如今,移动终端的盛行,而移动网络往往不稳定,渐进式渲染在现代前端开发中仍然有用武之地。

    一些举例:

    • 图片懒加载——页面上的图片不会一次性全部加载。当用户滚动页面到图片部分时,JavaScript 将加载并显示图像。
    • 确定显示内容的优先级(分层次渲染)——为了尽快将页面呈现给用户,页面只包含基本的最少量的 CSS、脚本和内容,然后可以使用延迟加载脚本或监听DOMContentLoaded/load事件加载其他资源和内容。
    • 异步加载 HTML 片段——当页面通过后台渲染时,把 HTML 拆分,通过异步请求,分块发送给浏览器。更多相关细节可以在这里找到。

    viewport

    Viewport :字面意思为视图窗口,在移动web开发中使用。表示将设备浏览器宽度虚拟成一个特定的值(或计算得出),这样利于移动web站点跨设备显示效果基本一致。移动版的 Safari 浏览器最新引进了 viewport 这个 meta tag,让网页开发者来控制 viewport 的大小和缩放,其他手机浏览器也基本支持。

    在移动端浏览器当中,存在着两种视口,一种是可见视口(也就是我们说的设备大小),另一种是视窗视口(网页的宽度是多少)。 举个例子:如果我们的屏幕是320像素 * 480像素的大小(iPhone4),假设在浏览器中,320像素的屏幕宽度能够展示980像素宽度的内容。那么320像素的宽度就是可见视口的宽度,而能够显示的980像素的宽度就是视窗视口的宽度。

    为了显示更多的内容,大多数的浏览器会把自己的视窗视口扩大,简易的理解,就是让原本320像素的屏幕宽度能够容下980像素甚至更宽的内容(将网页等比例缩小)。

    Viewport属性值

    • width 设置layout viewport 的宽度,为一个正整数,或字符串"width-device"
    • initial-scale 设置页面的初始缩放值,为一个数字,可以带小数
    • minimum-scale 允许用户的最小缩放值,为一个数字,可以带小数
    • maximum-scale 允许用户的最大缩放值,为一个数字,可以带小数
    • height 设置layout viewport 的高度,这个属性对我们并不重要,很少使用
    • user-scalable 是否允许用户进行缩放,值为"no"或"yes", no 代表不允许,yes代表允许这些属性可以同时使用,也可以单独使用或混合使用,多个属性同时使用时用逗号隔开就行了。

    Reflow和Repaint

    Reflow

    当涉及到DOM节点的布局属性发生变化时,就会重新计算该属性,浏览器会重新描绘相应的元素,此过程叫Reflow(回流或重排)。

    Repaint

    当影响DOM元素可见性的属性发生变化 (如 color) 时, 浏览器会重新描绘相应的元素, 此过程称为Repaint(重绘)。因此重排必然会引起重绘。

    引起Repaint和Reflow的一些操作

    • 调整窗口大小
    • 字体大小
    • 样式表变动
    • 元素内容变化,尤其是输入控件
    • CSS伪类激活,在用户交互过程中发生
    • DOM操作,DOM元素增删、修改
    • width, clientWidth, scrollTop等布局宽高的计算

    Repaint和Reflow是不可避免的,只能说对性能的影响减到最小,给出下面几条建议:

    • 避免逐条更改样式。建议集中修改样式,例如操作className。
    • 避免频繁操作DOM。创建一个documentFragment或div,在它上面应用所有DOM操作,最后添加到文档里。设置display:none的元素上操作,最后显示出来。
    • 避免频繁读取元素几何属性(例如scrollTop)。绝对定位具有复杂动画的元素。
    • 绝对定位使它脱离文档流,避免引起父元素及后续元素大量的回流


    img中的alt和元素的title属性作用

    • img的alt属性
      如果无法显示图像,浏览器将显示alt指定的内容
    • 元素title属性
      在鼠标移到元素上时显示title的内容

    href和src区别

    • href 
      href标识超文本引用,用在link和a等元素上,href是引用和页面关联,是在当前元素和引用资源之间建立联系
      若在文档中添加href ,浏览器会识别该文档为 CSS 文件,就会并行下载资源并且不会停止对当前文档的处理。这也是为什么建议使用 link 方式加载 CSS,而不是使用 @import 方式。
    • src 
      src表示引用资源,替换当前元素,用在img,script,iframe上,src是页面内容不可缺少的一部分。
      当浏览器解析到src ,会暂停其他资源的下载和处理(图片不会暂停其他资源下载),直到将该资源加载、编译、执行完毕,类似于将所指向资源应用到当前内容。这也是为什么建议把 js 脚本放在底部而不是头部的原因。

    浏览器的渲染过程

    1. 解析HTML生成DOM树。
    2. 解析CSS生成CSSOM规则树。
    3. 将DOM树与CSSOM规则树合并在一起生成渲染树。
    4. 遍历渲染树开始布局,计算每个节点的位置大小信息。
    5. 将渲染树每个节点绘制到屏幕。

    为何会出现浏览器兼容问题

    • 同一产品,版本越老 bug 越多
    • 同一产品,版本越新,功能越多
    • 不同产品,不同标准,不同实现方式

    处理兼容问题的思路

    1. 要不要做
    2. 产品的角度(产品的受众、受众的浏览器比例、效果优先还是基本功能优先)
    3. 成本的角度 (有无必要做某件事)

    2.做到什么程度 * 让哪些浏览器支持哪些效果

    3..如何做 根据兼容需求选择技术框架/库(jquery) 根据兼容需求选择兼容工具(html5shiv.js、respond.js、css reset、normalize.css、Modernizr) * 条件注释、CSS Hack、js 能力检测做一些修补

    • 渐进增强(progressive enhancement): 针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验
    • 优雅降级 (graceful degradation): 一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

    doctype有什么用

    doctype是一种标准通用标记语言的文档类型声明,目的是告诉标准通用标记语言解析器要使用什么样的文档类型定义(DTD)来解析文档。

    声明是用来指示web浏览器关于页面使用哪个HTML版本进行编写的指令。 声明必须是HTML文档的第一行,位于html标签之前。

    浏览器本身分为两种模式,一种是标准模式,一种是怪异模式,浏览器通过doctype来区分这两种模式,doctype在html中的作用就是触发浏览器的标准模式,如果html中省略了doctype,浏览器就会进入到Quirks模式的怪异状态,在这种模式下,有些样式会和标准模式存在差异,而html标准和dom标准值规定了标准模式下的行为,没有对怪异模式做出规定,因此不同浏览器在怪异模式下的处理也是不同的,所以一定要在html开头使用doctype。

    行内元素和块级元素有哪些

    行内元素

    一个行内元素只占据它对应标签的边框所包含的空间
    一般情况下,行内元素只能包含数据和其他行内元素

    b, big, i, small, tt
    abbr, acronym, cite, code, dfn, em, kbd, strong, samp, var
    a, bdo, br, img, map, object, q, script, span, sub, sup
    button, input, label, select, textarea

    块级元素

    占据一整行,高度、行高、内边距和外边距都可以改变,可以容纳块级标签和其他行内标签

    header,form,ul,ol,table,article,div,hr,aside,figure,canvas,video,audio,footer

    iframe框架有那些优缺点

    优点:

    • iframe能够原封不动的把嵌入的网页展现出来。
    • 如果有多个网页引用iframe,那么你只需要修改iframe的内容,就可以实现调用的每一个页面内容的更改,方便快捷。
    • 网页如果为了统一风格,头部和版本都是一样的,就可以写成一个页面,用iframe来嵌套,可以增加代码的可重用。
    • 如果遇到加载缓慢的第三方内容如图标和广告,这些问题可以由iframe来解决。

    缺点:

    • 搜索引擎的爬虫程序无法解读这种页面
    • 框架结构中出现各种滚动条
    • 使用框架结构时,保证设置正确的导航链接。
    • iframe页面会增加服务器的http请求

    label标签有什么作用

    label 标签通常是写在表单内,它关联一个控件,使用 label 可以实现点击文字选取对应的控件。

    <input type="checkbox" id="test">
    <label for="test" >test</label>

    HTML5的form如何关闭自动完成功能

    将不想要自动完成的 form 或 input 设置为 autocomplete=off

    MDN

    DOM和BOM有什么区别

    • DOM

    Document Object Model,文档对象模型

    DOM 是为了操作文档出现的 API,document 是其的一个对象

    DOM和文档有关,这里的文档指的是网页,也就是html文档。DOM和浏览器无关,他关注的是网页本身的内容。

    • BOM

    Browser Object Model,浏览器对象模型

    BOM 是为了操作浏览器出现的 API,window 是其的一个对象

    window 对象既为 javascript 访问浏览器提供API,同时在 ECMAScript 中充当 Global 对象 

    CSS问题

    CSS 选择器的优先级是如何计算的?

    浏览器通过优先级规则,判断元素展示哪些样式。优先级通过 4 个维度指标确定,我们假定以a、b、c、d命名,分别代表以下含义:

    1. a表示是否使用内联样式(inline style)。如果使用,a为 1,否则为 0。
    2. b表示 ID 选择器的数量。
    3. c表示类选择器、属性选择器和伪类选择器数量之和。
    4. d表示标签(类型)选择器和伪元素选择器之和。

    优先级的结果并非通过以上四个值生成一个得分,而是每个值分开比较。a、b、c、d权重从左到右,依次减小。判断优先级时,从左到右,一一比较,直到比较出最大值,即可停止。所以,如果b的值不同,那么cd不管多大,都不会对结果产生影响。比如0,1,0,0的优先级高于0,0,10,10

    当出现优先级相等的情况时,最晚出现的样式规则会被采纳。如果你在样式表里写了相同的规则(无论是在该文件内部还是其它样式文件中),那么最后出现的(在文件底部的)样式优先级更高,因此会被采纳。

    在写样式时,我会使用较低的优先级,这样这些样式可以轻易地覆盖掉。尤其对写 UI 组件的时候更为重要,这样使用者就不需要通过非常复杂的优先级规则或使用!important的方式,去覆盖组件的样式了。

    参考

    重置(resetting)CSS 和 标准化(normalizing)CSS 的区别是什么?你会选择哪种方式,为什么?

    • 重置(Resetting): 重置意味着除去所有的浏览器默认样式。对于页面所有的元素,像marginpaddingfont-size这些样式全部置成一样。你将必须重新定义各种元素的样式。
    • 标准化(Normalizing): 标准化没有去掉所有的默认样式,而是保留了有用的一部分,同时还纠正了一些常见错误。

    当需要实现非常个性化的网页设计时,我会选择重置的方式,因为我要写很多自定义的样式以满足设计需求,这时候就不再需要标准化的默认样式了。

    参考

    请阐述Float定位的工作原理。

    浮动(float)是 CSS 定位属性。浮动元素从网页的正常流动中移出,但是保持了部分的流动性,会影响其他元素的定位(比如文字会围绕着浮动元素)。这一点与绝对定位不同,绝对定位的元素完全从文档流中脱离。

    CSS 的clear属性通过使用leftrightboth,让该元素向下移动(清除浮动)到浮动元素下面。

    如果父元素只包含浮动元素,那么该父元素的高度将塌缩为 0。我们可以通过清除(clear)从浮动元素后到父元素关闭前之间的浮动来修复这个问题。

    有一种 hack 的方法,是自定义一个.clearfix类,利用伪元素选择器::after清除浮动。另外还有一些方法,比如添加空的<div></div>和设置浮动元素父元素的overflow属性。与这些方法不同的是,clearfix方法,只需要给父元素添加一个类,定义如下:

    .clearfix::after {
      content: '';
      display: block;
      clear: both;
    }

    值得一提的是,把父元素属性设置为overflow: autooverflow: hidden,会使其内部的子元素形成块格式化上下文(Block Formatting Context),并且父元素会扩张自己,使其能够包围它的子元素。

    参考

    请阐述z-index属性,并说明如何形成层叠上下文(stacking context)。

    CSS 中的z-index属性控制重叠元素的垂直叠加顺序。z-index只能影响position值不是static的元素。

    没有定义z-index的值时,元素按照它们出现在 DOM 中的顺序堆叠(层级越低,出现位置越靠上)。非静态定位的元素(及其子元素)将始终覆盖静态定位(static)的元素,而不管 HTML 层次结构如何。

    层叠上下文是包含一组图层的元素。 在一组层叠上下文中,其子元素的z-index值是相对于该父元素而不是 document root 设置的。每个层叠上下文完全独立于它的兄弟元素。如果元素 B 位于元素 A 之上,则即使元素 A 的子元素 C 具有比元素 B 更高的z-index值,元素 C 也永远不会在元素 B 之上.

    每个层叠上下文是自包含的:当元素的内容发生层叠后,整个该元素将会在父层叠上下文中按顺序进行层叠。少数 CSS 属性会触发一个新的层叠上下文,例如opacity小于 1,filter不是nonetransform不是none

    参考

    请阐述块格式化上下文(Block Formatting Context)及其工作原理。

    块格式上下文(BFC)是 Web 页面的可视化 CSS 渲染的部分,是块级盒布局发生的区域,也是浮动元素与其他元素交互的区域。

    一个 HTML 盒(Box)满足以下任意一条,会创建块格式化上下文:

    • float的值不是none.
    • position的值不是staticrelative.
    • display的值是table-celltable-captioninline-blockflex、或inline-flex
    • overflow的值不是visible

    在 BFC 中,每个盒的左外边缘都与其包含的块的左边缘相接。

    两个相邻的块级盒在垂直方向上的边距会发生合并(collapse)。更多内容请参考边距合并(margin collapsing)

    参考

    有哪些清除浮动的技术,都适用哪些情况?

    • div方法:<div style="clear:both;"></div>
    • Clearfix 方法:上文使用.clearfix类已经提到。
    • overflow: autooverflow: hidden方法:上文已经提到。

    在大型项目中,我会使用 Clearfix 方法,在需要的地方使用.clearfix。设置overflow: hidden的方法可能使其子元素显示不完整,当子元素的高度大于父元素时。

    请解释什么是雪碧图(css sprites),以及如何实现?

    雪碧图是把多张图片整合到一张上的图片。它被运用在众多使用了很多小图标的网站上(Gmail 在使用)。实现方法:

    1. 使用生成器将多张图片打包成一张雪碧图,并为其生成合适的 CSS。
    2. 每张图片都有相应的 CSS 类,该类定义了background-imagebackground-positionbackground-size属性。
    3. 使用图片时,将相应的类添加到你的元素中。

    好处:

    • 减少加载多张图片的 HTTP 请求数(一张雪碧图只需要一个请求)。但是对于 HTTP2 而言,加载多张图片不再是问题。
    • 提前加载资源,防止在需要时才在开始下载引发的问题,比如只出现在:hover伪类中的图片,不会出现闪烁。

    参考

    如何解决不同浏览器的样式兼容性问题?

    • 在确定问题原因和有问题的浏览器后,使用单独的样式表,仅供出现问题的浏览器加载。这种方法需要使用服务器端渲染。
    • 使用已经处理好此类问题的库,比如 Bootstrap。
    • 使用 autoprefixer 自动生成 CSS 属性前缀。
    • 使用 Reset CSS 或 Normalize.css。

    如何为功能受限的浏览器提供页面? 使用什么样的技术和流程?

    • 优雅的降级:为现代浏览器构建应用,同时确保它在旧版浏览器中正常运行。
    • Progressive enhancement - The practice of building an application for a base level of user experience, but adding functional enhancements when a browser supports it.
    • 渐进式增强:构建基于用户体验的应用,但在浏览器支持时添加新增功能。
    • 利用 caniuse.com 检查特性支持。
    • 使用 autoprefixer 自动生成 CSS 属性前缀。
    • 使用 Modernizr进行特性检测。

    有什么不同的方式可以隐藏内容(使其仅适用于屏幕阅读器)?

    这些方法与可访问性(a11y)有关。

    • visibility: hidden:元素仍然在页面流中,并占用空间。
    • 0; height: 0:使元素不占用屏幕上的任何空间,导致不显示它。
    • position: absolute; left: -99999px: 将它置于屏幕之外。
    • text-indent: -9999px:这只适用于block元素中的文本。
    • Metadata: 例如通过使用 ,RDF 和 JSON-LD。
    • WAI-ARIA:如何增加网页可访问性的 W3C 技术规范。

    即使 WAI-ARIA 是理想的解决方案,我也会采用绝对定位方法,因为它具有最少的注意事项,适用于大多数元素,而且使用起来非常简单。

    参考

    除了screen,你还能说出一个 @media 属性的例子吗?

    • all
      适用于所有设备。
    • print
      为了加载合适的文档到当前使用的可视窗口. 需要提前咨询 paged media(媒体屏幕尺寸), 以满足个别设备网页尺寸不匹配等问题。
    • screen
      主要适用于彩色的电脑屏幕
    • speech
      解析speech这个合成器. 注意: CSS2已经有一个相似的媒体类型叫aural.

    编写高效的 CSS 应该注意什么?

    首先,浏览器从最右边的选择器,即关键选择器(key selector),向左依次匹配。根据关键选择器,浏览器从 DOM 中筛选出元素,然后向上遍历被选元素的父元素,判断是否匹配。选择器匹配语句链越短,浏览器的匹配速度越快。避免使用标签和通用选择器作为关键选择器,因为它们会匹配大量的元素,浏览器必须要进行大量的工作,去判断这些元素的父元素们是否匹配。

    BEM (Block Element Modifier) methodology recommends that everything has a single class, and, where you need hierarchy, that gets baked into the name of the class as well, this naturally makes the selector efficient and easy to override. BEM (Block Element Modifier)原则上建议为独立的 CSS 类命名,并且在需要层级关系时,将关系也体现在命名中,这自然会使选择器高效且易于覆盖。

    搞清楚哪些 CSS 属性会触发重新布局(reflow)、重绘(repaint)和合成(compositing)。在写样式时,避免触发重新布局的可能。

    参考

    使用 CSS 预处理的优缺点分别是什么?

    优点:

    • 提高 CSS 可维护性。
    • 易于编写嵌套选择器。
    • 引入变量,增添主题功能。可以在不同的项目中共享主题文件。
    • 通过混合(Mixins)生成重复的 CSS。
    • Splitting your code into multiple files. CSS files can be split up too but doing so will require a HTTP request to download each CSS file.
    • 将代码分割成多个文件。不进行预处理的 CSS,虽然也可以分割成多个文件,但需要建立多个 HTTP 请求加载这些文件。

    缺点:

    • 需要预处理工具。
    • 重新编译的时间可能会很慢。

    对于你使用过的 CSS 预处理,说说喜欢和不喜欢的地方?

    喜欢:

    • 绝大部分优点上题以及提过。
    • Less 用 JavaScript 实现,与 NodeJS 高度结合。

    Dislikes:

    • 我通过node-sass使用 Sass,它用 C ++ 编写的 LibSass 绑定。在 Node 版本切换时,我必须经常重新编译。
    • Less 中,变量名称以@作为前缀,容易与 CSS 关键字混淆,如@media@import@font-face

    如何实现一个使用非标准字体的网页设计?

    使用@font-face并为不同的font-weight定义font-family

    解释浏览器如何确定哪些元素与 CSS 选择器匹配。

    这部分与上面关于编写高效的 CSS 有关。浏览器从最右边的选择器(关键选择器)根据关键选择器,浏览器从 DOM 中筛选出元素,然后向上遍历被选元素的父元素,判断是否匹配。选择器匹配语句链越短,浏览器的匹配速度越快。

    例如,对于形如p span的选择器,浏览器首先找到所有<span>元素,并遍历它的父元素直到根元素以找到<p>元素。对于特定的<span>,只要找到一个<p>,就知道'`已经匹配并停止继续匹配。

    参考

    描述伪元素及其用途。

    CSS 伪元素是添加到选择器的关键字,去选择元素的特定部分。它们可以用于装饰(:first-line:first-letter)或将元素添加到标记中(与 content:...组合),而不必修改标记(:before:after)。

    • :first-line:first-letter可以用来修饰文字。
    • 上面提到的.clearfix方法中,使用clear: both来添加不占空间的元素。
    • 使用:beforeafter展示提示中的三角箭头。鼓励关注点分离,因为三角被视为样式的一部分,而不是真正的 DOM。如果不使用额外的 HTML 元素,只用 CSS 样式绘制三角形是不太可能的。

    参考

    说说你对盒模型的理解,以及如何告知浏览器使用不同的盒模型渲染布局。

    CSS 盒模型描述了以文档树中的元素而生成的矩形框,并根据排版模式进行布局。每个盒子都有一个内容区域(例如文本,图像等)以及周围可选的paddingbordermargin区域。

    CSS 盒模型负责计算:

    • 块级元素占用多少空间。
    • 边框是否重叠,边距是否合并。
    • 盒子的尺寸。

    盒模型有以下规则:

    • 块级元素的大小由widthheightpaddingbordermargin决定。
    • 如果没有指定height,则块级元素的高度等于其包含子元素的内容高度加上padding(除非有浮动元素,请参阅下文)。
    • 如果没有指定width,则非浮动块级元素的宽度等于其父元素的宽度减去父元素的padding
    • 元素的height是由内容的height来计算的。
    • 元素的width是由内容的width来计算的。
    • 默认情况下,paddingborder不是元素widthheight的组成部分。

    参考

    * { box-sizing: border-box; }会产生怎样的效果?

    • 元素默认应用了box-sizing: content-box,元素的宽高只会决定内容(content)的大小。
    • box-sizing: border-box改变计算元素widthheight的方式,borderpadding的大小也将计算在内。
    • 元素的height = 内容(content)的高度 + 垂直方向的padding + 垂直方向border的宽度
    • 元素的width = 内容(content)的宽度 + 水平方向的padding + 水平方向border的宽度

    display的属性值都有哪些?

    • noneblockinlineinline-blocktabletable-rowtable-celllist-item.

    inlineinline-block有什么区别?

    我把block也加入其中,为了获得更好的比较。

    | | block | inline-block | inline | | ------------------------------- | ----------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | | 大小 | 填充其父容器的宽度。 | 取决于内容。 | 取决于内容。 | | 定位 | 从新的一行开始,并且不允许旁边有 HTML 元素(除非是float) | 与其他内容一起流动,并允许旁边有其他元素。 | 与其他内容一起流动,并允许旁边有其他元素。 | | 能否设置widthheight | 能 | 能 | 不能。 设置会被忽略。 | | 可以使用vertical-align对齐 | 不可以 | 可以 | 可以 | | 边距(margin)和填充(padding) | 各个方向都存在 | 各个方向都存在 | 只有水平方向存在。垂直方向会被忽略。 尽管borderpaddingcontent周围,但垂直方向上的空间取决于'line-height' | | 浮动(float) | - | - | 就像一个block元素,可以设置垂直边距和填充。 |

    relativefixedabsolutestatic四种定位有什么区别?

    经过定位的元素,其position属性值必然是relativeabsolutefixedsticky

      • static:默认定位属性值。该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时 top, right, bottom, left 和 z-index 属性无效。
      • relative:该关键字下,元素先放置在未添加定位时的位置,再在不改变页面布局的前提下调整元素位置(因此会在此元素未添加定位时所在位置留下空白)。
      • absolute:不为元素预留空间,通过指定元素相对于最近的非 static 定位祖先元素的偏移,来确定元素位置。绝对定位的元素可以设置外边距(margins),且不会与其他边距合并。
      • fixed:不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时,元素会出现在的每页的固定位置。fixed 属性会创建新的层叠上下文。当元素祖先的 transform 属性非 none 时,容器由视口改为该祖先。
      • sticky:盒位置根据正常流计算(这称为正常流动中的位置),然后相对于该元素在流中的 flow root(BFC)和 containing block(最近的块级祖先元素)定位。在所有情况下(即便被定位元素为 table 时),该元素定位均不对后续元素造成影响。当元素 B 被粘性定位时,后续元素的位置仍按照 B 未定位时的位置来确定。position: sticky 对 table 元素的效果与 position: relative 相同。
  • 相关阅读:
    linux下配置redis
    前端之JavaScript:JS之DOM对象一
    前端之JavaScript:JavaScript对象
    css样式之补充
    css属性中常见的操作方法
    css属性操作
    css选择器
    html 表单操作
    前端基础之html
    1231211221211221
  • 原文地址:https://www.cnblogs.com/z8183/p/Interview.html
Copyright © 2020-2023  润新知