两列布局(一侧固定宽度,一侧自适应),在工作中应该是经常使用到,可以说是前端基础了。这种两列布局的样式是我们在平时工作中非常常见的设计,同时也是面试中要求实现的高频题。很有必要掌握以备不时之需。这里总结了几种布局方式,欢迎大家补充。

absolute + margin 方式

<div class="container">
<div class="sidebar">固定</div>
<div class="main">自适应</div>
</div>
.container {
position: relative;
}
.sidebar {
position: absolute;
top: 0;
left: 0;
height: 300px;
width: 200px;
background: #67c23a;
}
.main {
margin-left: 200px;
height: 300px;
background: #e6a23c;
}

修改 css 就可实现 位置调换,如下:

.sidebar {
right: 0;
/* ... */
}
.main {
margin-right: 200px;
/* ... */
}

优点: 交换<div class="sidebar">固定</div><div class="main">自适应</div>顺序 ,实现主要内容优先加载渲染。

缺点:absolute 定位,脱离文档流,当 sidebar 列的高度,超过 main 列的高度,会遮住下面的元素。需要给父盒子设置 overflow 属性。

float + margin 方式

<div class="container">
<div class="sidebar">固定</div>
<div class="main">自适应</div>
</div>
.sidebar {
float: left;
top: 0;
right: 0;
height: 300px;
width: 200px;
background: #67c23a;
}
.main {
margin-left: 200px;
height: 300px;
background: #e6a23c;
}

也支持位置调换:

.sidebar {
float: right;
/* ... */
}
.main {
margin-right: 200px;
/* ... */
}

缺点:不能实现主要内容优先加载渲染。

float + 负margin 方式

<div class="wrap">
<div class="main">自适应</div>
</div>
<div class="sidebar">固定</div>
.wrap {
float: left;
width: 100%;
}
.main {
margin-left: 200px;
height: 300px;
background: #e6a23c;
}
.sidebar {
float: left;
margin-left: -100%;
height: 300px;
width: 200px;
background: #67c23a;
}

位置调换:

.main {
margin-right: 200px;
/* ... */
}
.sidebar {
float: right;
margin-left: -200px;
/* ... */
}

flex 方式

<div class="container">
<div class="main">自适应</div>
<div class="sidebar">固定</div>
</div>
.container {
display: flex;
}
.main {
flex: 1;
height: 300px;
background: #e6a23c;
}
.sidebar {
flex: none;
/* height: 300px; */
width: 200px;
background: #67c23a;
}

这里有一点需要注意:.sidebar没有设置高度,会和.container保持一样的高度。.container的高度是被.main撑开的,也就是和.main高度一样。

位置调换:

.container {
display: flex;
flex-direction: row-reverse;
}

grid 方式

<div class="container">
<div class="main">自适应</div>
<div class="sidebar">固定</div>
</div>
.container {
display: grid;
grid-template-columns: auto 200px;
grid-template-rows: 300px;
}
.main {
background: #e6a23c;
}
.sidebar {
background: #67c23a;
}

这里.main.sidebar高度不单独设置的话,也是同样的高度。

位置调换:

.container {
display: grid;
grid-template-columns: 200px auto;
grid-template-rows: 300px;
grid-template-areas: 'a b';
}
.main {
grid-area: b;
background: #e6a23c;
}
.sidebar {
grid-area: a;
background: #67c23a;
}

float + BFC 方式

<div class="container">
<div class="sidebar">固定</div>
<div class="main">自适应</div>
</div>
.sidebar {
float: left;
width: 200px;
height: 300px;
background: #67c23a;
}
.main {
overflow: hidden;
height: 300px;
background: #e6a23c;
}

位置调换:

.sidebar {
float: right;
/* ... */
}

这里让.main成为BFC主要是消除.sidebarfloat带来的影响,只要能让.main成为BFC就行。

此外留给大家一个思考题,还有没有其他方式呢?

CSS两列布局的多种方式的更多相关文章

  1. css两列布局,一边固定宽度,另一边自适应

    <!DOCTYPE HTML><HTML>    <head>                <meta charset="utf-8" ...

  2. CSS两列布局——左侧宽度固定,右侧宽度自适应的3种方法

    1.左侧绝对定位法 直接看代码: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  3. css两列布局之基于BFC规则实现

    css要实现常见的自适应两列布局的方式方法挺多. 这里讲的是利用设置overflow不为visible时会形成新的BFC来实现.至于什么是BFC,可以搜搜看先,基本都讲的差不多了.等有更多空余时间,专 ...

  4. CSS两列布局的N种实现

    一.什么是两列布局 两列布局分为两种,一种是左侧定宽.右侧自适应,另一种是两列都自适应(即左侧宽度由子元素决定,右侧补齐剩余空间).在CSS面试题里面属于常考题,也是一个前端开发工程师必须掌握的技能, ...

  5. css 两列布局中单列定宽单列自适应布局的6种思路

    前面的话 说起自适应布局方式,单列定宽单列自适应布局是最基本的布局形式.本文将从float.inline-block.table.absolute.flex和grid这六种思路来详细说明如何巧妙地实现 ...

  6. CSS 两列布局 之 左侧适应,右侧固定 3种方式

    第一种:左侧用margin-right,右侧float:right CSS代码: html, body,ul,li #wrapper { width: 100%; height: 100%; padd ...

  7. CSS两列布局

    方法1:左边设置绝对定位,右边设置左外边距,大小和左边的宽度相等 //CSS部分: .contain{ position :relative; height: 300px; } .left{ posi ...

  8. css 两列自适应布局的4种思路

    前面的话 前面已经介绍过css 两列布局中单列定宽单列自适应布局的6种思路的两列布局,而两列自适应布局是指一列由内容撑开,另一列撑满剩余宽度的布局方式.本文将从float.table.flex和gri ...

  9. css两列自适应布局的多种实现方式及原理。

    两列布局是非常常见的需求在实际项目中,实现的方式也有很多.究其原理也都不算复杂.这里主要提出几种实现方式和原理. html页面基本布局如下代码所示: 1 <div class="mai ...

随机推荐

  1. matplotlib画图教程,设置坐标轴标签和间距

    大家好,欢迎来到周四数据处理专题,我们今天继续matplotlib作图教程. 在上周的文章当中我们介绍了如何通过xlabel和ylabel设置坐标轴的名称,以及这两个函数的花式设置方法,可以设置出各种 ...

  2. java字符流与字节流的区别是什么

    java中字符流与字节流的区别: 1.字节流操作的基本单元为字节:字符流操作的基本单元为Unicode码元. 2.字节流默认不使用缓冲区:字符流使用缓冲区. 3.字节流通常用于处理二进制数据,实际上它 ...

  3. JSON,数组根据字段多次分组

    我们在前端开发过程中,遇到json对象,有时会需要多次分组.比如说,先按照是业务分组,然后再按照产品线分组,然后通过table或其他方式展示或操作 var obj1=[ { "demp&qu ...

  4. 【组合计数】visit

    题目大意 从 \((0,0)\) 开始,每次只可走上下左右一个单位长度,可走重复路,求第 \(T\) 步正好走到 \((n,m)\) 的方案数. 答案要求对 \(MOD\) 取模,\(MOD\) 保证 ...

  5. 【不知道怎么分类】NOIP2016 蚯蚓

    题目大意 洛谷链接 给出\(n\)条蚯蚓,给出\(m\)秒,每一秒都把蚯蚓中最长的蚯蚓分成两段,一段是原来的\(p\)倍,剩下的就是\((1-p)\)倍.每一秒,除了刚刚产生的两条新蚯蚓,其余蚯蚓长度 ...

  6. centos7 shell 安装docker redis mongodb 等

    脚本下载: 百度网盘 提取码: wc4r 下载后上传到 服务器 chmod +x docker.sh sh docker.sh

  7. ansible用get_url模块在受控机下载文件(ansible2.9.5)

    一,ansible的get_url模块用途: get_url模块可以在受控机下载文件 可以理解成从受控端执行wget 下载的url支持:http | https | ftp   三种协议 说明:刘宏缔 ...

  8. request-html 使用

    from requests_html import HTMLSessionsession = HTMLSession()resp = session.get('http://www.spbeen.co ...

  9. 基于risc-v架构cpu

    一.定义:    CPU ,全称为中央处理器单元,简称为处理器,是一个不算年轻的概念 早在 20 世纪60 年代便己诞生了第一款 CPU请注意区分"处理器"和"处理器核& ...

  10. docker 启动容器restart 策略

    docker 运行容器时使用--restart 参数可以指定一个restart策略,来指定容器应该如何重启,或不应该重启,当容器启用restart策略时,将会载docker ps 显示up 或者res ...