广告位联系
返回顶部
分享到

CSS实现三栏布局的四种方法介绍

css 来源:互联网 作者:佚名 发布时间:2024-03-17 15:35:50 人浏览
摘要

1. 什么是三栏布局 常见的一种页面布局方式,将页面分为左栏、中栏和右栏 左右两侧的盒子宽度固定,中间的盒子会随屏幕自适应 一般中间放主体内容,左右两边放辅助内容 2. 如何实现三栏

1. 什么是三栏布局

常见的一种页面布局方式,将页面分为左栏、中栏和右栏

左右两侧的盒子宽度固定,中间的盒子会随屏幕自适应

一般中间放主体内容,左右两边放辅助内容

2. 如何实现三栏布局

2.1 弹性布局

将最外层盒子设为弹性布局,左右两边的盒子固定宽度200px

将中间的盒子flex设为1

这样中间盒子的宽度就能一直得到全部宽度减去左右盒子的宽度,这个宽度会随着窗口的大小而变化

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

<style>

    *{

        margin: 0;

        padding: 0;

    }

    div{

        height: 200px;

    }

    .container{

        display: flex;

    }

    .left,.right{

        width: 200px;

        background: #66a4bd;

    }

    .middle{

        flex: 1;

        background: gray;

    }

</style>

<div class="container">

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

    <div class="middle">middle</div>

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

</div>

缺点:先加载左边容器的,左右两边往往是辅助内容,这样用户体验不好

为了优化这个问题,就出现了经典的 圣杯 和 双飞翼 布局,它们的目的就是为了在HTML结构上,中间栏在最前面保证了最先渲染中间提升性能

2.2 grid布局

左右两边的宽度固定,将剩余的空间给中间的主体部分

要用到grid-template-columns:定义网格的列大小和数量

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

<style>

    .wrap {

        height: 200px;

        display: grid;

        grid-template-columns: 200px  1fr 200px;

    }

    .left {

        width: 200px;

        height: 100%;

        background-color: aqua;

    }

    .content {

        width: 100%;

        height: 100%;

        background-color: cadetblue;

        flex: 1;

    }

    .right {

        width: 200px;

        height: 100%;

        background-color: bisque;

    }

</style>

<div class="wrap">

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

    <div class="content">content</div>

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

</div>

2.3 圣杯布局

先加载主体内容,增加用户体验

实现原理: float + margin负值 + position: relative

要保证中间栏最先加载,那就要把middle容器写在前面

1

2

3

4

5

6

7

<body>

  <div class="container">

    <div class="middle">middle</div>

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

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

  </div>

</body>

给父容器添加`padding:0 200px,腾开位置

middle中间容器设置width:100%,此时的宽度继承了父容器的100%

并给三个子容器都设置float: left,都向左浮动,去到同一行

页面效果:第一行位置放不下,左右两个容器被挤到了第二行,按道理来说它们应该是在第一行两块红色区域位置的

给左右容器相对定位,让它们相对自己原本文档流的位置进行定位

1

2

3

4

5

6

7

.left{

      width: 200px;

      background: #76d1ea;

      position: relative;

      margin-left: -100%; //向左挪动父容器宽度的100%

      left: -200px;  //再向左挪动自身的200宽度

    }

此时right接替了left原本的位置,同理,这时候只需要给right设置:margin-right: -200px; ,就可以实现三栏布局了

有一个问题就是:

  • 有一个最小宽度,当页面小于最小宽度时布局就会乱掉
  • 由于设置了相对定位,所以当left原来的位置和right的位置产生重叠时,由于浮动的原因一行放不下就会换行
  • 所以布局就被打乱了,使用双飞翼布局就可以避免这个问题

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

34

35

36

<style>

    *{

        margin: 0;

        padding: 0;

    }

    .container{

        height: 100px;

        padding: 0 200px;

    }

    .middle, .left, .right{

        height: 100%;

        float: left;

    }

    .middle{

        width: 100%;

        background: gray;

    }

    .left{

        width: 200px;

        background: #76d1ea;

        position: relative;

        margin-left: -100%;

        left: -200px;

    }

    .right{

        width: 200px;

        background: #76d1ea;

        position: relative;

        margin-right: -200px;

    }

</style>

<div class="container">

    <div class="middle">middle</div>

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

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

</div>

2.4 双飞翼布局

先把HTML结构稍微改造一下,在middle容器里面多用了个inner容器

1

2

3

4

5

6

7

<div class="container">

    <div class="middle">

        <div class="inner">middle</div>

    </div>

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

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

</div>

已经设置了middle的width:100%,这时候我们只需要设置inner容器为padding:0 200px,我们要的效果同样是把左右两个容器摆放到对应的红框位置

left、middle、right同样使用浮动

left设置margin-left:-100%(父容器的整个宽度)

right设置margin-left:-200px

这样便实现了三栏布局的效果,连定位都不使用,且当页面过小时,布局不会乱

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

34

35

36

37

38

<style>

    *{

        margin: 0;

        padding: 0;

    }

    .container{

        height: 100px;

    }

    .middle, .left, .right{

        float: left;

        height: 100%;

    }

    .middle{

        width: 100%;

        background: gray;

    }

    .inner{

        height: 100%;

        padding: 0 200px;

    }

    .left{

        width: 200px;

        background: pink;

        margin-left: -100%;

    }

    .right{

        width: 200px;

        background: pink;

        margin-left: -200px;

    }

</style>

<div class="container">

  <div class="middle">

    <div class="inner">middle</div>

  </div>

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

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

</div>

两个布局结构上不同:

相同:让三列浮动,通过负外边距形成三列布局

不同:在于如何处理中间主列的位置

圣杯布局:利用父容器的左、右内边距 + 两个列的相对定位

双飞翼布局:把主列嵌套在一个新的父级块中,并利用主列的左、右外边距进行布局调整


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • html table+css实现可编辑表格的代码

    html table+css实现可编辑表格的代码
    要实现可编辑的 HTML 表格,你可以使用 JavaScript 和 HTML5 的 contenteditable 属性。 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
  • CSS实现三栏布局的四种方法介绍

    CSS实现三栏布局的四种方法介绍
    1. 什么是三栏布局 常见的一种页面布局方式,将页面分为左栏、中栏和右栏 左右两侧的盒子宽度固定,中间的盒子会随屏幕自适应 一般中
  • CSS中隐藏元素的常见5种方法总结

    CSS中隐藏元素的常见5种方法总结
    在CSS中隐藏元素有多种方法,下面列出几种常见方法及其适用场景与区别: 1. display: none 1 2 3 .element-to-hide { display: none; } 适用场景:完全隐
  • CSS设置style属性的3种方法介绍

    CSS设置style属性的3种方法介绍
    可以将css样式编写到元素的style属性当中: 1.将样式直接写到style属性中,这种样式我们称为内联样式,内联样式只对当前的元素中的内容起
  • 使用CSS实现简单的翻页效果的代码

    使用CSS实现简单的翻页效果的代码
    我们先来看一下翻页的过程动图,如下: 观察动图,大致将此翻页过程分为三个状态,书页未翻开、书页翻动中、书页翻动完成,对应的是
  • 使用CSS实现有趣的汉堡菜单按钮的代码

    使用CSS实现有趣的汉堡菜单按钮的代码
    使用transition过渡属性和transform变形属性,让汉堡图标和关闭图标之间进行过渡、变形,形成视觉效果。 适用于h5页面或者app页面中,隐藏菜
  • CSS实现菜单箭头动画效果

    CSS实现菜单箭头动画效果
    其实是很简单的一个效果 思路:箭头图标相对li标签绝对定位,定位到列表之外+列表元素overflow:hidden +悬停动画 html 1 2 3 li class=listyle1 im
  • CSS实现剪切蒙版视差滚动效果

    CSS实现剪切蒙版视差滚动效果
    大家应该都知道响应式吧,像什么响应式布局等等,这都是我们在开发中经常能遇到的。在年前结束的一个公司项目中,涉及到了相关响应
  • CSS实现好看的聚光灯效果介绍

    CSS实现好看的聚光灯效果介绍
    使用-webkit-background-clip和clip-path,并配合animation属性,实现一个好看聚光灯效果。 可适用于页面加载或展示页面大标题内容。 核心代码部分
  • CSS合并单元格四种方式示例介绍(table/display/flex

    CSS合并单元格四种方式示例介绍(table/display/flex
    效果图: 方式一:table【最简单写法】 colspan:规定单元格可横跨的列数。 rowspan:规定单元格可横跨的行数。 通过table的colspan和rowspan轻松
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计