鱼C论坛

 找回密码
 立即注册
查看: 1952|回复: 17

[奇技淫巧] 5大不传CSS“三栏布局”心法

[复制链接]
发表于 2020-5-28 15:11:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2020-5-28 18:02 编辑

之前陆续有写过:

Snip20200528_29.png


本讲是升华,不废话,直接上知识点。

要想实现三栏布局(左右固定宽,中间自适应),最常用的就是如下方法:

  • float+margin
  • position(绝对布局)
  • flex(弹性盒子布局)
  • table(表格布局)
  • Grid(网格布局)

咱们官方的课程暂时还没更到这些,B 站有翻译视频,大家可以按需学习:



进入正题。

基础代码:

游客,如果您要查看本帖隐藏内容请回复

后续只会添加元素和 CSS 样式。


float+margin

html:
<div class="container">
        <div class="left">Left</div>
        <!-- 右栏部分要写在中间内容之前 -->
        <div class="right">Right</div>
        <div class="main">Main</div>
    </div>
样式:
 body,
        html,
        .containerl {
            height: 100%;
            padding: 0;
            margin: 0;
        }
        /*左边栏左浮动*/
        
        .left {
            color: azure;
            float: left;
            height: 100%;
            width: 200px;
            background: #333;
        }
        /*中间栏自适应*/
        
        .main {
            height: 100%;
            margin: 0 200px;
            background: red;
        }
        /*右边栏右浮动*/
        
        .right {
            color: azure;
            float: right;
            height: 100%;
            width: 200px;
            background: #333;
        }
效果:

Snip20200528_31.png


优点:

快捷、简单、兼容性较好


缺点:
有局限性、脱离文档流、需要清除浮动


position(绝对布局)

html:
 <div class="container">
        <div class="left">Left</div>
        <div class="main">Main</div>
        <div class="right">Right</div>
    </div>
样式:
body,
        html,
        .container {
            height: 100%;
            padding: 0;
            margin: 0;
            overflow: hidden;
        }
        /*左右进行绝对定位*/
        
        .left,
        .right {
            color: azure;
            position: absolute;
            height: 100%;
            top: 0;
            background: #333;
        }
        
        .left {
            left: 0;
            width: 200px;
        }
        
        .right {
            right: 0;
            width: 200px;
        }
        /*中间用margin空出左右元素所占的空间*/
        
        .main {
            height: 100%;
            margin: 0 200px;
            background: red;
        }
        /*或者中间也进行绝对定位*/
        
        .main {
            position: absolute;
            height: 100%;
            left: 200px;
            right: 200px;
            background: red;
        }
样式:

Snip20200528_32.png


优点:

简单粗暴

缺点:

脱离文档流、高度未知会出现问题、可用性差


flex(弹性盒子布局)

html:
<div class="container">
        <div class="left">Left</div>
        <div class="main">Main</div>
        <div class="right">Right</div>
    </div>
样式:
body,
        html {
            height: 100%;
            padding: 0;
            margin: 0;
            overflow: hidden;
        }
        
        .container {
            display: table;
            width: 100%;
        }
        
        .container>div {
            display: table-cell;
        }
        
        .left {
            color: azure;
            width: 200px;
            background: red;
        }
        
        .main {
            background: blue;
        }
        
        .right {
            color: azure;
            width: 200px;
            background: red;
        }
效果:

Snip20200528_33.png


优点:

兼容性很好(ie8 及以上)、父元素高度会被子元素撑开、不担心高度塌陷

缺点:

seo 不友好、当其中一个单元格高度超出的时候,其他的单元格也是会跟着一起变高的


Grid(网格布局)
<div class="container">
        <div class="left">Left</div>
        <div class="main">Main</div>
        <div class="right">Right</div>
    </div>
样式:
body,
        html {
            height: 100%;
            padding: 0;
            margin: 0;
            overflow: hidden;
        }
        
        .container {
            display: grid;
            width: 100%;
            grid-template-rows: 100px;
            /*设置行高*/
            grid-template-columns: 200px auto 200px;
            /*设置列数属性*/
        }
        
        .left {
            color: azure;
            background: red;
        }
        
        .main {
            background: blue;
        }
        
        .right {
            color: azure;
            background: red;
        }
效果:

Snip20200528_34.png


优点:

简单强大、解决二维布局问题

缺点:

不兼容 ie9 及以下





如果喜欢,别忘了评分


                               
登录/注册后可看大图


这位鱼油,如果喜欢本系列HTML帖子,请订阅 专辑&#9758;传送门)(不喜欢更要订阅
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-6 10:32:04 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-12 11:14:02 | 显示全部楼层
迷途的羔羊来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-12 12:41:31 From FishC Mobile | 显示全部楼层
来啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-14 09:24:16 From FishC Mobile | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-22 19:38:00 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-8 20:02:28 | 显示全部楼层
                       
                       
                       
                       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-29 13:14:54 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-30 14:18:59 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-9 09:24:09 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-6 15:23:13 | 显示全部楼层
学习中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-7 19:54:20 | 显示全部楼层
nnn
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-24 18:15:01 | 显示全部楼层
helloworld

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-29 17:34:10 | 显示全部楼层
.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-20 14:12:20 | 显示全部楼层
来学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2021-6-10 14:36:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-15 22:19:38 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-16 16:58:52 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 23:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表