HTML、CSS面试准备

139 阅读7分钟

前言

整理一下最近背的八股文,实习上岸!!!

HTML篇

1. 什么是HTML语义化

语义化的意思是用正确的标签做正确的事。能直观的认识标签和属性的用途和作用。

优点

有助于构造良好的HTML结构

有利于搜索引擎的索引和抓取,利于SEO

清晰的结构有利于团队的维护和开发

常见的语义化标签

headernavmainsectionarticleasidefooter

image.png

2. 常见的meta元素

  • charset

html文档的编码格式,常用的是UTF-8

<meta charset='utf-8'>
  • name & content

    • author——页面作者
    <meta name="author" content="Shang"
    
    • keywords——为搜索引擎提供关键字
    <meta name="keywords" content="html,css,javascript">
    
    • description——网页整体描述
    <meta name="desciption" content="前端学习"
    
    • viewport——页面视图定义
    <meta name="viewport" content="width=1226"
    
    width = device-width  -- 将页面宽度设置为跟随屏幕宽度变化而变化
    initial-scale = 1.0   -- 设置浏览器首次加载页面时的初始缩放比例
    maximum-scale = 1.0   -- 允许用户缩放的最大比例
    minimum-scale = 1.0   -- 允许用户缩放的最小比例
    user-scalable = no    -- 是否允许用户手动缩放
    
  • http-equiv & content

    • refresh——多长时间刷新一次文档
    <meta http-equiv="refresh" content="30">
    
    • X-UA-Compatible——以何种版本渲染页面
    <meta http-equiv="X-UA-Compatible" content="ie=edge"
    

    告诉浏览器使用IE最新版本

    • Cache-Control——请求和响应的缓存机制
    <meta http-equiv="Cache-Control" content="no-transform">  
    <meta http-equiv="Cache-Control" content="no-siteapp">
    
    no-transform 不能对资源进行转换或转变
    no-siteapp 禁止百度进行转码
    
    • default-style——设置默认css样式表组的名称
    <meta http-equiv="default-style" content="light.css"
    

    content 属性的值必须匹配同一文档中的一个 link 元素上的 title 属性的值,或者必须匹配同一文档中的一个 style 元素上的 title 属性的值。

3. !DOCTYPE的作用

<!DOCTYPE html>  告诉浏览器以何种方式来渲染页面

4. prefetch/preload有什么区别

preload比prefetch的优先级高

preload 告诉浏览器页面必要的资源,浏览器一定会加载

prefetch 告诉浏览器页面可能需要的资源,浏览器不一定加载

<link rel="preload" href="./app.js" as="script">
<link rel="preload" href="./light.css" as="style">
<link rel="prefetch" href="./user.js">

5. Script标签中async和defer有什么区别

他们都是异步加载资源,不阻塞页面解析。

并行执行上

defer: 在页面解析过程开始加载,加载完成后等文档解析完成后再执行

async: 在页面解析过程开始加载,加载完成后与文档解析并行进行

执行顺序上

defer: 按代码书写顺序加载

async: 不保证加载顺序

image.png

6. 禁用a标签的跳转页面或定位链接?

  • href标签为空
<a href="javascript:void(0)"></a>
<a href="javascript:void(0)"></a>
<a href=""></a>
<a href="#"></a>
  • Html阻止默认行为
<a href="" onclick="return false"></a>
<a href="http://www.baidu.com" onclick="return false"></a>
  • js阻止默认点击时间
Event.preventDefault()
  • css处理点击,不响应鼠标事件
a {
  pointer-events: none;
}

7. 标签中title属性与alt属性的区别

title: 当鼠标悬停时,显示文字注释

alt: 当图片未能正常显示时,就会显示alt设置的文字

8. HTML5新特性

  • 新增语义标签: header、nav、main、section、article、aside、footer
  • 音、视频: audio、vedio
  • 数据存储: localStorage、sessionStorage
  • input标签: placeholder、autocomplete、autofocus、required
  • history API: go、forword、back、pushstate
  • DOM查询: querySelector、querySelectorAll
  • 可伸缩矢量图形 SVG
  • 画布 canvas
  • 通信协议:webSocket
  • 地理定位:Geolocation

9. Src和href的区别

  • 请求资源类型不同

href:Hypertext Reference的缩写,超文本引用。建立当前元素和文档之间的链接。常用的有:link、a

src:将指向的资源下载并应用到文档中,常用的有script、img、iframe

  • 解析方式不同

href:并行下载资源并且不会停止对当前文档处理

src:暂停其他资源的下载和处理,知道该资源加载执行完毕

CSS篇

1. 优先级

  • 选择器优先级
內联样式 > id选择器 > 类选择器、伪类选择器、属性选择器 > 标签选择器、伪元素选择器
​
通用选择器、子选择器(>)、相邻同胞选择器(+) 权重为0
  • 样式表来源优先级
内联样式 > 内部样式 > 外部样式> 浏览器用户自定义样式 > 浏览器默认样式
  • 选择器内样式优先级
!important 优先级最高
​
优先级相同,最后出现的样式生效
​
继承得到的样式优先级最低

2. + 和 ~有什么区别

  • :选择紧跟着的兄弟元素 样例

~ : 为后面所有指定的元素 样例

css选择器参考手册

3. 伪类和伪元素

伪类:当元素达到一个特定的状态时,才能得到伪类的样式

element::before       -- 设置对象前的内容
element::after        -- 设置对象后的内容
element::placeholder  -- 设置文字占位符的样式
element::selection    -- 设置文字选中的样式

伪元素:将特殊的效果添加到选择器

element:link                  -- 超链接未被访问前的样式
element:visited               -- 超链接被访问过的样式
element:hover                 -- 鼠标悬停在元素的样式
element:active                -- 点击未释放过程的样式
element:focus                 -- 成为输入焦点时的样式
element:first-child           -- 匹配父元素的第一个子元素
element:last-child            -- 匹配父元素的最后一个子元素
element:nth-child(n)          -- 匹配父元素的第n个元素
element:nth-last-child(n)     -- 匹配父元素的倒数第n个元素
element:first-of-type         -- 匹配同类型中的第一个同级兄弟元素
element:last-of-type          -- 匹配同类型中的最后一个同级兄弟元素
element:nth-of-type(n)        -- 匹配同类型中的第n个同级兄弟元素
element:nth-last-of-type(n)   -- 匹配同类型中的倒数第n个同级兄弟元素
element:checked               -- 选中状态元素的样式
element:enabled               -- 可用状态元素的样式
element:disabled              -- 禁用状态元素的样式

4. 盒模型

盒模型由 外边距(margin)、边框(border)、内边距(padding)、内容(content) 组成

  • 标准模型

组成:margin + border + padding + width

设置:box-sizing: content-box;

image.png

  • 怪异盒模型

组成:margin + border + width(padding+content)

设置:box-sizing: border-box;

image.png

5. BFC

块级格式上下文

触发BFC,形成独立的渲染区域,单独计算,外面的元素不会影响里面的元素。

触发方式

float: left | right 
overflow: hidden
display: inline-block | flex | grid | table-cell | table-caption
position: absolute | fixed

应用场景

  • 自适应两栏布局
  • 避免元素被浮动元素覆盖
  • 去除边距重叠现象
  • 盒子塌陷

6. em、px、rem、vh、vw、%单位有什么区别

px:像素

em: 相对长度单位,浏览器默认字体尺寸 1em = 16px

em值不是固定的,通过body设置font-size=62.5%,此时1em=10px
em会继承父级元素的字体大小

rem: 相对单位,只相对HTML根元素font-size的值

淘宝无限适配就是通过更改根元素的font-size的原理实现

vh、vw: 根据页面视口大小布局

vw: 分成100等份,100vw就是满屏
vh与vw同理
​
桌面端:视口为浏览器的可视区域
移动端:视口为布局视口

vw/vh 和 % 不同的是:%是相对父元素的百分比,而vw/vh是相对页面视口

7. 隐藏元素

display: none;            -- 不被渲染,不占据页面位置,不响应绑定监听事件
visibility: hidden;       -- 占据页面空间,不响应绑定监听事件
opacity: 0;               -- 占据页面空间,能响应绑定监听事件
position: absolute;       -- 元素移除可视区域
z-index: -1;              -- 遮盖元素
transform: scale(0, 0);   -- 占据页面空间,不响应绑定监听事件
clip-path: polygon(0px 0px, 0px 0px, 0px 0px, 0px 0px)  -- 占据页面空间,不响应绑定监听事件

8.display和visibility的区别

  • 渲染树

display: 会让元素完全从渲染树中消失,不占据页面任何空间

visibility: 不会让元素从渲染树中消失,占据页面空间

  • 继承属性

display:非继承属性,子孙节点随父节点从渲染树消失,通过修改子孙节点的属性也无法显示

visibility:继承属性,子孙节点继承visibility属性,通过修改子孙节点可以显示

  • 重排和重绘

display会造成重排,visibility触发重绘

9. 清楚浮动

  • clear: both
div {
  clear: both;
}
  • overflow:hidden
ul {
  list-style: none;
  overflow: hidden;
}
ul li {
  float: left;
}
  • ::after
ul::after {
  content: "";
  display: block;
  clear: both;
}

10. 双栏布局和三栏布局

双栏布局

  • overflow+float+margin
  • flex

三栏布局

  • overflow+float+margin
  • absolute+margin
  • float+负margin
  • display: table
  • flex
  • grid

Github:github.com/ShangEnbo/T…

11. 垂直居中

  • absolute + margin
  • absolute + calc
  • absolute + transform
  • 行内元素 重点:line-height 可以继承
  • table-cell
  • flex
  • grid

GitHub:github.com/ShangEnbo/v…

12. 0.5px线

方法一 scale缩放

.hr .scale-half {
  height: 1px;
  transform: scaleY(0.5)
}

方法二 linear-gradient

.hr .gradient {
  height: 1px;
  background: linear-gradient(0deg, #fff, #000)
}

13. CSS3新特性

  • 边框: border-radius,box-shadow
  • 背景: background-size,background-origin
  • 转换: transform
  • 动画: animation

14. 溢出处理

  • 单行处理
text-overflow: clip         --  不显示省略标记,简单裁剪
text-overflow: ellipsis     --  显示省略标记
white-space: nowrap         --  段落中的文本不换行
  • 多行处理
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;