CSS 实现左侧固定,右侧自适应两栏布局的方法

摘要:
"左边固定,右边自适应的两栏布局",其中有老生常谈的float方法,BFC方法,也有CSS3的flex布局与grid布局。常用的宽度自适应的方法通常是利用了block水平的元素宽度能随父容器调节的流动特性。另外一种思路是利用CSS中的calc()方法来动态设定宽度。没有清除浮动的方法,若左侧盒子高于右侧盒子,就会超出父容器的高度。同时,还需要知道右侧盒子的宽度是否包含border的宽度。同时,作为两个inline-block的盒子,必须设置vertical-align来使其顶端对齐。

"左边固定,右边自适应的两栏布局",其中有老生常谈的float方法,BFC方法,也有CSS3的flex布局与grid布局。并非所有的布局都会在开发中使用,但是其中也会涉及一些知识点。

常用的宽度自适应的方法通常是利用了block水平的元素宽度能随父容器调节的流动特性。另外一种思路是利用CSS中的calc()方法来动态设定宽度。还有一种思路是,利用CSS3中的新型布局flex layoutgrid layout

效果图:

CSS 实现左侧固定,右侧自适应两栏布局的方法第1张

HTML布局:

<div class="outer">
    <div class="sidebar">固定宽度区(sideBar)</div>
     <div class="content">自适应区(content)</div>
</div>
<div class="footer">footer</div>

常见的方法:

1、将左侧div浮动,右侧div设置margin-left

/*方法1*/.outer{overflow: hidden; border: 1px solid red;}
.sidebar{float: left;200px;height: 150px; background: #BCE8F1;}
.content{margin-left:200px;height:100px;background: #F0AD4E;}

2、固定区采用绝对定位,自适应区设置margin

/*方法2*/.outer2{position: relative;height:150px; border: 1px solid red;}
.sidebar2{position: absolute;left: 0;top:0;200px;height:100%;background: #BCE8F1;}
.content2{margin-left:200px;height:100px;background: #F0AD4E;} 
缺点:
  • 使用了绝对定位,若是用在某个div中,需要更改父容器的position。
  • 没有清除浮动的方法,若左侧盒子高于右侧盒子,就会超出父容器的高度。因此只能通过设置父容器的min-height来放置这种情况。

3、标准浏览器的方法

/*方法3*/.outer3{display: table;100%; border: 1px solid red;}
.sidebar3{display:table-cell;200px;height:150px;background: #BCE8F1;}
.content3{display:table-cell;height:100px;background: #F0AD4E;}

4、双float + calc()计算属性

/*方法4*/.outer4{overflow: hidden; border: 1px solid red;}
.sidebar4{float:left;200px;height:150px;background: #BCE8F1;}
.content4{float:left;calc(100% - 200px);height:100px;background: #F0AD4E;}

5、双inline-block + calc()计算属性

/*方法5*/.outer5{box-sizing: content-box;font-size: 0; border: 1px solid red;}
.sidebar5,.content5{display: inline-block;vertical-align: top;box-sizing: border-box; 200px;
 height:150px; background: #BCE8F1;font-size: 14px;}
.outer5 .content5{calc(100% - 200px);height:100px;background: #F0AD4E;}
这种方法是通过 calc(100% - 140px)来动态计算右侧盒子的宽度。需要知道右侧盒子距离左边的距离,以及左侧盒子具体的
宽度(content+padding+border),以此计算父容器宽度的100%需要减去的数值。同时,还需要知道右侧盒子的宽度是否包含border
的宽度。 在这里,为了简单的计算右侧盒子准确的宽度,设置了子元素的box-sizing:border-box;以及父元素的box-sizing: content-box;。 同时,作为两个inline-block的盒子,必须设置vertical-align来使其顶端对齐。 另外,为了准确地应用计算出来的宽度,需要消除div之间的空格,需要通过设置父容器的font-size: 0;,或者用注释消除html中的空格等方法。
缺点:
  • 需要知道左侧盒子的宽度,两个盒子的距离,还要设置各个元素的box-sizing
  • 需要消除空格字符的影响
  • 需要设置vertical-align: top满足顶端对齐。

6、float + BFC方法

/*方法6*/.outer6{overflow: auto; border: 1px solid red;}
.sidebar6{float: left;height:150px;background: #BCE8F1;}
.content6{overflow:auto;height:100px;background: #F0AD4E;}

这个方案同样是利用了左侧浮动,但是右侧盒子通过overflow: auto;形成了BFC,因此右侧盒子不会与浮动的元素重叠。

7、flex

/*方法7*/.outer7{display: flex; border: 1px solid red;}
.sidebar7{flex:0 0200px;height:150px;background: #BCE8F1;}
.content7{flex: 1;height:100px;background: #F0AD4E;}

flex可以说是最好的方案了,代码少,使用简单。但存在兼容性,有朝一日,大家都改用现代浏览器,就可以使用了。

需要注意的是,flex容器的一个默认属性值:align-items: stretch;。这个属性导致了列等高的效果。
为了让两个盒子高度自动,需要设置:align-items: flex-start;

免责声明:文章转载自《CSS 实现左侧固定,右侧自适应两栏布局的方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用原生 python 造轮子搭建博客netty作为基础通信组件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vw和rem的根字号大小设置CSS代码

html { font-size: 16px; } @media screen and (min-375px) { html { /*iPhone6的375px尺寸作为16px基准,414px正好18px大小, 600 20px */font-size: calc(100% + 2 * (100vw - 375px) /...

webpack4 css添加浏览器前缀 postcss-loader

自动添加浏览器前缀 ,我们这里使用postcss-loader 首先 cnpm install --save-dev postcss-loader autoprefixer 我这里用的cnpm ,npm也可以下载 接下来是配置 在网上查了相关文档发现需要新建一个 postcss.config.js 文件来对 postcss-loader 配置。 第一种配置...

vue中引入第三方字体图标库iconfont,及iconfont引入彩色图标

转载原文:https://www.cnblogs.com/goloving/p/8855794.html iconfont字体图标使用就不多说了,大致是几部: 1、在iconfont官网选图标,加入购物车,加入项目,下载到本地,解压 2、在项目assets目录新建目录iconfont,用于存放刚才下载解压的代码 3、在main.js导入iconfont.c...

Android—简单的仿QQ聊天界面

最近仿照QQ聊天做了一个类似界面,先看下界面组成(画面不太美凑合凑合呗,,,,):     其中聊天背景可以是一个LinearLayout或者RelativeLayout里面存放的是ListView(将ListView的分割线设置成透明:android:divider="#0000"否则聊天界面会显示出分割线,,,想想都屌,,,)    于是,我要上主界...

CSS设置文字方向,让文字竖排显示

只需一条属性 writing-mode:vertical-lr;     这个属性可以设置文字在水平方向还是在竖直方向的排布 菜鸟教程解释是下面这个样子的: horizontal-tb:水平方向自上而下的书写方式。即 left-right-top-bottom vertical-rl:垂直方向自右而左的书写方式。即 top-bottom-right-l...

移动端界面适配

本文引自:http://www.cnblogs.com/xianyulaodi/p/5533201.html  摘要:在进行移动端界面的书写的时候,如果把宽度高度或者字体大小全部写死的话,那么在所有手机上看到的大小都一样,存在的问题就是同样大小的字体,或者一个盒子模型, 在大屏幕手机上看起来会有点偏小。比如iphone6PLUS。如果是做成适配的话,就很好...