圣杯布局、双飞翼布局

1. 问题场景

三列布局中,如果想要将主要内容main优先加载优化,则DOM如下所示

1
2
3
4
5
<div class="g-container">
  <div class="g-main">我是主列</div>
  <div class="g-left">我是左列</div>
<div class="g-right">我是右列</div>
</div>

定位与层级

1. 定位 position

1.1 静态定位 static

每个元素的默认值,将元素放入它在文档布局流中的正常位置。

1.2 相对定位 relative

开启定位后,可以使用top、right、bottom,left四个属性设置偏移量。选择一个垂直方向和竖直方向上的偏移量即可为一个元素定位。

要点

  • 相对定位的元素不会脱离文档流
  • 开启相对定位后,如果不设置偏移量,元素不会发生任何变化
  • 相对定位是相对于元素在文档流中原来的位置进行定位
  • 相对定位会使元素提升一个层级
  • 相对定位不会改变元素的性质

浮动与BFC

1. 浮动的工作原理

浮动会脱离正常的文档流,并吸附到其父容器左边,正常布局中位于浮动元素下的内容会围绕着浮动元素

2.可选值

效果
none 默认值,元素默认在文档流中排列
left 元素会立即脱离文档流,向页面的左侧浮动
right 元素会立即脱离文档流,向页面的右侧浮动

仿网易云音乐的对话气泡框

主要就是对话框小三角的实现,效果如下

1

主要难点就是三角形的实现,有两种思路,一种是利用border,网易云音乐是用两个 ◆ 层叠显示边框的,下面是核心代码

html

1
2
3
4
5
6
7
8
<div class="comment">
<span class="darr">
<i class="bd"></i>
<i class="bg"></i>
</span>
<a href="#">liang</a>
<span>嘤嘤嘤呀呀呀呀呀呀晕晕晕晕</span>
</div>

css

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
.comment {
position: relative;
width: 200px;
padding: 10px 15px;
background-color: #f4f4f4;
text-align: left;
border: 1px solid #dedede;
}

.darr {
position: absolute;
top: -7px;
left: 20px;
font-size: 15px;
line-height: 14px;
}

i {
font-style: normal;
position: absolute;
top: 0;
left: 0;
}

.bg {
color: #f4f4f4;
top: 1px;
}

// 边框
.bd {
color: #dedede;
}