「前端那些事儿」③ CSS 布局方案

栏目: CSS · 发布时间: 5年前

内容简介:我们在日常开发中经常遇到布局问题,下面罗列几种常用的css布局方案 话不多说,上代码!以下居中布局均以不定宽为前提,定宽情况包含其中tips:此方案兼容性较好,可兼容至IE8,对于IE567并不支持inline-block,需要使用css hack进行兼容

我们在日常开发中经常遇到布局问题,下面罗列几种常用的css布局方案 话不多说,上代码!

居中布局

以下居中布局均以不定宽为前提,定宽情况包含其中

1、水平居中

「前端那些事儿」③ CSS 布局方案

a) inline-block + text-align

.parent{
    text-align: center;
}
.child{
    display: inline-block;
}
复制代码

tips:此方案兼容性较好,可兼容至IE8,对于IE567并不支持inline-block,需要使用css hack进行兼容

b) table + margin

.child{
    display: table;
    margin: 0 auto;
}
复制代码

tips:此方案兼容至IE8,可以使用 <table/> 代替css写法,兼容性良好

c) absolute + transform

.parent{
    position: relative;
    height:1.5em;
}
.child{
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
}
复制代码

tips:此方案兼容至IE9,因为transform兼容性限制,如果 .child 为定宽元素,可以使用以下写法,兼容性极佳

.parent{
    position: relative;
    height:1.5em;
}
.child{
    position: absolute;
    width:100px;
    left: 50%;
    margin-left:-50px;
}
复制代码

d) flex + justify-content

.parent{
    display: flex;
    justify-content: center;
}
.child{
    margin: 0 auto;
}
复制代码

tips:flex是一个强大的css,生而为布局,它可以轻松的满足各种居中、对其、平分的布局要求,但由于现浏览器兼容性问题,此方案很少被使用,但是值得期待浏览器兼容性良好但那一天!

2、垂直

「前端那些事儿」③ CSS 布局方案

a) table-cell + vertial-align

.parent{
	display: table-cell;
	vertical-align: middle;
}
复制代码

tips:可替换成 <table /> 布局,兼容性良好

b) absolute + transform

.parent{
	position: relative;
}
.child{
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
}
复制代码

tips:存在css3兼容问题,定宽兼容性良好

c) flex + align-items

.parent{
	display: flex;
	align-items: center;
}
复制代码

tips:高版本浏览器兼容,低版本不适用

3、水平垂直

「前端那些事儿」③ CSS 布局方案

a) inline-block + table-cell + text-align + vertical-align

.parent{
	text-align: center;
	display: table-cell;
	vertical-align: middle;
}
.child{
	display: inline-block;
}
复制代码

tips:兼容至IE8 b) absolute + transform

.parent{
	position: relative;
}
.child{
	position: absolute;
	left: 50%;
	top: 50%;
	transform: translate(-50%,-50%);
}
复制代码

tips:兼容性稍差,兼容IE10以上 c) flex

.parent{
	display: flex;
	justify-content: center;
	align-items: center;
}
复制代码

tips:兼容差

多列布局

1、一列定宽,一列自适应

「前端那些事儿」③ CSS 布局方案

a) float + margin

.left{
	float: left;
	width: 100px;
}
.right{
	margin-left: 120px;
}
复制代码

tips:此方案对于定宽布局比较好,不定宽布局推荐方法b b) float + overflow

.left{
	float: left;
	width: 100px;
	margin-right: 20px;
}
.right{
	overflow: hidden;
}
复制代码

tips:个人常用写法,此方案不管是多列定宽或是不定宽,都可以完美实现,同时可以实现登高布局 c) table

.parent{
	display: table; width: 100%;
	table-layout: fixed;
}
.left,.right{
	display: table-cell;
}
.left{
	width: 100px;
	padding-right: 20px;
}
复制代码

d) flex

.parent{
	display: flex;
}
.left{
	width: 100px;
	padding-right: 20px;
}
.right{
	flex: 1;
}
复制代码

2、多列定宽,一列自适应

「前端那些事儿」③ CSS 布局方案

a) float + overflow

.left,.center{
	float: left;
	width: 100px;
	margin-right: 20px;
}
.right{
	overflow: hidden;
}
复制代码

b) table

.parent{
	display: table; width: 100%;
	table-layout: fixed;
}
.left,.center,.right{
	display: table-cell;
}
.right{
	width: 100px;
	padding-right: 20px;
}
复制代码

c) flex

.parent{
	display: flex;
}
.left,.center{
	width: 100px;
	padding-right: 20px;
}
.right{
	flex: 1;
}
复制代码

3、一列不定宽,一列自适应

「前端那些事儿」③ CSS 布局方案

a) float + overflow

.left{
	float: left;
	margin-right: 20px;
}
.right{
	overflow: hidden;
}
.left p{width: 200px;}
复制代码

b) table

.parent{
	display: table; width: 100%;
}
.left,.right{
	display: table-cell;
}
.left{
	width: 0.1%;
	padding-right: 20px;
}
.left p{width:200px;}
复制代码

c) flex

.parent{
	display: flex;
}
.left{
	margin-right: 20px;
}
.right{
	flex: 1;
}
.left p{width: 200px;}
复制代码

4、多列不定宽,一列自适应

「前端那些事儿」③ CSS 布局方案

a) float + overflow

.left,.center{
	float: left;
	margin-right: 20px;
}
.right{
	overflow: hidden;
}
.left p,.center p{
	width: 100px;
}
复制代码

5、等分

「前端那些事儿」③ CSS 布局方案

a) float + margin

.parent{
	margin-left: -20px;
}
.column{
	float: left;
	width: 25%;
	padding-left: 20px;
	box-sizing: border-box;
}
复制代码

b) table + margin

.parent-fix{
	margin-left: -20px;
}
.parent{
	display: table;
	width:100%;
	table-layout: fixed;
}
.column{
	display: table-cell;
	padding-left: 20px;
}
复制代码

c) flex

.parent{
	display: flex;
}
.column{
	flex: 1;
}
.column+.column{
	margin-left:20px;
}
复制代码

6、等高

「前端那些事儿」③ CSS 布局方案

a) float + overflow

.parent{
	overflow: hidden;
}
.left,.right{
	padding-bottom: 9999px;
	margin-bottom: -9999px;
}
.left{
	float: left; width: 100px;
}
.right{
	overflow: hidden;
}
复制代码

b) table

.parent{
	display: table; 
	width: 100%;
}
.left{
	display:table-cell; 
	width: 100px;
	margin-right: 20px;
}
.right{
	display:table-cell; 
}
复制代码

c) flex

.parent{
	display:flex;
	width: 100%;
}
.left{
	width: 100px;
}
.right{
	flex:1;
}
复制代码

并排等分,单排对齐靠左布局

效果图

「前端那些事儿」③ CSS 布局方案

flex

.main {
    display: flex;
    flex-flow: row wrap;
    justify-content: space-between;
}
.item {
    display: inline-block;
}
.empty{
    height: 0;
    visibility: hidden;
}
复制代码

具体详解请见下文 github.com/zwwill/blog…

圣杯布局&双飞翼布局

此处仅为代码展示,差别讲解请移驾下文 【方案】圣杯布局&双飞翼布局

圣杯布局

「前端那些事儿」③ CSS 布局方案

【demo】 codepen.io/zwwill/pen/…

<div class="container">
    <div class="header">header</div>
    <div class="wrapper clearfix">
        <div class="main col">main</div>
        <div class="left col">left</div>
        <div class="right col">right</div>
    </div>
    <div class="footer">footer</div>
</div>
复制代码
.container {width: 500px; margin: 50px auto;}
.wrapper {padding: 0 100px 0 100px;}
.col {position: relative; float: left;}
.header,.footer {height: 50px;}
.main {width: 100%;height: 200px;}
.left {width: 100px; height: 200px; margin-left: -100%;left: -100px;}
.right {width: 100px; height: 200px; margin-left: -100px; right: -100px;}
.clearfix::after {content: ""; display: block; clear: both; visibility: hidden; height: 0; overflow: hidden;}
复制代码

双飞翼布局

「前端那些事儿」③ CSS 布局方案

ps: “这不是一样的图嘛?” “对!就是一样的,因为是解决同一种问题的嘛。”

【demo】 codepen.io/zwwill/pen/…

<div class="container">
    <div class="header">header</div>
    <div class="wrapper clearfix">
        <div class="main col">
            <div class="main-wrap">main</div>
        </div>
        <div class="left col">left</div>
        <div class="right col">right</div>
    </div>
    <div class="footer">footer</div>
</div>
复制代码
.col {float: left;}
.header {height: 50px;}
.main {width: 100%;}
.main-wrap {margin: 0 100px 0 100px;height: 200px;}
.left {width: 100px; height: 200px; margin-left: -100%;}
.right {width: 100px; height: 200px; margin-left: -100px;}
.footer {height: 50px;}
.clearfix::after {content: ""; display: block; clear: both; visibility: hidden; height: 0; overflow: hidden;}
复制代码

定位布局

简单的绝对定位即可解决问题,为啥还要搞什么圣杯和双飞翼? 原因

<div class="header">header</div>
<div class="wrapper">
    <div class="main col">
        main
    </div>
    <div class="left col">
        left
    </div>
    <div class="right col">
        right
    </div>
</div>
<div class="footer">footer</div>
复制代码
.wrapper { position: relative; }
.main { margin:0 100px;}
.left { position: absolute; left: 0; top: 0;}
.right { position: absolute; right: 0; top: 0;}
复制代码

以上所有demo的源码 github: github.com/zwwill/css-…

转载请标注出处

首发: github.com/zwwill/blog… 作者: 木羽


以上所述就是小编给大家介绍的《「前端那些事儿」③ CSS 布局方案》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Developer's Guide to Social Programming

Developer's Guide to Social Programming

Mark D. Hawker / Addison-Wesley Professional / 2010-8-25 / USD 39.99

In The Developer's Guide to Social Programming, Mark Hawker shows developers how to build applications that integrate with the major social networking sites. Unlike competitive books that focus on a s......一起来看看 《Developer's Guide to Social Programming》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具