前端常见面试知识复习 - HTML/CSS

165 阅读13分钟

前端常见面试知识复习 - HTML/CSS

HTML

1. 说下对语义化的理解

简述:简单来说就是使用合适的标签做合适的事情,比如:使用作为页眉,做页脚,

用于写段落,用于标题。

优点
  1. 结构清晰,便于人员维护。
  2. 便于浏览器解析,有利于SEO。
常见

header、footer、main、nav、section、aside、p、h、a、img等

2. html文件中的DOCTYPE是什么

简述:DOCTYPE即是文档对象声明,DOCTYPE表示在浏览器中使用标准模式解析页面,确保HTML或XHTML可以在不同的浏览器中使用相同的方式解析页面,如果不添加DOCTYPE则会触发怪异模式

  1. 标准模式:默认模式,按照w3c标准渲染页面。
  2. 怪异模式:浏览器自己的模式,浏览器模式不一样,渲染的结构也不同。

3. 行级元素和块级元素

块级元素:
  1. 默认每个块级元素自上而下独占一行,宽度占满整行
  2. 可以设置宽高、内边距、外边距。
  3. 可以在块级元素中放置行元素和块元素。

常见:div、p、h、li、ul、table等

行内元素:
  1. 默认每个行内元素并列排列。
  2. 可以设置高、内边距、外边距,不可以设置宽度,宽度根据内容而定
  3. 不可以放置块级元素,可以放置其他行内元素。

常见:span、img、a、input等

行内元素注意:
  1. 行内元素的高不是通过height设置,而是通过line-height设置
  2. 行内元素无论内边距还是外边距都是只可以设置左右,不可以设置上下

4. 标签属性href与src的区别

类型不同
  • href:超文本引用,用于建立文档与资源的引用,多用于a、link等标签。
  • src:将资源下载到文档中,多用于script、img等标签。
作用不同
  • href:文档与资源建立联系。
  • src:将资源下载到文档中代替内容。
解析方式不同
  • href:将资源当成css文档,使用并行解析,不阻塞后面内容执行
  • src:会阻塞后面的内容执行,因此js文件多放到最后执行。

5. @import与link的区别

  1. 本质上@import是属于css规则,link是属于html标签。
  2. 在加载上link会和页面并行加载,而@import是加载完页面后再加载@import导入的css文件
  3. 在兼容性上,@import是在css2.1新增的,所以有些老浏览器不支持,link是标签不存在以上问题。
  4. link是属于标签因此可以使用dom操作进行操作,但是@import不可以。

6. a标签除了做导航,还有什么作用

a标签最常用的是做锚点和文件下载。不过a标签中的href属性可以支持浏览器任何协议,因此还可以使用a标签进行打电话 href="tel:110" 以及发短信 href="sms:110"

7. HTML和XHTML的区别

简述:HTML是超文本标记语言,XHTML是可扩展超文本标记语言,在写法上XHTML会更加严格。

  1. HTML对大小写不敏感,XHTML区分大小写都应使用小写。
  2. XHTML的标签需要有闭合标签,空元素也不例外,HTML不强制要求。
  3. XHTML所有属性必须带引号,所有属性必须有值,必须小写,HTML的可以简写。
  4. XHTML的元素必须正确的嵌套,HTML中不正确浏览器也会解析。

CSS

1. px、em、rem的区别

  • px:px是像素,是根据显示器的像素决定,使用了px单位后元素大小不会跟随浏览器大小改变而改变,不适合用在响应式布局中。
  • em:em单位不是固定的,根据父元素的字体大小元素改变而改变,适用于响应式布局。
  • rem:rem单位也不是固定的,是根据根节点标签的字体大小元素改变而改变,也就是< html >标签,适用于响应式布局。
注意
  • em单位如果父元素都没有设置字体大小,那么将会继承根节点的字体大小。
  • em单位的参照物(父元素)可能会比较多,计算会照成混乱;rem的参照物只有根节点元素,因此计算会更清晰。

2. vw和vh单位

vw和vh单位是css3新增的单位,想了解这两个单位需要先了解下可视化窗口-视口。

视口

pc:在pc端指的是浏览器可视区域。 移动端:简单理解就是屏幕的区域。

定义

相对于视口的宽度和高度,视口为100vw、100vh,xvwxvh就是相对于视口的x%宽高

3. BFC的理解

简述:BFC为“块级格式化上下文”,会创建一个私有的区域,区域内的元素和区域外的元素互不影响。

触发方式
  • 浮动:float属性除“none”外其他值
  • 绝对定位:position中的“absolute”和“fixed”。
  • display:“inline-block”、“table-cell”、“flow-root”、table-caption。
  • overflow:除“visible”外其他值。
特点
  1. 在BFC中的块级元素默认垂直向下排列。
  2. 在BFC中相邻块级元素的margin会重叠,取最大的margin距离。
  3. 在BFC中计算高度会将浮动元素计算在内。
  4. 在BFC中的元素与BFC外的元素互不影响。
作用
  1. 生成一个私有区域,避免被其他元素影响。
  2. 清除浮动。
  3. 利用BFC内的元素与元素外的元素互不影响,解决margin重叠。
  4. 避免元素被浮动元素覆盖。

4. 垂直居中

简述:实现元素的垂直居中的方法大致可以分为两大类,一个是已经知道元素的宽高,一个是不知道元素宽高,在这只距离常见的几种。

已知元素宽高
  1. 使用定位position父相子绝+margin,父元素相对定位,子组件绝对定位,子组件top、left、right、bottom均设为0,而且margin:auto。
.parent {
    width: 300px;
    background: red;
    height: 300px;
    position: relative;
}
.son {
    width: 150px;
    background: rgb(102, 102, 102);
    height: 150px;
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right:0;
    margin: auto;
}
  1. 使用定位position父相子绝+margin,父元素相对定位,子组件绝对定位,子组件的top、left均设为50%,而且margin:-75px 0 0 -75px。
.parent {
    width: 300px;
    background: red;
    height: 300px;
    position: relative;
}
.son {
    width: 150px;
    background: rgb(102, 102, 102);
    height: 150px;
    position: absolute;
    top: 50%;
    left: 50%;
    margin: -75px 0 0 -75px;
}
元素宽高未知
  1. 使用定位position父相子绝+margin,父元素相对定位,子组件绝对定位,子组件的top、left均设为50%,子组件使用transform的translate。
.parent {
    width: 300px;
    background: red;
    height: 300px;
    position: relative;
}
.son {
    background: rgb(102, 102, 102);
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}
  1. 使用表格样式进行设置,display: table-cell将元素作为表格元素显示,vertical-align: middle设置元素垂直父元素中部,text-align: center文本居中,再将子元素设置成行内块元素。(注意:该方式中parent的父元素不可为display: flex,否则会影响到垂直居中布局
.parent {
    width: 300px;
    background: red;
    height: 300px;
    display: table-cell; 
    text-align: center; 
    vertical-align: middle;
}
.son {
    background: rgb(102, 102, 102);
    display: inline-block;
}
  1. 使用弹性布局,目前最流行的垂直居中方式display: flex;、justify-content: center;、align-items: center;。
.parent {
    width: 300px;
    background: red;
    height: 300px;
    display: flex;
    justify-content: center;
    align-items: center;
}
.son {
    background: rgb(102, 102, 102);
}
  1. 使用grid布局,与弹性布局写法相识,不同在于设置display的值display: grid;(注意:grid布局目前需要考虑兼容性)
.parent {
    width: 300px;
    background: red;
    height: 300px;
    display: grid;
    justify-content: center;
    align-items: center;
}
.son {
    background: rgb(102, 102, 102);
}

5. display:none和visibility:hidden和opacity:0的区别

display:none
  • DOM结构:display:none不会被DOM树渲染出来,不占据空间。
  • 继承性:非继承,因为不会被渲染出来,因此子元素设置display其他值也不会显示。
  • 性能:因为是改变了DOM的结构,属于回流,性能消耗较大。
  • 绑定的事件:不响应。
  • transform:不支持。
visibility:hidden
  • DOM结构:visibility:hidden会渲染出来但是内容不可见,因此会占据空间。
  • 继承性:继承,子元素可修改显示。
  • 性能:因为结构已经被显然出来,只是不可见,因此改变属于重绘,性能消耗较小。
  • 绑定的事件:不响应。
  • transform:支持。
opacity:0
  • DOM结构:opacity:会渲染出来但是因为是透明的,内容不可见,因此会占据空间
  • 继承性:继承,子元素可修改显示。
  • 性能:因为结构已经被显然出来,只是不可见,因此改变属于重绘,性能消耗较小。
  • 绑定的事件:响应,只是透明,但是结构还在可以点击到。
  • transform:支持。 总结:display:none是不存在;visibility:hidden是存在但是看不见摸不着;opacity:0是存在看不见摸得着。

6. 使用css实现一个三角形

主要是使用css的border属性实现。设置border的宽度,再根据需求设置边框四周的颜色透明实现不同的三角形。

// 等边三角形
.box {
    wigth: 0;
    heigth: 0;
    boder: 10px solid red;
    border-top-color: transparent; 
    border-left-color: transparent; 
    border-right-color: transparent;
}

7. 浏览器盒模型

简述:可以将html中的每个元素都看成一个盒子,盒子由content + padding + margin + border组成,浏览器有两种盒模型标准盒模型(使用w3c标准)怪异盒模型(IE盒模型) ,可以使用box-sizing属性设置。

  • content:展示内容的区域。
  • padding:内边距,盒子边框与内容的距离。
  • margin:外边距,盒子与盒子间的距离。
  • border:盒子的边框。
标准盒模型

标准盒模型中,使用wigth/heigth改变的是content区域的大小,它的实际大小为content+padding+border,margin不算入实际大小中,可以box-sizing: border-box定义。

怪异盒模型

怪异盒模型即IE盒模型,使用wigth/heigth改变的虽然也是content区域的大小,但是它的content区域(内容大小)是content+padding+border,,改变padding和border都无法改变它的实际大小,即设置的wigth/heigth就是实际宽高。

8. 清除浮动

简述:使用浮动的话会使父元素的高度坍塌,可能会造成布局的混乱,因此有时候需要清除浮动对布局的影响。

  1. 让元素出发BFC,BFC计算父元素高度时会将浮动元素计算在内,这是BFC的特性。
  2. 在浮动元素后面添加一个空的div元素,设置clear:both这样可以时达到清除浮动的效果。
  3. 某些场景下可以自定义父元素高度,这样就不会担心高度坍塌。
  4. 父级元素定义伪类:after和zoom

9. 什么是伪类和伪元素,它们的区别

伪类

伪类是在某个时段里操作对元素进行操作;如::hover是当鼠标移动到元素上时触发定义在该元素的css样式。

伪元素

伪元素用于创建一些不在DOM树中的元素,并为其添加样式。如::before在元素前创建元素。

区别

区别就是在于它们的作用不一样。

  • 伪类是在某个时段里操作对元素进行操作。
  • 伪元素用于创建一些不在DOM树中的元素。

10. css的选择器以及优先级

选择器

id选择器、类选择器、标签选择器、属性选择器、伪类选择器、伪元素选择器、兄弟选择器、父子选择器、后代选择器、通配符。

优先级
  • !important声明的优先级最高
  • 内联样式 1000
  • id选择器 100
  • 类选择器、属性选择器、伪类选择器 10
  • 伪元素选择器、标签选择器 1
  • 其余的选择器 0

11. 重绘和回流的理解

简述:当页面中的元素发生变化时,浏览器会会页面重新计算渲染会产生性能的消耗,不同的变化造成的结果不同,会形成重绘或回流。

重绘

元素的一些属性需要更新,但是这些更新不会影响布局、元素大小,这样的变化就是重绘。

回流

页面中的元素尺寸大小、布局、显隐等发生变化会造成页面的渲染树重新构建,称为回流。每次页面至少会发生一次回流,就是第一次渲染的时候。

注意
  • 重绘不一定触发回流,但是回流一定触发重绘。
  • 回流的性能消耗大于重绘

12. css实现骰子的三点

这里使用弹性布局实现,父元素使用弹性布局,子元素使用align-self来改变单个元素的对齐方式。

 <div class="parent">
      <div class="son"></div>
      <div class="son1"></div>
      <div class="son2"></div>
 </div>
.parent {
      display: flex;
      justify-content: center;
      width: 200px;
      height: 200px;
      border: 1px solid #999999;
      border-radius:20px;
      padding: 10px;
 }
.parent > div {
      width: 50px;
      height: 50px;
      border-radius: 50%;
      background: black;
}
.son1 {
      align-self: center;
}
.son2 {
      align-self: flex-end;
}

13. CSS Sprites的理解

简述:CSS Sprites也就是雪碧图,是将一些图片整合到一个图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字精确的定位出背景图片的位置。雪碧图达到减少http请求优化页面速度。

优点
  • 减少http的请求次数,提高页面性能
  • 降低文件的字节,将图片合成一张的字节少与多张的总和。
  • 减少给文件起名的烦恼。
  • 方便更改风格,在需要统一更改风格时不需要一张张更改,只需要修改一张即可。
缺点
  • 有序的将多张图片合成一张需要考虑各张图片的位置,步骤繁琐。
  • 开发麻烦,因为需要对雪碧图中的小图位置进行计算。
  • 维护麻烦,如果页面背景需要改变,那么雪碧图也需要跟着改变。

14. 说说外边距重合

简述:当两个相邻的盒子都设置了外边距时,相邻的外边距将会重合而不是相加。

规则
  • 当相邻的外边距都为正值时,取最大的值作为两个盒子间的距离。
  • 当相邻的外边距都为负数时,取负数的绝对值中最大值为两个盒子间的距离。
  • 当相邻的外边距一正一负时,将取两数的和作为两个盒子的距离。