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. ...
随机推荐
- Spring框架介绍及使用(转载)
原文链接 Spring框架—控制反转(IOC) 1 Spring框架概述1.1 什么是SpringSpring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod ...
- 移动端适配,h5网页,手机端适配兼容方案.可以显示真实的1px边框和12px字体大小,dpr浅析
以前写移动端都是用这段JS解决. (function (doc, win) { // 分辨率Resolution适配 var docEl = doc.documentElement, resizeEv ...
- 【Offer】[13] 【机器人的运动范围】
题目描述 思路分析 Java代码 代码链接 题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和 ...
- 阿里短信封装SDK TP3.2
1.阿里短信接口需要企业认证: 2.短信需要短信模板 <?php /** * 阿里云短信验证码发送类 * @param string $accessKeyId key * @param stri ...
- ECMAScript es6新功能讲解视频教程
下载链接:https://www.yinxiangit.com/1.html 目录: 01.课程介绍-ECMAScript 新功能.mp402.块的作用域-let.mp403.恒量-const.mp4 ...
- FreeSql (十二)更新数据时指定列
var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" + "Initia ...
- HTML5有哪些新特性,移除了哪些元素?如何处理HTML5新标签的浏览器兼容性问题?如何区分HTML和HTML5?
HTML5现在已经不是SGML的子集,主要是关于图像,位置,存储,多任务等功能的增加. 绘画canvas: 用于媒介回放的video和audio元素: 本地离线存储localStorage长期存储数据 ...
- java8中字符串常量以及GC相应处理机制
目录 1,常量池 1.1, class文件常量池 1.2, 运行时常量池 1.3,字符串常量池 String.intern() -XX:StringTableSize 2,使用new关键字和使用字符串 ...
- CODESYS添加target
1.主界面进入Tools 2.Install,选择安装包
- CTC安装及其错误解决办法:binding.cpp:92:49: error: cannot convert ‘THCudaTensor*’ to ‘const THFloatTensor*’ for argument ‘1’ to ‘int64_t THFloatTensor_size(const THFloatTensor*, int)’
CTC安装: 1. 在终端执行命令:git clone https://github.com/SeanNaren/warp-c) (效果如下图,大家不用管我前面括号的内容,那是我打开的虚拟环境) 2. ...