CSS技巧 (2) · 多列等高布局
前言
最近,面试的时候都碰到一些关于利用CSS实现多列等高布局或者一侧宽度固定,另一侧宽度自适应的问题,下面稍微总结一下:
先看一道题目
巧妙的多列等高布局
规定下面的布局,实现多列等高布局,要求两列背景色等高。
<div class="container">
<div class="left">多列等高布局左<br/>多列等高布局左</div>
<div class="right">多列等高布局右</div>
</div>
方法一:使用flex布局
<div class="container">
<div class="left">多列等高布局左<br/>多列等高布局左</div>
<div class="right">多列等高布局右</div>
</div>
.container{
display:flex;
}
.left,.right{
flex:;
}
.left{
background:pink;
}
.right{
background:green;
}
缺点: IE9及IE9以下版本不支持flex属性
优点:实现方便,还可以方便实现各种比例
方法二:给容器div使用单独的背景色(流体布局)
原理就是给每一列添加相对应用的容器,并进行相互嵌套,并在每个容器中设置背景色。这里需要提醒大家你有多少列就需要多少个容器,比如说我们说的三列,那么你就需要使用三个容器。如下所示:
<div id="container2">
<div id="container1">
<div id="col1">Column 1</div>
<div id="col2">Column 2;Column 2;Column 2;Column 2;Column 2</div>
</div>
</div>
// 在这里有两列,故需要两个容器
#container2 {
float: left;
width: 100%;
background: orange;
position: relative;
overflow: hidden;
} #container1 {
float: left;
width: 100%;
background: green;
position: relative;
right: 30%;/* 距离是第二列的宽度,加上2%的padding */
} #col1 {
width: 66%;
float: left;
position: relative;
left: 32%;/* container1容器right:30%;加上内边距2%,故为32%; */
} #col2 {
width: 26%;
float: left;
position: relative;
left: 36%;/* 加上三个内边距,所以是 36%;*/
}
优点:兼容各种浏览器
缺点:嵌套太多div元素
两列等高布局,请戳 Demo ;三列等高布局 ,请戳Demo;
方法三:使用内外边距相抵消,注意父元素设置 "overflow:hidden;"
<div id="container">
<div id="left" class="column aside">
<p>Sidebar</p>
</div>
<div id="content" class="column section">
<p>Main content;content;content;content;content</p>
</div>
<div id="right" class="column aside">
<p>Sidebar</p>
</div>
</div>
#container {
margin: 0 auto;
overflow: hidden;
width: 960px;
}
.column {
background: #ccc;
float: left;
width: 200px;
margin-right: 5px;
margin-bottom: -99999px;
padding-bottom: 99999px;
}
#content {
background: #eee;
}
#right {
float: right;
margin-right:;
}
优点:兼容所有浏览器
戳 Demo
方法四:边框模仿等高列
<div id="containerOuter">
<div id="container">
<div id="content">;Main Content;Main Content;Main Content;Main Content;Main Content;Main Content;Main Content</div>
<div id="left">Left Sidebar</div>
<div id="right">Right Sidebar</div>
</div>
</div>
#containerOuter {
margin: 0 auto;
width: 960px;
}
#container {
background-color: #0ff;
float: left;
width: 520px;
border-left: 220px solid #0f0;
/* 边框大小等于左边栏宽度,颜色和左边栏背景色一致*/
border-right: 220px solid #f00;
/* 边框大小等于右边栏宽度,颜色和右边栏背景色一致*/
}
#left {
float: left;
width: 200px;
margin-left: -220px;
padding:10px;
position: relative;
/* 测试 */
border:1px solid;
}
#content {
float: left;
width: 500px;
padding:10px;
margin-right: -520px;
}
#right {
float: right;
width: 200px;
padding:10px;
margin-right: -220px;
position: relative;
}
戳 Demo
小结:实现的方式还有很多~今天暂时总结这些~~日后再继续添加
CSS技巧 (2) · 多列等高布局的更多相关文章
- 纯css实现div三列等高布局的最简单方法简化版/也可以多列
使用正padding和负margin对冲实现多列布局方法 这种方法很简单,就是在所有列中使用正的上.下padding和负的上.下margin,并在所有列外面加上一个容器,并设置overflow:hid ...
- css设置多列等高布局
初始时,多个列内容大小不同,高度不同.现在需要设置不同的背景来显示,而且各个列的高度需要保持一致.那么这就需要利用到多列等高布局. 最终需要的效果: 1. 真实等高布局 flex 技术点:弹性盒子布局 ...
- CSS3中flexbox如何实现水平垂直居中和三列等高布局
最近这些天都在弥补css以及css3的基础知识,在打开网页的时候,发现了火狐默认首页上有这样一个东西.
- css两列等高布局
布局方案 等高布局有几种不同的方法,但目前为止我认为浏览器兼容最好最简便的应该是padding补偿法.首先把列的padding-bottom设为一个足够大的值,再把列的margin-bottom设一个 ...
- 正padding负margin实现多列等高布局(转)
转自: 巧妙运用CSS中的负值 (http://www.webhek.com/post/2345qwerqwer.html) 代码来自: https://codepen.io/Chokcoco/pen ...
- css奇技淫巧之—多列等高
什么是等高布局? 先来看一个案例: 上图中的页面的主体内容是两列结构,左列是用来导航的,右列是用来显示内容的.我们看到它们有一个共同的边框,中间还有一条分隔线,左右两列的高度都是不固定的.这种情况下就 ...
- 两列等高布局 padding+margin的负值 CSS布局奇淫技巧之-多列等高
代码: 效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/ ...
- 前端应该掌握的CSS实现多列等高布局
1.引言 我们在写页面的时候,有的时候会遇到多栏布局,每个栏目里面的内容有的时候可能不一样,这样就会导致每个栏目实际的高度也是不一样的,如果每个栏目有背景颜色的,就会导致每个栏目的底部是对不齐的,用户 ...
- 实现多列等高布局_flex布局
详情参见此篇博客 http://www.w3cplus.com/css/creaet-equal-height-columns 建议掌握方法四.五 其实,利用最新的flex布局 http://www. ...
随机推荐
- Windows平台python验证码识别
参考: http://oatest.dragonbravo.com/Authenticate/SignIn?returnUrl=%2f http://drops.wooyun.org/tips/631 ...
- 2019年牛客多校第一场 B题 Integration 数学
题目链接 传送门 思路 首先我们对\(\int_{0}^{\infty}\frac{1}{\prod\limits_{i=1}^{n}(a_i^2+x^2)}dx\)进行裂项相消: \[ \begin ...
- UOJ 34 多项式乘法 FFT 模板
这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 nn 和 mm,分别表示两个多项式的次数. 第二行 n+1n+1 个整数,表示第一个多项式的 00 到 nn 次项 ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 hdu 6440 Dream 模拟
Dream Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- Codeforces Round #391 C. Felicity is Coming!
题目链接 http://codeforces.com/contest/757/problem/C 题意:给你n组数范围在1-m,可进行变换f(x)=y,就是将所有的x全变成y,最后 要满足变化后每组数 ...
- 为什么医疗行业需要API市场?
医疗健康行业无论在国内外都是采用先进技术的先驱者之一,原因在于业内的利益相关者会更加接近数据.重视数据的重要性,从而加快在决策上面的动作,以期更好的患者的预期寿命和增进社会人口的健康.更重要的是,数据 ...
- Flink文章测试
Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 Flink文章测试 ...
- Oracle sqlldr 在DOS窗口导入多列数据到数据库表
sqlldr 用法详见:https://www.cnblogs.com/rootq/archive/2009/03/01/1401061.html 测试内容: 1.创建数据库表: create tab ...
- Angular 使用教程
1.下载node.js,然后一直安装,可以修改一下node.js文件安装路径 查看是否node.js安装成功,在运行——cmd中输入以下代码.如果安装成功,则会显示出node.js的版本号 node ...
- lambda表达式不同对象根据对象某个属性去重
1.有时候有两个list对象,我们想要去重,比如: List<User> userList和List<Person>personList 想通过User的id和Person的i ...