一、HTML基础
1. HTML、XML、XHTML 的区别
概念:
HTML
:超文本标记语言,是语法较为松散的、不严格的Web
语言,主要用于显示数据;XML
:可扩展标记语言,主要用于传输和存储数据,可扩展,可以自定义标签;XHTML
:可扩展超文本标记语言,基于XML
,作用与HTML
类似,但语法更严格。
XHTML
与 HTML
的区别:
XHTML
标签名必须小写;XHTML
元素必须有结束标签;XHTML
元素必须被正确的嵌套;XHTML
元素必须要有根元素
XHTML
与 HTML5
的区别:
HTML5
新增了canvas
绘画元素;HTML5
新增了用于媒介回放的video
和audio
元素;- 更具语义化的标签,便于浏览器识别;
- 对本地离线存储有更好的支持;
MathML
,SVG
等,可以更好的render
;- 添加了新的表单控件:
calendar
、date
、time
、email
等
HTML
、XHTML
、HTML5
之间的联系:
XHTML
是HTML
规范版本;HTML5
是HTML
、XHTML
以及HTML DOM
的新标准。
2. 元素分类
- 块级元素
div
,ul
,li
,dl
,dt
,dd
,h1
~h5
,p
等; - 行内元素(内联元素)
a
,b
,span
,img
,input
,select
,strong
,button
等
3. 语义化
HTML标签的语义化,就是用正确的标签做正确的事情,给某块内容用上一个最恰当最合适的标签,使页面有良好的结构,页面元素有含义,无论是谁都能看懂这块内容是什么。
作用:
- 代码结构: 使页面在没有css的情况下,也能够呈现出好的内容结构
- 有利于SEO: 爬虫根据标签来分配关键字的权重,因此可以和搜索引擎建立良好的沟通,帮助爬虫抓取更多的有效信息
- 方便其他设备解析: 如屏幕阅读器、盲人阅读器、移动设备等,以有意义的方式来渲染页面
- 便于团体的开发和维护: 语义化使代码更具有可读性,让其他开发人员更加理解你的html结构,减少差异化。遵循 W3C 标准的团队都遵循这个标准。
常见的语义化标签:
- header:页面或者文章的头部
- main:文档正文的主体部分
- footer:页面或文章的尾部
- aside:侧边栏
- nav:导航
- article:页面中的独立部分,如文章、帖子等内容
- section:文档中一个通用独立章节
4. DOCTYPE
Doctype
是 HTML
的文档类型声明,通过它可以告诉浏览器,使用哪一个 HTML
版本标准解析文档。
在浏览器发展的过程中,HTML
出现过很多版本,不同的版本之间格式书写上略有差异。如果没有事先告诉浏览器,那么浏览器就不知道文档解析标准是什么?此时,大部分浏览器将开启最大兼容模式来解析网页,我们一般称为怪异模式
,这不仅会降低解析效率,而且会在解析过程中产生一些难以预知的bug,所以文档声明是必须且必要的。
<!-- html5中只需要写这个 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
</head>
<body></body>
</html>
5. HTML5新增了哪些新特性?移除了哪些元素?
HTML5主要是关于图像、位置、存储、多任务等功能的增加:
- 语义化标签,如:
article
、footer
、header
、nav
等 - 视频
video
、音频audio
- 画布
canvas
- 表单控件,
calendar
、date
、time
、email
- 地理
- 本地离线存储,
localStorage
长期存储数据,浏览器关闭后数据不丢失,sessionStorage
的数据在浏览器关闭后自动删除 - 拖拽释放
移除的元素:
- 纯表现的元素:
basefont
、font
、s
、strike
、tt
、u
、big
、center
- 对可选用性产生负面影响的元素:
frame
、frameset
、noframes
6. SEO相关的标签
TDK,即·title
、description
、keywords
这三个标签,title
表示标题标签,description
是描述标签,keywords
是关键词标签
7. src 和 href 的区别
src
和href
都是HTML中特定元素的属性,都可以用来引入外部的资源。两者区别如下:
src
:全称source
,它通常用于img
、video
、audio
、script
元素,通过src
指向请求外部资源的来源地址,指向的内容会嵌入到文档中当前标签所在位置,在请求src
资源时,它会将资源下载并应用到文档内,比如说:js
脚本、img
图片、frame
等元素。当浏览器解析到该元素时,会暂停其它资源下载,直到将该资源加载、编译、执行完毕。这也是为什么将js
脚本放在底部而不是头部的原因。href
:全称hyper reference
,意味着超链接,指向网络资源,当浏览器识别到它指向的⽂件时,就会并⾏下载资源,不会停⽌对当前⽂档的处理,通常用于a
、link
元素。
8. script标签上的 defer 和 async 的区别
<script src="main.js"></script>
不带defer
和async
,浏览器读取到该标签就会立即加载并执行相应的脚本,会阻塞后续页面文档的解析<script async src="main.js"></script>
带async
属性,异步脚本,即页面文档的解析与js脚本的加载是并行进行的,但是js脚本的执行依然会阻塞页面的解析。多个异步脚本的执行顺序与书写顺序不一定一致。<script defer src="main.js"></script>
带defer
属性,延迟脚本,即读取到该标签时,会去异步加载该脚本,不会阻塞页面文档的解析,脚本会被延迟到整个页面解析完成之后、DOMContentLoaded
事件触发之前执行。多个延迟脚本,理论上是按照顺序执行的,但是现实中不一定。
二、CSS基础
1. 盒模型
盒模型中均包含元素内容content
、内边距padding
、边框border
及外边距margin
四部分
- 标准盒模型:
width = content
- 通过
box-sizing: content-box;
来使用标准盒模型
- IE盒模型:
width = content + padding + border
- 通过
box-sizing: border-box;
来使用IE盒模型
2. 布局
flex
布局
弹性布局,由父级容器、子元素(也称项目)构成,通过设置主轴和交叉轴来控制子元素的排序方式。这种布局方式是一维布局,适合做局部布局,比如导航栏
父级容器属性:
flex-direction
: row | row-reverse | column | column-reverse; 设置主轴的方向;flex-wrap
: nowrap | wrap | wrap-reverse; 换行方式flex-flow
: <’flex-direction’> <’flex-wrap’>;flex-direction
和flex-wrap
的简写形式,默认值为row nowrap
justify-content
: flex-start | flex-end | center | space-between | space-around; 子元素在主轴上的对齐方式;align-items
: flex-start | flex-end | center | baseline | stretch; 子元素在交叉轴上的对齐方式。align-content
: flex-start | flex-end | center | space-between | space-around | stretch; 属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用
子元素属性:
order
: 子元素的排列顺序。数值越小,排列越靠前,默认为0
flex-grow
: 子元素的放大比例,默认为0
flex-shrink
: 子元素的缩小比例,默认为1
,空间不足时会缩小该元素,设为0
禁止缩小flex-basis
: 子元素在主轴方向上的初始大小。flex
:flex-grow
,flex-shrink
和flex-basis
的简写,默认值为0 1 auto
align-self
: 允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items
属性。默认值为auto
,表示继承父元素的align-items
属性,如果没有父元素,则等同于stretch
。
grid
布局
网格布局, 将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。网格是一组相交的水平线和垂直线,它定义了网格的列和行。我们可以将网格元素放置在与这些行和列相关的位置上。这种布局方式是二维布局,适合做整个页面的规划。
父级容器属性:
grid-template-columns
: 设置列宽grid-template-rows
: 设置行高grid-row-gap
:设置行之间的间距grid-column-gap
: 设置列之间的间距grid-gap
: <’grid-row-gap’> <’grid-column-gap’>, 行间距和列间距的缩写align-items
: 设置单元格内容的垂直位置justify-items
: 设置单元格内容的水平位置justify-content
: 设置内容区域在容器里面的水平位置align-content
: 设置内容区域在容器里面的垂直位置- …
项目属性:
justify-self
: 设置单元格内容的水平位置align-self
: 设置单元格内容的垂直位置grid-column-start
: 项目左边框所在的垂直网格线grid-column-end
: 项目右边框所在的垂直网格线grid-column
: 上面两个属性的简写grid-row-start
: 项目上边框所在的水平网格线grid-row-end
: 项目下边框所在的水平网格线
3. 选择器
优先级:
!important
会覆盖页面内任何位置的元素样式- 内联样式,如
style="color: green"
,权值为1000
- ID选择器,如
#app
,权值为100
- 类、伪类、属性选择器,如
.foo, :first-child, div[class="foo"]
,权值为10
- 标签、伪元素选择器,如
div::first-line
,权值为1
- 通配符、子类选择器、兄弟选择器,如
*, >, +
,权值为0
- 继承的样式没有权值
4. 定位
- static
- relative
- absolute
- fixed
- sticky
sticky
在屏幕范围(viewport)时该元素的位置并不受到定位影响(设置的top
、left
等属性无效),当该元素的位置将要移出偏移范围时,定位又会变成fixed
,根据设置的left
、top
等属性成固定位置的效果。
特点:
- 该元素并不脱离文档流,仍然保留元素原本在文档流中的位置。
- 当元素在容器中被滚动超过指定的偏移值时,元素在容器内固定在指定位置。即如果你设置了
top: 50px
,那么在sticky
元素到达距离相对定位的元素顶部50px
的位置时固定,不再向上移动。 - 元素固定的相对偏移是相对于离它最近的具有滚动框的祖先元素,如果祖先元素都不可以滚动,那么是相对于
viewport
来计算元素的偏移量
5. BFC
BFC
是 Block Formatting context
:块级格式化上下文。具有 BFC
特性的元素可以看作是隔离了的独立容器,拥有不影响外界且不被外界所影响的布局规则。
布局规则:
- 包含内部浮动
开启了BFC的元素在计算高度时,浮动的元素也包含在内,即父元素会被浮动的子元素撑开。 - 排除外部浮动
开启了BFC的元素会阻止自己的文字内容去环绕相邻的浮动元素 - 阻止外边距重叠
开启了BFC的元素会阻止自己与相邻元素的margin-top
或margin-bottom
发生重叠。 - 阻止外边距塌陷
开启了BFC的元素会阻止自己的margin-top
产生伪作用于父元素的现象。
触发方式:
- 根元素(
html
) - 浮动元素(
float
值不为none
) - 绝对定位元素(
position
值为absolute
或fixed
) - 行内块元素(
display
值为inline-block
) - 表格单元格(
display
值为table-cell
,HTML 表格单元格默认值) - 表格标题(
display
值为table-caption
,HTML 表格标题默认值) - 匿名表格单元格元素(
display
值为table
、table-row
、table-row-group
、table-header-group
、table-footer-group
(分别是 HTML table、tr、tbody、thead、tfoot 的默认值)或inline-table
) overflow
值不为visible
、clip
的块元素display
值为flow-root
的元素contain
值为layout
、content
或paint
的元素- 弹性元素(
display
值为flex
或inline-flex
元素的直接子元素),如果它们本身既不是flex
、grid
也不是table
容器 - 网格元素(
display
值为grid
或inline-grid
元素的直接子元素),如果它们本身既不是flex
、grid
也不是table
容器 - 多列容器(
column-count
或column-width (en-US)
值不为auto
,包括column-count
为1
) column-span
值为all
的元素始终会创建一个新的 BFC,即使该元素没有包裹-在一个多列容器中 (规范变更, Chrome bug)
常见应用:
- 解决浮动元素令父元素高度坍塌的问题
- 解决非浮动元素被浮动元素覆盖问题
- 解决外边距垂直方向重合问题
6. 垂直居中实现方式
- absolute + margin负值
- absolute + transform
- flex
- grid
table-cell
+vertical-align: middle;
- float + margin
7. CSS3新特性
- RGBA和透明度
- background-image background-origin(content-box/padding-box/border-box) background-size background-repeat
- word-wrap(对长的不可分割单词换行)word-wrap:break-word
- 文字阴影:text-shadow: 5px 5px 5px #FF0000;(水平阴影,垂直阴影,模糊距离,阴影颜色)
- font-face属性:定义自己的字体
- 圆角(边框半径):border-radius 属性用于创建圆角
- 边框图片:border-image: url(border.png) 30 30 round
- 盒阴影:box-shadow: 10px 10px 5px #888888
- 媒体查询:定义两套css,当浏览器的尺寸变化时会采用不同的属性
8. 隐藏元素的方式
display:none
会让元素完全从渲染树中消失,不占据空间,不可点击,设置时会造成回流 + 重绘
visibility:hidden
在文档布局中仍保留原来的空间,只是内容不可见,不可点击,设置时会造成重绘
opacity: 0
在文档布局中仍然占据空间,只是内容不可见,可以点击,设置时会造成重绘
9. 清除浮动
浮动导致的问题:
- 父元素的高度无法被撑开
- 与浮动元素同级的非浮动元素(内联元素)会跟随其后
- 若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构。
清除浮动的方式:
- 父级元素设置高度
- 最后一个浮动元素后加空div标签 并添加样式
clear:both
。 - 包含浮动元素的父元素设置样式
overflow: hidden
或overflow: auto
- 父级元素设置
zoom
10. 尺寸单位
- px:绝对单位,在同一设备上,每个像素代表的物理长度是固定的,在不同设备上,每个像素代表的物理长度可能是不同的
- em:相对单位,相对于当前元素字体大小或与之最近的已经设置了
font-size
的父级元素的字体大小 - rem:相对单位,相对于根元素
html
字体大小的单位 - %:相对单位,相对于父元素的百分比单位,例如
height
中的%
是相对于父元素的height
,width
、margin
、padding
中的%
是相对于父元素的width
来计算的 - vh:相对单位,相对于视口高度的
1/100
单位 - vw:相对单位,相对于视口宽度的
1/100
单位 - cm:厘米,实际尺寸单位,
1cm = 37.8px
- mm:毫米,实际尺寸单位,
1mm = 3.78px
- in:英寸,实际尺寸单位,
1in = 96px
- pt:点(point),字体尺寸单位,排版印刷时使用
- pc:派卡(pica),字体尺寸单位,
1pc = 16px
, 印刷时使用
11. transition 和 animation
transition 过渡动画
- transition-property:指定过渡的 CSS 属性
- transition-duration:指定过渡所需的完成时间
- transition-timing-function:指定过渡函数
- transition-delay:指定过渡的延迟时间
animation 关键帧动画
- animation-name:指定要绑定到选择器的关键帧的名称
- animation-duration:动画指定需要多少秒或毫秒完成
- animation-timing-function:设置动画将如何完成一个周期
- animation-delay:设置动画在启动前的延迟间隔
- animation-iteration-count:定义动画的播放次数
- animation-direction:指定是否应该轮流反向播放动画
- animation-fill-mode:规定当动画不播放时(当动画完成时,或当动画- 有一个延迟未开始播放时),要应用到元素的样式
- animation-play-state:指定动画是否正在运行或已暂停
12. 可继承的属性
- 字体相关属性:
font
、font-family
、font-size
、font-style
、font-variant
、font-weight
- 文字相关属性:
line-height
、text-align
、text-indent
、text-transform
、color
、letter-spancing
、word-spacing
、direction
- 可见性属性:
visibility
- 表格相关属性:
border-collapse
、border-spacing
、empty-cell
- 列表相关属性:
list-style-type
、list-style-image
、list-style-position
、list-style
- 光标属性:
cursor