前端面试题总结之HTML与CSS (一)

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

  • IE: trident 内核
  • Firefox: gecko 内核
  • Safari: webkit 内核
  • Opera: 以前是presto 内核,Opera 现已改用Google Chrome 的Blink 内核
  • Chrome: Blink(基于webkit,Google 与Opera Software 共同开发)

每个HTML 文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗?

<!DOCTYPE> 声明位于文档中的最前面的位置,处于<html> 标签之前。此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范。(重点:告诉浏览器按照何种规范解析页面)

Quirks 模式是什么?它和Standards 模式有什么区别

怪异Quirks模式是什么,它和标准Standards模式有什么区别?

所谓的标准模式是指,浏览器按W3C标准解析执行代码;怪异模式则是使用浏览器自己的方式解析执行代码,因为不同浏览器解析执行的方式不一样,所以我们称之为怪异模式。浏览器解析时到底使用标准模式还是怪异模式,与你网页中的DTD声明直接相关,DTD声明定义了标准文档的类型(标准模式解析)文档类型,会使浏览器使用相应的方式加载网页并显示,忽略DTD声明,将使网页进入怪异模式(quirks mode)。
从IE6 开始,引入了Standards 模式,标准模式中,浏览器尝试给符合标准的文档在规范上的正确处理达到在指定浏览器中的程度
IE6 之前CSS 还不够成熟,所以IE5 等之前的浏览器对CSS 的支持很差, IE6 将对CSS提供更好的支持,然而这时的问题就来了,因为有很多页面是基于旧的布局方式写的,而如果IE6 支持CSS 则将令这些页面显示不正常,如何在即保证不破坏现有页面,又提供新的渲染机制呢?
在写程序时我们也会经常遇到这样的问题,如何保证原来的接口不变,又提供更强大的功能,尤其是新功能不兼容旧功能时。遇到这种问题时的一个常见做法是增加参数和分支,即当某个参数为真时,我们就使用新功能,而如果这个参数不为真时,就使用旧功能,这样就能不破坏原有的程序,又提供新功能。IE6 也是类似这样做的,它将 DTD 当成了这个“参数”,因为以前的页面大家都不会去写DTD,所以IE6 就假定如果写了DTD,就意味着这个页面将采用对CSS 支持更好的布局,而如果没有,则采用兼容之前的布局方式。这就是Quirks模式(怪癖模式,诡异模式,怪异模式)。
区别:
总体会有布局样式解析脚本执行三个方面的区别。
- 盒模型:在W3C 标准中,如果设置一个元素的宽度和高度,指的是元素内容的宽度和高度,而在Quirks 模式下,IE 的宽度和高度还包含了padding 和border。
- 设置行内元素的高宽:在Standards 模式下,给等行内元素设置wdith 和height 都不会生效,而在quirks 模式下,则会生效。
- 设置百分比的高度:在standards 模式下,一个元素的高度是由其包含的内容来决定的,如果父元素没有设置百分比的高度,子元素设置一个百分比的高度是无效的。
- 用margin:0 auto 设置水平居中:使用margin:0 auto 在standards 模式下可以使元素水平居中,但在quirks 模式下却会失效。
(还有很多,答出什么不重要,关键是看他答出的这些是不是自己经验遇到的,还是说都是看文章看的,甚至完全不知道。)

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

  • 改版的时候更方便只要改css 文件。
  • 页面加载速度更快、结构化清晰、页面显示简洁。
  • 表现与结构相分离。
  • 易于优化(seo)搜索引擎更友好,排名更容易靠前。

img 的alt 与title 有何异同? strong 与em 的异同?

  • alt(alt text):为不能显示图像、窗体或applets 的用户代理(UA),alt 属性用来指定替换文字。替换文字的语言由lang 属性指定。(在IE 浏览器下会在没有title 时把alt当成tool tip 显示)
  • title(tool tip):该属性为设置该属性的元素提供建议性的信息。
  • strong:粗体强调标签,强调,表示内容的重要性
  • em:斜体强调标签,更强烈强调,表示内容的强调点

你能描述一下渐进增强和优雅降级之间的不同吗?

  • 渐进增强progressive enhancement:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
  • 优雅降级graceful degradation:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
    区别:
    a. 优雅降级是从复杂的现状开始,并试图减少用户体验的供给
    b. 渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要
    c. 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带

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

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

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

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

请描述一下cookies,sessionStorage 和localStorage 的区别?

  • sessionStorage 用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage 不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage 用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

web storage 和cookie 的区别

Web Storage 的概念和cookie 相似,区别是它是为了更大容量存储设计的。Cookie 的大小是受限的,并且每次你请求一个新的页面的时候Cookie 都会被发送过去,这样无形中浪费了带宽,另外cookie 还需要指定作用域,不可以跨域调用。
除此之外,Web Storage 拥有setItem,getItem,removeItem,clear 等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。但是Cookie 也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP 规范的一部分而存在,而Web Storage 仅仅是为了在本地“存储”数据而生。

简述一下src 与href 的区别。

  • href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。
  • src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。

知道的网页制作会用到的图片格式有哪些?

png-8,png-24,jpeg,gif,svg。
但是上面的那些都不是面试官想要的最后答案。面试官希望听到是Webp。(是否有关注新技术,新鲜事物)科普一下Webp:WebP 格式,谷歌(google)开发的一种旨在加快图片加载速度的图片格式。
图片压缩体积大约只有JPEG 的2/3,并能节省大量的服务器带宽资源和数据空间。FacebookEbay 等知名网站已经开始测试并使用WebP 格式。在质量相同的情况下,WebP 格式图像的体积要比JPEG 格式图像小40%。

知道什么是微格式吗?谈谈理解。在前端构建中应该考虑微格式吗?

微格式(Microformats)是一种让机器可读的语义化XHTML 词汇的集合,是结构化数据的开放标准。是为特殊应用而制定的特殊格式。
优点:将智能数据添加到网页上,让网站内容在搜索引擎结果界面可以显示额外的提示。(应用范例:豆瓣,有兴趣自行google)

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

答案:dns 缓存,cdn 缓存,浏览器缓存,服务器缓存。

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

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

你如何理解HTML 结构的语义化?

简答:用正确的标签做正确的事情。
html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;
搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
深解:
作为一个前端开发人员,你要是没有听说过 CSS,那你肯定是一个 “out-man” 。随着 CSS 的深入人心,结构、表现与行为的逐渐分离,HTML 语义化成了炙手可热的卖点。
语义化的 HTML 首先要强调 HTML 结构一个网页就好像一幢房子,HTML 结构就是钢筋混泥土的墙,一幢房子如果没有钢筋混泥土的墙那就是一堆废砖头,也就称不上是房子了。CSS 是装饰材料,是油漆,是用来装饰房子的。CSS 如果没有 HTML 结构那也就什么都不是了,没有了实际使用价值。CSS 完全依靠引用它的 (X)HTML 文档。如果你想使 CSS 的能力发挥到极致,提供一个既干净又有结构的 HTML 是非常必要的。
其实HTML 中的标签都有他自身的含义,只是常常被忽视——就像表格一直充当着网页布局的角色。还好随着 CSS 的重现江湖,表格也终于回到他的本质工作——列表数据。它会告诉我们说:“这行是一个标题;这几行组成了一个段落;这些文字是项目列表……”在做前端开发的时候要记住:HTML 告诉我们一块内容是什么(或其意义),而不是它长的什么样子。

link与@import导入样式的区别

a、html页引用css的三种,一是页内的style标签,二是link外链,三是@import导入
b、link是xhtm标签,不只外链css,还可以是rss( Really Simple Syndication)服务,而@import只能是css
c、link外链的文件会与文档同步加载,而@import则是等待文档加载完成后才加载
d、link没有兼容性问题,而@import是css2.1规范中的,低版本浏览器不支持
e、link支持使用js控制DOM元素样式,而@import不可以

px、em、rem的区别

  • px
    a、IE无法调整那些使用px作为单位的字体大小
    b、国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位
    c、Firefox能够调整px和em、rem,但是96%以上的中国网民使用IE浏览器(或内核)
    px像素(Pixel)相对长度单位。像素px是相对于显示器屏幕分辨率而言的。
  • em
    em是相对长度单位,相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。
    任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合:1em=16px。那么12px=0.75em,10px=0.625em。为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使16px*62.5%=10px,这样12px=1.2em,10px=0.625em,也就是说只需要将你原来的px数值除以10,然后换上em作为单位就行了。
    Em特点:
    1)em的值不是固定的
    2)em会继承父级元素的字体大小
    所以我们在写css的时候,需要注意两点:
    a、body选择器中声明Font-size=62.5%
    b、将你的原来的px数值除以10,然后换上em作为单位
    c、重新计算那些被放大的字体的em数值,避免字体大小的重复声明
  • rem特点
    rem是CSS3新增的一个相对单位(root em,根em),相对于根元素(即html元素)font-size计算值的倍数,只相对于根元素的大小 .
    rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。
    作用:利用rem可以实现简单的响应式布局,可以利用html元素中字体的大小与屏幕间的比值设置font-size的值实现当屏幕分辨率变化时让元素也变化,以前的天猫tmall就使用这种办法.
    选择使用什么字体单位主要由你的项目来决定,如果你的用户请都使用最新版本浏览器,那么推荐使用rem。如果要考虑兼容性,那就使用px,或者两者同时使用。

em与rem的重要区别: 它们计算的规则一个是依赖父元素另一个是依赖根元素计算

谈谈你对CSS中刻度的认识?

在CSS中刻度是用于设置元素尺寸的单位。
a、特殊值0可以省略单位。例如:margin:0px可以写成margin:0
b、一些属性可能允许有负长度值,或者有一定的范围限制。如果不支持负长度值,那应该变换到能够被支持的最近的一个长度值。
c、长度单位包括:相对单位和绝对单位。
相对长度单位有: em, ex, ch, rem, vw, vh, vmax, vmin
绝对长度单位有: cm, mm, q, in, pt, pc, px
绝对长度单位:1in = 2.54cm = 25.4 mm = 72pt = 6pc = 96px
文本相对长度单位:em
相对长度单位是相对于当前对象内文本的字体尺寸,如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。(相对父元素的字体大小倍数)
body { font-size: 14px; }
h1 { font-size: 16px; }
.size1 p { font-size: 1em; }
.size2 p { font-size: 2em; }
.size3 p { font-size: 3em; }
文本相对长度单位:rem
rem是CSS3新增的一个相对单位(root em,根em),相对于根元素(即html元素)font-size计算值的倍数
只相对于根元素的大小
浏览器的默认字体大小为16像素,浏览器默认样式也称为user agent stylesheet,就是所有浏览器内置的默认样式,多数是可以被修改的,但chrome不能直接修改,可以被用户样式覆盖。

xhtml和html有什么区别? Doctype是什么意思?

  1. xhtml和html有什么区别?
    HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言
    最主要的不同:
    • XHTML 元素必须被正确地嵌套。
    • XHTML 元素必须被关闭。
    • 标签名必须用小写字母。
    • XHTML 文档必须拥有根元素。
  2. Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?
    用于声明文档使用那种规范(html/Xhtml)一般为 严格 过度 基于框架的html文档加入XMl声明可触发,解析方式更改为IE5.5 拥有IE5.5的bug。

IE6 BUG的解决方法有哪些

(1)双边距BUG float引起的 使用display:inline;
Web前端面试题:IE6 BUG的解决方法有哪些?
(2)3像素问题 使用float引起的 使用dislpay:inline -3px 或者 margin-right:-3px
(3)超链接hover 点击后失效 使用正确的书写顺序 link visited hover active;
(4)Ie z-index问题 给父级添加position:relative;
(5)Png 透明 使用js代码改;
(6)Min-height 最小高度 !Important 解决’;
(7)select 在ie6下遮盖 使用iframe嵌套;
(8)为什么没有办法定义1px左右的宽度容器(IE6默认的行高造成的,使用over:hidden,zoom:0.08 line-height:1px);

为什么HTML5里面我们不需要DTD(Document Type Definition文档类型定义)?

HTML5没有使用SGML或者XHTML,他是一个全新的东西,因此你不需要参考DTD,对于HTML5,你仅需放置下面的文档类型代码告诉浏览器识别这是HTML5文档。

SGML和HTML,XML和HTML之间有什么关系?

SGML(标准通用标记语言)是一个标准,告诉我们怎么去指定文档标记。他是只描述文档标记应该是怎么样的元语言,HTML是被用SGML描述的标记语言。因此利用SGML创建了HTML参照和必须共同遵守的DTD,你会经常在HTML页面的头部发现“DOCTYPE”属性,用来定义用于解析目标DTD。现在解析SGML是一件痛苦的事情,所以创建了XML使事情更好。XML使用了SGML,例如:在SGML中你必须使用起始和结束标签,但是在XML你可以有自动关闭的结束标签。
XHTML创建于XML,他被使用在HTML4.0中。你可以参考下面代码片段中展示的XML DTD:

总之,SGML是所有类型的父类,较旧的HTML利用SGML,HTML4.0使用派生自XML的XHTML。

谈谈你对Web标准的理解,以及对w3c组织的认识?

(1) Web标准规范要求,书写标签必须闭合、标签小写、不乱嵌套,可提高搜索机器人对网页内容的搜索几率。
(2) 建议使用外链css和js脚本,从而达到结构与行为、结构与表现的分离,提高页面的渲染速度,能更快地显示页面的内容。
(3) 样式与标签的分离,更合理的语义化标签,使内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件, 从而降低维护成本、改版更方便
(4) 不需要变动页面内容,便可提供打印版本而不需要复制内容,提高网站易用性

  • 遵循w3c制定的Web标准,能够使用户浏览者更方便的阅读,使网页开发者之间更好的交流。

**标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外 链css和 js 脚本、结构行为表现的分离、
文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件,
容易维 护、改版方便,不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性。**

doctype的作用,严格与混杂模式的区别,有何意义

1)语法格式:
2)不是Html标签,而是告知浏览器此页面使用哪个HTML版本进行编写的指令
3)html 4.01中有如下三种模式:
a、html 4.01 Strict 严格模式,不包含展示性(纯粹为页面展示服务的标签,如:b、font等,因为这些在css中有相应的替代方案)和弃用的元素,如:font,不允许框架集(framesets);
b、html 4.01 Transitional 过滤模式,包含展示性和弃用元素,但不包含框架集(framesets);
c、html 4.01 Frameset 宽松模式,包含展示性与弃用元素,也包含构架集(framesets);
4)xhtml 中有如下四种模式
a、xhtml 1.0 Strict 严格模式,不包含展示性与弃用的标签,不允许框架集(framesets),且严格以xml格式来编写标记;

b、xhtml 1.0 Transitional 过滤模式,包含展示性与弃用标签,不允许框架集(framesets),且严格以xml格式来编写标记;
c、xhtml 1.0 Frameset 宽松模式,包含展示性与弃用标签,允许框架集(framesets),且严格以xml格式来编写标记;
d、xhtml 1.1,等同于xhtml 1.0 strict,但允许添加模型。
5)标准模式与混杂的的区别
a、这两种模式主要是浏览器厂商提炼出来的,标准模式时浏览器会根据规范来呈现页面,而混杂模式时浏览器则以向后兼容的方式呈现;
b、Mozilla和Safari则用了“几乎标准模式”,就是在处理表格的方式上有一此细微的差异;
c、最大问题就是IE的盒子渲染机制,出现border-box(怪异模式)、content-box方式;
6)如何触发混杂模式
a、html 4.01文档,如果包含transitional(过滤)DTD但没有URI则以混杂模式渲染;
b、如果xhtml、html不存在标签,则以混杂模式渲染

行内元素与块级元素有什么不同?

尺寸-块级元素和行内元素之间的一个重要的不同点
- 行内元素和width
W3C CSS2 标准规定行内元素、非置换元素不会应用width属性。
- 行内元素和height
W3C CSS2 标准规定行内元素、非置换元素不会应用height属性,但是盒子高度可以通过line-height来指定。
- 行内元素和padding
你可以给行内元素设置padding,但只有padding-left和padding-right生效。
- 行内元素和marging
margin属性也是和padding属性一样,对行内元素左右有效,上下无效。
记住对行内元素
- 设置宽度width 无效。
- 设置高度height 无效,可以通过line-height来设置。
- 设置margin 只有左右margin有效,上下无效。
- 设置padding 只有左右padding有效,上下则无效。

block,inline和inlinke-block细节对比?

• display:block
a、block元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父元素宽度。
b、block元素可以设置width,height属性。块级元素即使设置了宽度,仍然是独占一行。
c、block元素可以设置margin和padding属性。
• display:inline
a、inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。
b、inline元素设置width,height属性无效。
c、inline元素的margin和padding属性,水平方向的padding-left, padding-right, margin-left, margin-right都产生边距效果;但竖直方向的padding-top, padding-bottom, margin-top, margin-bottom不会产生边距效果。
• display:inline-block
a、简单来说就是将对象呈现为inline对象,但是对象的内容作为block对象呈现。之后的内联对象会被排列在同一行内。比如我们可以给一个link(a元素)inline-block属性值,使其既具有block的宽度高度特性又具有inline的同行特性。
补充说明
a、一般我们会用display:block,display:inline或者display:inline-block来调整元素的布局级别,其实display的参数远远不止这三种,仅仅是比较常用而已。
b、IE(低版本IE)本来是不支持inline-block的,所以在IE中对内联元素使用display:inline-block,理论上IE是不识别的,但使用display:inline-block在IE下会触发layout,从而使内联元素拥有了display:inline-block属性的表象。

列出display的值并说明他们的作用?

display: none | inline | block | list-item | inline-block | table | inline-table | table-caption | table-cell | table-row | table-row-group | table-column | table-column-group | table-footer-group | table-header-group | run-in | box | inline-box | flexbox | inline-flexbox | flex | inline-flex
默认值:inline
none: 隐藏对象。与visibility属性的hidden值不同,其不为被隐藏的对象保留其物理空间
inline: 指定对象为内联元素。
block: 指定对象为块元素。
list-item: 指定对象为列表项目。
inline-block: 指定对象为内联块元素。(CSS2)
table: 指定对象作为块元素级的表格。类同于html标签

(CSS2)
inline-table: 指定对象作为内联元素级的表格。类同于html标签
(CSS2)
table-caption: 指定对象作为表格标题。类同于html标签(CSS2)
table-row-group: 指定对象作为表格行组。类同于html标签(CSS2)
table-column: 指定对象作为表格列。类同于html标签(CSS2)
table-column-group: 指定对象作为表格列组显示。类同于html标签(CSS2)
table-header-group: 指定对象作为表格标题组。类同于html标签(CSS2)
table-footer-group: 指定对象作为表格脚注组。类同于html标签(CSS2)
run-in: 根据上下文决定对象是内联对象还是块级对象。(CSS3)
box: 将对象作为弹性伸缩盒显示。(伸缩盒最老版本)(CSS3)
inline-box: 将对象作为内联块级弹性伸缩盒显示。(伸缩盒最老版本)(CSS3)
flexbox: 将对象作为弹性伸缩盒显示。(伸缩盒过渡版本)(CSS3)
inline-flexbox: 将对象作为内联块级弹性伸缩盒显示。(伸缩盒过渡版本)(CSS3)
flex: 将对象作为弹性伸缩盒显示。(伸缩盒最新版本)(CSS3)
(CSS2)
table-cell: 指定对象作为表格单元格。类同于html标签
(CSS2)
table-row: 指定对象作为表格行。类同于html标签

CSS+DIV开发Web页面的优势有哪些?

1)CSS+DIV,这个网页设计模式中,DIV承担了网页的内容,CSS承担了网页的样式。这样就使网页的内容和样式的分离开来。有利于页面的维护升级。
2)有助于提高搜索引擎亲和力(快速找到需要的数据,而不是像在TABLE中一层层的查找)
3)有助于页面的重构(换皮肤如blog,直接套用另外一套样式就可以实现,而不用改动网页脚本。)

谈谈你对BFC与IFC的理解?(是什么,如何产生,作用)

(1)、什么是BFC与IFC
a、BFC(Block Formatting Context)即“块级格式化上下文”, IFC(Inline Formatting Context)即行内格式化上下文。常规流(也称标准流、普通流)是一个文档在被显示时最常见的布局形态。一个框在常规流中必须属于一个格式化上下文,你可以把BFC想象成一个大箱子,箱子外边的元素将不与箱子内的元素产生作用。
b、BFC是W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。当涉及到可视化布局的时候,Block Formatting Context提供了一个环境,HTML元素在这个环境中按照一定规则进行布局。一个环境中的元素不会影响到其它环境中的布局。比如浮动元素会形成BFC,浮动元素内部子元素的主要受该浮动元素影响,两个浮动元素之间是互不影响的。也可以说BFC就是一个作用范围。
c、在普通流中的 Box(框) 属于一种 formatting context(格式化上下文) ,类型可以是 block ,或者是 inline ,但不能同时属于这两者。并且, Block boxes(块框) 在 block formatting context(块格式化上下文) 里格式化, Inline boxes(块内框) 则在 Inline Formatting Context(行内格式化上下文) 里格式化。
(2)、如何产生BFC
当一个HTML元素满足下面条件的任何一点,都可以产生Block Formatting Context:
a、float的值不为none
b、overflow的值不为visible
c、display的值为table-cell, table-caption, inline-block中的任何一个
d、position的值不为relative和static
CSS3触发BFC方式则可以简单描述为:在元素定位非static,relative的情况下触发,float也是一种定位方式。
(3)、BFC的作用与特点
不和浮动元素重叠,清除外部浮动,阻止浮动元素覆盖
如果一个浮动元素后面跟着一个非浮动的元素,那么就会产生一个重叠的现象。常规流(也称标准流、普通流)是一个文档在被显示时最常见的布局形态,当float不为none时,position为absolute、fixed时元素将脱离标准流。

69、说说你对页面中使用定位(position)的理解?

使用css布局position非常重要,语法如下:
position:static | relative | absolute | fixed | center | page | sticky
默认值:static,center、page、sticky是CSS3中新增加的值。
(1)、static
可以认为静态的,默认元素都是静态的定位,对象遵循常规流。此时4个定位偏移属性不会被应用,也就是使用left,right,bottom,top将不会生效。
(2)、relative
相对定位,对象遵循常规流,并且参照自身在常规流中的位置通过top,right,bottom,left这4个定位偏移属性进行偏移时不会影响常规流中的任何元素。
(3)、absolute
a、绝对定位,对象脱离常规流,此时偏移属性参照的是离自身最近的定位祖先元素,如果没有定位的祖先元素,则一直回溯到body元素。盒子的偏移位置不影响常规流中的任何元素,其margin不与其他任何margin折叠。
b、元素定位参考的是离自身最近的定位祖先元素,要满足两个条件,第一个是自己的祖先元素,可以是父元素也可以是父元素的父元素,一直找,如果没有则选择body为对照对象。第二个条件是要求祖先元素必须定位,通俗说就是position的属性值为非static都行。
(4)、fixed
固定定位,与absolute一致,但偏移定位是以窗口为参考。当出现滚动条时,对象不会随着滚动。
(5)、center
与absolute一致,但偏移定位是以定位祖先元素的中心点为参考。盒子在其包含容器垂直水平居中。(CSS3)
(6)、page
与absolute一致。元素在分页媒体或者区域块内,元素的包含块始终是初始包含块,否则取决于每个absolute模式。(CSS3)
(7)、sticky
对象在常态时遵循常规流。它就像是relative和fixed的合体,当在屏幕中时按常规流排版,当卷动到屏幕外时则表现如fixed。该属性的表现是现实中你见到的吸附效果。(CSS3)

如何解决多个元素重叠问题?

使用z-index属性可以设置元素的层叠顺序
z-index属性
语法:z-index: auto |
默认值:auto
适用于:定位元素。即定义了position为非static的元素
取值:
auto: 元素在当前层叠上下文中的层叠级别是0。元素不会创建新的局部层叠上下文,除非它是根元素。
整数: 用整数值来定义堆叠级别。可以为负值。 说明:
检索或设置对象的层叠顺序。
z-index用于确定元素在当前层叠上下文中的层叠级别,并确定该元素是否创建新的局部层叠上下文。
当多个元素层叠在一起时,数字大者将显示在上面。

为什么重置浏览器默认样式,如何重置默浏览器认样式?

每种浏览器都有一套默认的样式表,即user agent stylesheet,网页在没有指定的样式时,按浏览器内置的样式表来渲染。这是合理的,像word中也有一些预留样式,可以让我们的排版更美观整齐。不同浏览器甚至同一浏览器不同版本的默认样式是不同的。但这样会有很多兼容问题。
a、最简单的办法:(不推荐使用)*{margin: 0;padding: 0;}。
b、使用CSSReset可以将所有浏览器默认样式设置成一样。
c、normalize:也许有些cssreset过于简单粗暴,有点伤及无辜,normalize是另一个选择。bootstrap已经引用该css来重置浏览器默认样式,比普通的cssreset要精细一些,保留浏览器有用的默认样式,支持包括手机浏览器在内的超多浏览器,同时对HTML5元素、排版、列表、嵌入的内容、表单和表格都进行了一般化。
天猫 使用的css reset重置浏览器默认样式:
@charset “gb2312”;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 “microsoft yahei”;line-height: 1.5;-ms-overflow-style: scrollbar}h1, h2, h3, h4, h5, h6 {font-size: 100%}ul, ol {list-style: none}a {text-decoration: none;cursor:pointer}a:hover {text-decoration: underline}img {border: 0}button, input, select, textarea {font-size: 100%}table {border-collapse: collapse;border-spacing: 0}.clear {clear:both}.fr {float:right}.fl {float:left}.block {display:block;text-indent:-999em}

为什么要初始化CSS样式?

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。
当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。
最简单的初始化方法就是: {padding: 0; margin: 0;} (不建议)

说说你对边距折叠的理解?

外边距折叠: 相邻的两个或多个外边距 (margin) 在垂直方向会合并成一个外边距(margin)
相邻: 没有被非空内容、padding、border 或 clear 分隔开的margin特性. 非空内容就是说这元素之间要么是兄弟关系或者父子关系
垂直方向外边距合并计算:
a、参加折叠的margin都是正值:取其中 margin 较大的值为最终 margin 值。
b、参与折叠的 margin 都是负值:取的是其中绝对值较大的,然后,从 0 位置,负向位移。
c、参与折叠的 margin 中有正值,有负值:先取出负 margin 中绝对值中最大的,然后,和正 margin 值中最大的 margin 相加。

请你说说box-sizing属性的的用法?

设置或检索对象的盒模型组成模式
a、box-sizing:content-box: padding和border不被包含在定义的width和height之内。对象的实际宽度等于设置的width值和border、padding之和,即 ( Element width = width + border + padding,但占有页面位置还要加上margin ) 此属性表现为标准模式下的盒模型。
b、box-sizing:border-box: padding和border被包含在定义的width和height之内。对象的实际宽度就等于设置的width值,即使定义有border和padding也不会改变对象的实际宽度,即 ( Element width = width ) 此属性表现为怪异模式下的盒模型。

解释下浮动和它的工作原理?清除浮动的技巧?

问题:
(1)父元素的高度无法被撑开,影响与父元素同级的元素
(2)与浮动元素同级的非浮动元素会跟随其后
(3)若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构
解决方法:
使用CSS中的clear:both;属性来清除元素的浮动可解决问题(2)、(3),对于问题(1),添加如下样式,给父元素添加clearfix样式:
.clearfix:after{content: “.”;display: block;height: 0;clear: both;visibility: hidden;}
.clearfix{display: inline-block;} /* for IE/Mac */
清除浮动的几种方法:
(1)、父级div定义 height
原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。
优点:简单、代码少、容易掌握
缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题
建议:不推荐使用,只建议高度固定的布局时使用
(2)、结尾处加空div标签 clear:both
原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度
优点:简单、代码少、浏览器支持好、不容易出现怪问题
缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不好
建议:不推荐使用,但此方法是以前主要使用的一种清除浮动方法
(3)、父级div定义 伪类:after 和 zoom
原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE转有属性)可解决ie6,ie7浮动问题
优点:浏览器支持好、不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)
缺点:代码多、不少初学者不理解原理,要两句代码结合使用才能让主流浏览器都支持。
建议:推荐使用,建议定义公共类,以减少CSS代码。
(4)、父级div定义 overflow:hidden
原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度
优点:简单、代码少、浏览器支持好
缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。
建议:只推荐没有使用position或对overflow:hidden理解比较深的朋友使用。
(5)、父级div定义 overflow:auto
原理:必须定义width或zoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度
优点:简单、代码少、浏览器支持好
缺点:内部宽高超过父级div时,会出现滚动条。
建议:不推荐使用,如果你需要出现滚动条或者确保你的代码不会出现滚动条就使用吧。

你有哪些性能优化的方法?

回答一:
(1)、减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。
(2)、前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数
(3)、用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。
(4)、当需要设置的样式很多时设置className而不是直接操作style。
(5)、少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
(6)、避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。
(7)、图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。
回答二:
(1)、减少HTTP请求次数
(2)、使用CDN
(3)、避免空的src和href
(4)、为文件头指定Expires
(5)、使用gzip压缩内容
(6)、把CSS放到顶部
(7)、把JS放到底部
(8)、避 免使用CSS表达式
(9)、将CSS和JS放到外部文件中
(10)、避免跳转
(11)、可缓存的AJAX
(12)、使用GET来完成AJAX请求

请你说说CSS有什么特殊性?(优先级、计算特殊值)

优先级
(1)、同类型,同级别的样式后者先于前者
(2))、ID > 类样式 > 标签 > *
(3)、内联>ID选择器>伪类>属性选择器>类选择器>标签选择器>通用选择器(*)>继承的样式

(4)、具体 > 泛化的,特殊性即css优先级
(5)、近的 > 远的 (内嵌样式 > 内部样式表 > 外联样式表)
  内嵌样式:内嵌在元素中,span
  内部样式表:在页面中的样式,写在中的样式
外联样式表:单独存在一个css文件中,通过link引入或import导入的样式
(6)、!important 权重最高,比 inline style 还要高
计算特殊性值
important > 内嵌 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 继承 > 通配符

猜你喜欢

转载自blog.csdn.net/mangxi8200/article/details/81148844