龙空技术网

页面布局之经典三栏布局

小菜鸟学前端 125

前言:

现在我们对“html三列布局定义”大约比较关注,咱们都需要学习一些“html三列布局定义”的相关内容。那么小编也在网摘上收集了一些有关“html三列布局定义””的相关内容,希望大家能喜欢,咱们快快来了解一下吧!

页面布局之经典三栏布局

我们在学习前端技术时,首先避免不了的就是你的页面布局问题,其中布局中比较流行的布局方式就是三栏布局,其主要要求是 三列布局,中间宽度自适应,两边定宽; 经典三列布局,也叫做圣杯布局【Holy Grail of Layouts】是Kevin Cornell在2006年提出的一个布局模型概念,在国内最早是由淘宝UED的工程师传播开来,在中国也有叫法是双飞翼布局。

实现三栏布局主要有以下几种方法:

1.float+margin

原理:设置两个侧栏分别向左向右浮动,中间列通过外边距给两个侧栏腾出空间,中间列的宽度根据浏览器窗口自适应;

[html]

1. <span style="font-family:'Courier New';"><body>

2. <div class="left">left</div>

3. <div class="right">right</div>

4. <div class="main">main</div>

5. </body></span>

[html]

1. <span style="font-family:'Courier New';">html,body{

2. margin: 0;

3. height: 100%;

4. }

5. .left{

6. float: left;

7. width: 200px;

8. background: #1de;

9. height: 100%;

10. }

11.

12. .right{

13. float: right;

14. width: 200px;

15. background: red;

16. height: 100%;

17. }</span>

[html]

1. <span style="font-family:'Courier New';">.main{

2. height: 100%;

3. margin: 0 200px;

4. background: #11e;

5. }</span>

1.对.left,.right分别设置宽度,并对.left添加左浮动,对.right添加有浮动。2.对.main设置外边距,margin-left的值为左侧栏的宽度,margin-right的值为右侧栏的宽度(也可以使用margin:0 200px;上下边距为0,左右边距为200)。

2.position+margin

原理:通过绝对定位将两个侧栏固定,同样通过外边距给两个侧栏腾出空间,中间列自适应。

[html]

1. <span style="font-family:'Courier New';font-size:12px;"><body>

2. <div class="left">left</div>

3. <div class="main">main</div>

4. <div class="right">right</div>

5. </body></span>

[html]

1. <span style="font-family:'Courier New';font-size:12px;">html,body{

2. margin: 0;

3. height: 100%;

4. }

5.

6. .left{

7. height: 100%;

8. position: absolute;

9. top:0;

10. left: 0;

11. width: 200px;

12. background: #ac1;

13. }

14.

15. .right{

16. height: 100%;

17. position: absolute;

18. top:0;

19. right: 0;

20. width: 200px;

21. background: #1c1;

22. }

23.

24. .main{

25. height: 100%;

26. margin: 0 200px;

27. background: #12e;

28. }</span>

1.对两边侧栏分别设置宽度,设置定位方式为绝对定位,设置两侧栏的top值都为0,设置左侧栏的left值为0, 右侧栏的right值为0。

2.对主面板设置左右外边距,margin-left的值为左侧栏的宽度,margin-right的值为右侧栏的宽度

3.圣杯布局(float + 负margin)

原理:主面板设置宽度为100%,主面板与两个侧栏都设置浮动,常见为左浮动,这时两个侧栏会被主面板挤下去。通过负边距将浮动的侧栏拉上来,左侧栏的负边距为100%,刚好是窗口的宽度,因此会从主面板下面的左边跑到与主面板对齐的左边,右侧栏此时浮动在主面板下面的左边,设置负边距为负的自身宽度刚好浮动到主面板对齐的右边。为了避免侧栏遮挡主面板内容,在外层设置左右padding值为左右侧栏的宽度,给侧栏腾出空间,此时主面板的宽度减小。由于侧栏的负margin都是相对主面板的,两个侧栏并不会像我们理想中的停靠在左右两边,而是跟着缩小的主面板一起向中间靠拢。此时使用相对布局,调整两个侧栏到相应的位置。

[html]

1. <span style="font-family:'Courier New';font-size:12px;"><body>

2. <div class="main">main</div>

3. <div class="left">left</div>

4. <div class="right">right</div>

5. </body></span>

[html]

1. <span style="font-family:'Courier New';font-size:12px;">html,body{

2. margin: 0;

3. height: 100%;

4. padding: 0 200px 0 200px;

5. }

6. .main{

7. float: left;

8. height: 100%;

9. width: 100%;

10. background: #12e;

11. }

12.

13. .left {

14. float: left;

15. width: 200px;

16. height: 100%;

17. margin-left: -100%;

18. position: relative;

19. left: -200px;

20. background-color: rgb(255, 0, 0);

21. }

22.

23. .right {

24. float: left;

25. width: 200px;

26. height: 100%;

27. margin-left: -200px;

28. position: relative;

29. right: -200px;

30. background-color: yellow;

31. }</span>

1.三个部分都设置向左浮动,并设置width为100%、200px、200px;

2.设置 负边距,.left设置负左边距为100%,.right设置负左边距为负的自身宽度(将left的margin-left设置为-100%,此时左栏会移动到第一行的首部);

3.设置父元素的padding值给左右两个子面板留出空间。

4.设置两个子面板为相对定位,.left的left值为负的left宽度,.right的right值为负的right宽度。

4.双飞翼布局(float + 负margin)

原理:双飞翼布局和圣杯布局的思想有些相似,都利用了浮动和负边距,但双飞翼布局在圣杯布局上做了改进,在main元素上加了一层div, 并设置margin,由于两侧栏的负边距都是相对于main-wrap而言,main的margin值变化便不会影响两个侧栏,因此省掉了对两侧栏设置相对布局的步骤。

[html]

1. <body>

2. <div class="main">

3. <div class="content">main</div>

4. </div>

5. <div class="left">left</div>

6. <div class="right">right</div>

7. </body>

[html]

1. html,body{

2. margin: 0;

3. height: 100%;

4. padding: 0 100px 0 100px;

5. }

6. .main {

7. float: left;

8. height: 100%;

9. width: 100%;

10. }

11. .content {

12. height: 100%;

13. margin-left: 100px;

14. margin-right: 200px;

15. background-color: green;

16. }

17. .left {

18. float: left;

19. height: 100%;

20. width: 100px;

21. margin-left: -100%;

22. background-color: red;

23. }

24. .right {

25. width: 200px;

26. height: 100%;

27. float: left;

28. margin-left: -200px;

29. background-color: blue;

30. }

5.Flex布局

原理:用一个容器container包裹三栏,设置comtainer容器的display属性为flex,左右栏设置宽度为300px,中间栏设置flex:1,这里的1表示宽度比例,具体数值取决于其它盒子的flex值,由于这里其它盒子宽度固定,所以中间栏会自动填充

[html]

1. <div class="container">

2. <div class="left"></div>

3. <div class="main"></div>

4. <div class="right"></div>

5. </div>

[html]

1. .container{

2. display: flex;

3. }

4. .left{

5. background: red;

6. width: 200px;

7. height: 100%;

8. }

9. .main{

10. height: 100%;

11. flex: 1;

12. background: yellow;

13. }

14. .right{

15. height: 100%;

16. background:blue;

17. width: 200px;

18. }

待续。。。

标签: #html三列布局定义