标签 : 前端
本文主要对 CSS 布局中常见的经典问题进行简单说明,并提供相关解决方案的参考链接,涉及到三栏式布局,负 margin,清除浮动,居中布局,响应式设计,Flexbox 布局,等等。
下面几个入门教程不错:
主要就是经典的绝对定位,相对定位问题。
涉及浮动和清除浮动,主要讲解“圣杯”和“双飞翼”两种解决方法。这两种方法实现的都是三栏布局,两边的盒子宽度固定,中间盒子自适应,它们实现的效果是一样的,差别在于其实现的思想。
圣杯:父盒子包含三个子盒子(左,中,右)
width: 100%;
独占一行;margin-left
)把左右两边的盒子都拉上去和中间盒子同一行; .left {margin-left:-100%;}
把左边的盒子拉上去.right {margin-left:-右边盒子宽度px;}
把右边的盒子拉上去
<div class="container">
<div class="middle">中间弹性区div>
<div class="left">左边栏div>
<div class="right">右边栏div>
div>
双飞翼:父盒子包含三个子盒子(左,中,右),中间的子盒子里再加一个子盒子。
width: 100%;
独占一行;margin-left
)把左右两边的盒子都拉上去和中间盒子同一行; margin-left
和 margin-right
来为左右盒子留位置;
<div class="container">
<div class="middle">
<div class="middle-inner">中间弹性区div>
div>
<div class="left">左边栏div>
<div class="right">右边栏div>
div>
圣杯布局和双飞翼布局解决的问题是一样的,都是两边定宽,中间自适应的三栏布局,中间栏要在放在文档流前面以优先渲染。
简单说起来就是双飞翼布局比圣杯布局多创建了一个 div,但不用相对布局了,少设置几个属性。
我自己使用浮动也实现了三栏式布局:左边盒子左浮动,右边盒子右浮动,中间盒子利用 margin-left
和 margin-right
来为左右盒子留位置,同时父盒子设置 overflow: auto;
来避免子盒子溢出。
<div class="container">
<div class="left">左边栏div>
<div class="right">右边栏div>
<div class="middle">中间弹性区div>
div>
三栏式布局参考下面几个链接:
三栏式布局涉及到负 magin 和 清除浮动的问题。
这里引出了“负 margin”的问题:
简单总结几点:
width: auto
的时候,负 margin 会增加元素的宽度.清除浮动主要是为了解决高度塌陷问题。而简单的 clear: both
并不能解决这个问题,所以引出了许多解决方案。
各种解决方案在上面的链接里有很详细的说明了,这里就不赘述了。大体分为两类:
- 其一,通过在浮动元素的末尾添加一个空元素,设置
clear: both
属性,after 伪元素其实也是通过 content 在元素的后面生成了内容为一个点的块级元素;- 其二,通过设置父元素
overflow
或者display: table
属性来闭合浮动
顺便补充一句,clear float(例如 clear: left
) 是对某个元素设置,以避免其某一边有浮动元素,即对当前元素产生约束,约束的边界为其他的浮动元素。对于已经浮动的元素,设置 clear float 是无效的。
文章大致结构:
text-align: center;
marigin-left
和 margin-right
是设成 autotext-align: center;
,对子元素设置 display: inline-block;
;或者使用 flex 布局line-height
和 height
相等display: table-cell;
和 vertical-align: middle;
;或者使用 flex 布局;或者使用伪元素top: 50%;
,再用负的 margin-top
把子元素往上拉一半的高度position: absolute; top: 50%; transform: translateY(-50%);
justify-content: center;
top: 50%; left: 50%;
,再用和宽高的一半相等的负 margin 把子元素回拉top: 50%; left: 50%;
,再设置 transform: translate(-50%, -50%);
justify-content: center; align-items: center;
“响应式设计(Responsive Design)” 是一种让网站针对不同的浏览器和设备“呈现”不同显示效果的策略。
媒体查询(Media Queries)是做此事所需的最强大的工具。
注: Responsive Web Design = RWD,Adaptive Web Design = AWD
RWD:
(为小、中、大屏幕做一些优化,目的是让任何尺寸的屏幕空间都能得到充分利用)
AWD:
以上 RWD 和 AWD 解释引自 知乎 @屹峰
可以参考 Bootstrap 的网格系统:http://getbootstrap.com/css/#grid-less
The Bootstrap 3 grid system has four tiers of classes: xs (phones), sm (tablets), md (desktops), and lg (larger desktops).
自己实现网格系统: Creating Your Own CSS Grid System
Flexbox 布局参考下面几篇文章就可以了,几篇文章大同小异,看一两篇就知道大概了,讲的挺详细的,在此不赘述
作者@brianway更多文章:个人网站
|
CSDN|
oschina