前端面试题整理—HTML/CSS篇
1、简述一下你对HTML语义化的理解
1)用正确的标签做正确的事情
2)html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析
3)即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的
4)搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO
5)使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解
2、Doctype作用?标准模式与兼容模式之间区别?
<!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html>标签之前,告知浏览器的解析器用什么文档标准解析这个文档
DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现
标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行
在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器以防止站点无法工作
3、什么是盒模型?你是怎么理解的
简单的说页面是由若干个盒模型(BOX)堆砌起来的,可以说每个HTML元素就是一个盒模型
盒模型由外到内包括边距(margin)、边框(border)、填充(padding)、内容(content)
盒子模型有两种分别是W3C标准模型和IE模型
不同之处:
标准模型宽高是指content,不包括padding和border
IE模型的宽高是指content+padding+border的总宽高
4、谈谈对BFC的理解
BFC:块格式化上下文(Block Formatting Context)
BFC 是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品
BFC的特性:
1)bfc 是一个独立的容器,容器内子元素不会影响容器外的元素
2)bfc的区域不会与float的元素区域重叠
3)计算bfc的高度时,浮动元素也参与计算
4)垂直方向上的距离由margin决定
5)内部的Box会在垂直方向上一个接一个的放置
以下条件会形成BFC:
1)浮动元素 float:left | right | inherit(none除外)
2)position:absolute 或 fixed 定位
3)display:inline-block | inline-flex | table-cell
4)overflow:hidden | auto | scroll (visible除外)
5、CSS选择符有哪些?哪些属性可以继承?
id选择器( # myid)
类选择器(.myclassname)
标签选择器(div, h1, p)
相邻选择器(h1 + p)
子选择器(ul > li)
后代选择器(li a)
通配符选择器( * )
属性选择器(a[rel = "external"])
伪类选择器(a:hover, li:nth-child)
可继承的样式: font-size font-family color, ul li dl dt dd
不可继承的样式:border padding margin width height
6、CSS优先级算法如何计算?
优先级就近原则,同权重情况下样式定义最近者为准
载入样式以最后载入的定位为准
优先级为: !important > id > class > tag important 比 内联优先级高
7、你理解的伪类与伪元素
伪类:用于向某些选择器添加特殊的效果。比如span:first-child{}
伪元素:用于将特殊的效果添加到某些选择器。比如span:before{}
伪类只要不是互斥可以叠加使用
伪元素在一个选择器中只能出现一次,并且只能出现在末尾
伪类与伪元素优先级分别与类、标签优先级相同
它们的本质区别:是否抽象创造了新元素
8、display有哪些值?box-sizing 常用的属性有哪些?说明他们的作用
block 像块类型元素一样显示。
none 缺省值。像行内元素类型一样显示。
inline-block 像行内元素一样显示,但其内容像块类型元素一样显示。
list-item 像块类型元素一样显示,并添加样式列表标记。
table 此元素会作为块级表格来显示
inherit 规定应该从父元素继承 display 属性的值
box-sizing: content-box; // 默认的标准(W3C)盒模型元素效果
box-sizing: border-box; // 触发怪异(IE)盒模型元素的效果
box-sizing: inherit; // 继承父元素 box-sizing 属性的值
9、什么是外边距重叠? 重叠的结果是什么?
外边距重叠就是 margin-collapse
相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距。 这种合并外边距的方式被称为折叠
折叠结果遵循下列计算规则:
1)两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值
2)两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值
3)两个外边距一正一负时,折叠结果是两者的相加的和
10、请列举几种隐藏元素的方法
1)display: none; 元素会变得不可见,并且不会再占用文档的空间
2)visibility: hidden; 只是简单的隐藏某个元素,但是元素占用的空间还存在
3)opacity: 0; 设置0可以使一个元素完全透明
4)position: absolute; 设置一个很大的 left 负值定位,使元素定位在可见区域之外
5)transform: scale(0); 将一个元素设置为缩放无限小,元素不可见 原来位置将被保留
11、你对line-height是如何理解的?
line-height 指一行字的高度,包含了字间距,实际上是下一行基线到上一行基线距离
一个容器没有设置高度,那么撑开容器高度的是 line-height 而不是容器内的文字内容
把 line-height 值设置为 height 一样大小的值可以实现单行文字的垂直居中
line-height和height都能撑开一个高度,height会触发 haslayout,而line-height不会
12、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
行内元素有:a b span img input select strong
块级元素有:div ul ol li dl dt dd h1-h6 p
常见的空元素: <br> <hr> <img> <input> <link> <meta>
13、position有哪些值,他们各自的区别
absolute:生成绝对定位的元素,相对于值不为 static的第一个父元素进行定位
relative:生成相对定位的元素,相对于其正常位置进行定位
fixed:生成绝对定位的元素,相对于浏览器窗口进行定位(固定定位)
static:默认值,无定位,元素出现在正常的流中(忽略top,bottom,left,right z-index)
14、HTML5有哪些新特性,新技术,如何区分HTML和HTML5?
语意化更好的内容元素。比如header、footer、nav、section、article
用于媒介回放的 video 和 audio 元素
绘画 canvas
拖放Drag
表单控件,calendar、date、time、email、url、search
存储功能localStorage和sessionStorage
localStorage 长期存储数据,浏览器关闭后数据不丢失
sessionStorage的数据在浏览器关闭后自动删除
新的技术webworker, websocket(通讯协议), Geolocation(地理定位)
区分HTML和HTML5:
DOCTYPE声明上不同
结构语义上不同
添加了新的功能媒体标记标签,如audio、video
15、SVG 与 Canvas两者间的区别
SVG 是一种使用 XML 描述 2D 图形的语言
Canvas 通过 JavaScript 来绘制 2D 图形
SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的,在SVG 中,每个被绘制的图形均被视为对象
如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形
Canvas 是逐像素进行渲染的
在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注
如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象
16、为什么要初始化CSS样式
因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的
如果没对CSS初始化往往会出现浏览器之间的页面显示差异
可以使用 reset.css 或 Normalize.css 做 CSS 初始化
17、rgba() 和 opacity 的透明效果有什么不同?
opacity 作用于元素以及元素内的所有内容(包括文字)的透明度
rgba() 只作用于元素自身的颜色或其背景色,子元素不会继承透明效果
18、请描述一下 cookies,sessionStorage 和 localStorage 的区别
cookie是网站为了标示用户身份而储存在用户本地终端上的数据(一般加密)
sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存
存储大小:
cookie数据大小不能超过4k
sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大
有效时间:
localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据
sessionStorage 数据在当前浏览器窗口关闭后自动删除
cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
19、浏览器是怎么对HTML5的离线储存资源进行管理和加载的?
1)在线的情况下,浏览器发现 html 标签有 manifest 属性,它会请求 manifest 文件
2)如果是第一次访问app,那么浏览器就会根据 manifest 文件的内容下载相应的资源并且进行离线存储
3)如果已经访问过app且资源已经离线存储了,浏览器会对比新的 manifest 文件与旧的 manifest 文件,如果文件没有发生改变,就不做任何操作。如果文件改变了,那么就会重新下载文件中的资源并进行离线存储
4)离线的情况下,浏览器就直接使用离线存储的资源
20、页面导入样式时,使用 link 和 @import 有什么区别?
link 属于HTML标签,除了加载CSS外,还能用于定 RSS等;@import 只能用于加载CSS
页面加载的时,link 会同时被加载,而 @import 引用的 CSS 会等到页面被加载完再加载
@import 只在 IE5 以上才能被识别,而 link 是HTML标签,无兼容问题
21、列举几种清除浮动的方法
1)给父级使用:after 伪元素
2)末尾处添加空div标签clear:both
3)父元素设置 overflow:hidden; (必须定义width或zoom:1)
4)父元素也设置浮动
5)结尾处加br标签clear:both
22、什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE?
响应式设计就是网站能够兼容多个终端(包括PC端,手机平板终端),而不是为每个终端做一个特定的版本
基本原理是利用CSS3媒体查询,为不同尺寸的设备适配不同样式
对于低版本的IE,可采用JS获取屏幕宽度,然后通过resize方法来实现兼容
23、水平居中、垂直居中的方法有哪些?
水平居中:
1)inline-block实现水平居中(text-align:center;)
2)margin和width实现水平居中
3)绝对定位实现水平居中
4)使用flex实现水平居中
5)使用栅格布局grid实现水平居中
垂直居中:
1)新增 inline-block 兄弟元素,设置 vertical-align
2)绝对定位配合 transform 位移
3)使用flex弹性盒子display:flex
4)未知高度的块级子元素,采用table-cell配合vertical-align
5)已知高度的块级子元素,采用绝对定位和负边距
6)通过css3的translate变形实现
24、你理解的flex弹性盒子布局
Flexbox用于不同尺寸屏幕中创建可自动扩展和收缩布局
任何一个容器都可以指定为Flex布局
使用弹性布局可以有效的分配一个容器的空间
即使我们的容器元素尺寸改变,它内部的元素也可以调整它的尺寸来适应空间
设置了flex布局后,子元素的float、clear和vertical-align属性就会失效
25、阐述px与em、rem的区别,以及你知道的其他css单位
px就是pixel像素的缩写,相对长度单位。常用于PC端的字体单位
em相对于当前父元素的font-size(并不是固定的)
rem相对于HTML根元素的font
其他css单位:
%百分比,一般来说就是相对于父元素
vw是相对视口(viewport)的宽度而定的,长度等于视口宽度的1/100
vh是相对视口(viewport)的高度而定的,长度等于视口高度的1/100
vm css3新单位,相对于视口的宽度或高度中较小的那个
26、实现左边固定宽度,右边自适应(不限于一种方法)
1)浮动布局(左侧固定宽度并且左浮动,右侧使用margin-left)
2)使用定位(左侧固定宽度并且绝对定位,右侧使用margin-left)
3)overflow(左侧固定宽并且左浮动,右侧加overflow:hidden)
4)flex布局(父级元素设置display:flex,左侧设置固定宽,右侧flex:1)
27、使用css实现一个持续的动画
.animat{ width:20px; height:20px; background:red; position:relative; animation:mymove 3s infinite; } @keyframes mymove{ from{left:0px;} to{left:200px;} }
28、css实现三角形
.triangle{ width:0; height:0; border-width:20px; border-style:solid; border-color:transparent transparent red transparent; }
29、移动端开发中有哪些常用的布局?
百分比流式布局
flex布局
媒体查询+rem布局
固定宽度做法
30、什么是圣杯布局和双飞翼布局,并说下实现原理
圣杯布局:
三列布局;中间主体内容前置,且宽度自适应;两边内容定宽
好处:重要的内容放在文档流前面可以优先渲染
原理:利用相对定位、浮动、负边距布局,而不添加额外标签
双飞翼布局:
双飞翼布局:对圣杯布局(使用相对定位对以后布局有局限性)的改进,消除相对定位
原理:主体元素上设置左右边距,预留两翼位置。左右两栏使用浮动和负边距归位,消除相对定位
31、align-content与align-items的区别?
align-content:center对单行是没有效果的
而align-items:center不管是对单行还是多行都有效果
我们日常开发中用的比较多的就是align-items
32、列举去除inline-block出现间距的几种方法
1)给父级font-size:0
2)使用margin负值
3)使用letter-spacing
4)使用word-spacing
5)移除空格
33、title与h1的区别、b与strong的区别、i与em的区别?
title属性没有明确意义只表示是个标题,H1则表示层次明确的标题,对页面信息的抓取有很大的影响
b是一个实体标签,展示强调内容。strong是标明重点内容,有语气加强的含义
i内容展示为斜体,em表示强调的文本
34、<script>、<script defer>、<script async>三者之间区别
没有defer或async属性,浏览器会立即加载并执行相应的脚本
有了async属性,表示后续文档的加载和渲染与js脚本的加载和执行是并行进行的,即异步执行
有了defer属性,加载后续文档的过程和js脚本的加载是并行进行的
(此时仅加载不执行)
defer和async在网络加载过程是一致的,都是异步执行
两者的区别在于脚本加载完成之后何时执行
如果存在多个有defer属性的脚本,那么它们是按照加载顺序执行脚本的
对于async,它的加载和执行是紧挨的,无论声明顺序如何,只要加载完成立刻执行
35、data-的用法,以及他的优势
data-代表自定义属性,可以在所有的 HTML 元素中嵌入数据
自定义的数据可以让页面拥有更好的交互体验
属性名不要包含大写字母,在 data- 后必须至少有一个字符
该属性可以是任何字符串
自定义属性前缀 "data-" 会被客户端忽略
36、如何实现浏览器内多个标签页之间的通信?
WebSocket、SharedWorker
也可以调用localstorge、cookies等本地存储方式
37、实现不使用border画出1px高的线
注:在不同浏览器的标准模式与怪异模式下都能保持一致的效果
<div style="height:1px;overflow:hidden;background:red"></div>
38、怎么让Chrome支持小于12px 的文字
.shrink{ -webkit-transform:scale(0.8); -o-transform:scale(1); display:inline-block; }
39、一个满屏 品 字布局 如何设计?
上面的div宽100%
下面的两个div分别宽50%
然后用float或者inline使其不换行即可
40、经常遇到的浏览器的兼容性有哪些?解决方法是什么?
1)PNG24位的图片在ie6浏览器上出现背景,解决方案是做成PNG8
2)浏览器默认的margin和padding不同。解决方案:*{margin:0;padding:0;}
3)Chrome中文界面下默认会将小于12px的文本强制按照12px显示,可通过加入CSS属性-webkit-text-size-adjust:none解决
4)IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义的属性
在FireFox下,只能使用getAttribute()获取自定义属性;解决方法:统一通过getAttribute()获取自定义属性
5)IE下,even对象有x,y属性,但是没有pageX,pageY属性
在Firefox下,even对象有pageX,pageY属性,但是没有x,y属性
解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数
41、less如何定义一个函数,比如圆角
//定义圆角 @radius .round(@radius:5px){ border-radius:@radius; -webkit-border-radius: @radius; -moz-border-radius: @radius; } .round7{ .round(7px); }
42、如何平移放大一个元素
transform:translateX(100px)
transform:scale(2)
43、CSS中动画实现的方式有几种
transition、keyframes(animation)
44、你知道的CSS预处理器,以及预处理器作用
less、sass、Stylus
作用:
帮助更好地组织CSS代码
提高代码复用率
提升可维护性
45、如何解决CSS模块化
less sass 等CSS预处理器
webpack处理CSS(css-loader+style-loader)
PostCSS插件(postCSS-import/precss等)
46、li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?
浏览器的默认行为会把inline元素间的空白字符渲染成一个空格,空格会占用一个字符的宽度
解决方案:给父级font-sieze设置为0。或者采用letter-spacing方式
47、描述一下你对渐进增强和优雅降级的理解
渐进增强:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验
.transition{ -webkit-transition: all .5s; -moz-transition: all .5s; -o-transition: all .5s; transition: all .5s; }
优雅降级:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容
.transition{ transition: all .5s; -o-transition: all .5s; -moz-transition: all .5s; -webkit-transition: all .5s; }
48、解释css sprites,如何使用
css精灵又称雪碧图
将多个小图片整个到一张大的背景图上,再利用repeat、position进行精准操作
雪碧图减轻了服务器的请求次数,提高了页面性能
49、针对移动浏览器端开发页面,不期望用户放大屏幕,且要求“视口(viewport)”宽度等于屏幕宽度,视口高度等于设备高度,如何设置?
<meta name = "viewport" content = "width=device-width,initial-scale = 1.0,maximum-scale = 1.0">
50、简述几个css hack
(1) 图片间隙
在div中插入图片,图片会将div下方撑大3px。hack1:将<div>与<img>写在同一行。hack2:给<img>添加display:block;
dt li 中的图片间隙。hack:给<img>添加display:block;
(2) 默认高度,IE6以下版本中,部分块元素,拥有默认高度(低于18px)
hack1:给元素添加:font-size:0;
hack2:声明:overflow:hidden;
表单行高不一致
hack1:给表单添加声明:float:left;height: ;border: 0;
鼠标指针
hack:若统一某一元素鼠标指针为手型:cursor:pointer;
当li内的a转化块元素时,给a设置float,IE里面会出现阶梯状
hack1:给a加display:inline-block;
hack2:给li加float:left;