1.行内元素、块级元素、行内块级元素
行内元素不会独占一行,相邻的行内元素会排列在同一行里,直到一行排不下,才会换行,其宽度随元素的内容而变化。行内元素不可以设置高度、宽度。行内元素设置水平方向的padding、margin有效,竖直方向无效。
常见行内元素:a b span select strong
块级元素会独占一行,其宽度自动填满其父元素宽度。块级元素可以设置width,height属性,块级元素可以设置padding、margin。
常见块级元素:div h1 ul ol li p td th dl dt
行内块级元素既有块级元素的特点也有行内元素的特点。不仅可以在一行内放置多个行内块级元素,而且可以设置宽高。
常见行内块级元素:input img
2.script标签中defer和async的区别
defer和async都是异步加载外部js脚本,不会阻塞页面的解析。
他们的区别在于:defer会在HTML解析完成后执行,async则在下载完成后执行。defer是按照加载顺序执行的,async是哪个文件先加载完哪个先执行。
3.HTML语义化
好处:爬虫依赖标签来确定关键字的权重,HTML语义化有利于seo;便于团队开发和维护,语义化使得代码更具有可读性;页面内容结构化,使页面没有css的情况下,也能够呈现出很好的内容结构。
常见语义化标签:
- header(头部)
- nav(导航栏)
- section(区块)
- main(文档主要内容)
- article(页面独立的内容)
- aside(侧边栏)
- footer(底部)
4.display: none visibility: hidden的区别
- display: none 会让元素完全从dom树消失,渲染时不占据空间,不能点击;visibility: hidden 不会让元素从dom树消失,渲染时占据空间,只是内容不可见,可以点击。
- display: none 非继承属性,子孙节点消失是父元素从渲染树消失造成的;visibility: hidden 可继承属性,可通过设置子节点visibility: visible显示。
- display: none 会造成重排;visibility: hidden 会造成重绘。
5.怎么清除浮动
- 在浮动元素后加一个空的div标签并添加clear: both样式。
- 使用:after伪元素,原理同上
.clearfix:after {
content: '.';
display: block;
height: 0;
clear: both;
}
- 利用BFC,给父元素设置overflow: hidden 或 overflow: auto 样式。
6.BFC
BFC目的是形成一个相对于外界完全独立的空间,让内部的子元素不会影响到外部的元素。
触发条件:
- HTML根元素。
- display的值为inline-block、tabel-cell、flex、grid。
- position的值为absolute、fixed。
- float不为none。
- overflow不为visible。
7.实现九宫格
实现效果:
方法一:使用grid。
<div class="grid-container">
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
<div class="grid-item">5</div>
<div class="grid-item">6</div>
<div class="grid-item">7</div>
<div class="grid-item">8</div>
<div class="grid-item">9</div>
</div>
.grid-container {
width: 300px;
height: 300px;
display: grid;
grid-template-columns: 30% 30% 30%;
grid-template-rows: 30% 30% 30%;
grid-gap: 5%;
}
.grid-item {
background-color: #e74c3c;
color: #fff;
text-align: center;
line-height: 100px;
border-radius: 5px;
}
方法二:使用flex。
<div class="grid-container">
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
<div class="grid-item">5</div>
<div class="grid-item">6</div>
<div class="grid-item">7</div>
<div class="grid-item">8</div>
<div class="grid-item">9</div>
</div>
.grid-container {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
width: 300px;
height: 300px;
}
.grid-item {
width: 30%;
height: 30%;
margin-bottom: 5%;
margin-right: 5%;
background-color: #e74c3c;
color: #fff;
text-align: center;
line-height: 100px;
}
.grid-item:nth-of-type(3n) {
margin-right: 0;
}
.grid-item:nth-of-type(n+7) {
margin-bottom: 0;
}
方法三:使用表格布局。
<table>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
</table>
table {
width: 300px;
height: 300px;
border-collapse: collapse;
}
td {
width: 33.33%;
height: 33.33%;
border: 7px solid;
text-align: center;
vertical-align: middle;
background-color: #e74c3c;
color: #fff;
}
8.两栏布局、三栏布局
双栏布局
html结构
<body>
<div class="box">
<div class="left">左边</div>
<div class="right">右边</div>
</div>
</body>
- 利用浮动。
.box{
overflow: hidden
}
.left {
float: left;
width: 200px;
background-color: lightblue;
height: 400px;
}
.right {
margin-left: 210px;
background-color: pink;
height: 200px;
}
- 利用flex。
.box {
display: flex;
}
.left {
width: 100px;
height: 400px;
background: lightblue;
}
.right {
flex: 1;
height: 200px;
background: pink;
}
- 利用绝对定位。
.box {
position: relative;
height: 500px;
}
.left {
position: absolute;
width: 200px;
height: 400px;
background: lightblue;
}
.right {
margin-left: 210px;
height: 200px;
background: pink;
}
三栏布局
<div class="wrap">
<div class="left">左侧</div>
<div class="middle">中间</div>
<div class="right">右侧</div>
</div>
- 两边使用absolute,中间使用margin.
.wrap {
position: relative;
background: #eee;
height: 200px;
}
.left {
position: absolute;
top: 0;
left: 0;
width: 100px;
height: 200px;
background: lightblue;
}
.middle {
margin: 0 110px;
background: coral;
height: 200px;
}
.right {
position: absolute;
top: 0;
right: 0;
width: 100px;
height: 200px;
background: pink;
}
- 使用flex。
.wrap {
display: flex;
justify-content: space-between;
background: #eee;
height: 200px;
}
.left {
width: 100px;
height: 200px;
background: lightblue;
}
.middle {
flex: 1;
background: coral;
height: 200px;
margin: 0 10px;
}
.right {
width: 100px;
height: 200px;
background: pink;
}
- 使用grid。
.wrap {
display: grid;
background: #eee;
height: 200px;
width: 100%;
grid-template-columns: 150px auto 150px;
}
.left {
height: 200px;
background: lightblue;
}
.middle {
background: coral;
height: 200px;
margin: 0 10px;
}
.right {
height: 200px;
background: pink;
}
9.水平垂直居中实现。
html结构
<div class="father">
<div class="son"></div>
</div>
- 使用定位+transform
.father {
position: relative;
height: 200px;
width: 200px;
background: #eee;
}
.son {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100px;
height: 100px;
background: lightblue;
}
- 使用table。设置父元素为display:table-cell,子元素设置 display: inline-block。利用vertical和text-align可以让所有的行内块级元素水平垂直居中.
.father {
display: table-cell;
height: 200px;
width: 200px;
background: #eee;
vertical-align: middle;
text-align: center;
}
.son {
display: inline-block;
width: 100px;
height: 100px;
background: lightblue;
}
- 使用flex。
.father {
display: flex;
justify-content: center;
align-items: center;
height: 200px;
width: 200px;
background: #eee;
}
.son {
width: 100px;
height: 100px;
background: lightblue;
}
- 使用grid。
.father {
display: grid;
align-items: center;
justify-content: center;
height: 200px;
width: 200px;
background: #eee;
}
.son {
width: 100px;
height: 100px;
background: lightblue;
}
10.响应式布局
实现相应式布局的方法有:
- 媒体查询。
- 百分比。
- em、rem。
- vw、vh。