CSS实现两栏布局
写在前面
两栏布局是指页面布局由主栏和边栏组成,是许多网页的布局方式,一般使用CSS去实现两栏布局。
实现两栏布局的方式有多种,这里采用四种比较常见的实现方式。主要是流体布局(liquid layouts),凝胶布局(Jello layouts),绝对布局(absolute layouts),表格布局(table layouts)。
所有源码在底部。
流体布局
浏览器显示HTML元素,是从HTML文件最上面开始,从上往下沿元素流显示各个元素,像一个流体一样。
页面布局如下:
<header>页眉.................</header>
<div id="section">
内容开始
<p>段落1...................................</p>
<p>段落2...................................</p>
<p>段落3...................................</p>
<p>超长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长段落</p>
内容结束
</div>
<div id="aside">
<p>段落1...................................</p>
<p>段落1...................................</p>
<p>段落2...................................</p>
<p>段落3...................................</p>
<p>长长长长长长长长长长长长长长长长长长长长长长长长长长长段落</p>
</div>
<footer>
页脚
</footer>
效果如下:

为了实现两栏布局,就要让页面左栏浮动起来
div#section
{
float: left; // 让页面左栏浮动起来
}
如果光让左栏浮动起来,浏览宽度足够的时候显示会正常,宽度不够时,则会遮挡住页脚

这时候就要清除浮动,就能让页脚不被遮挡
footer
{
clear: left; // 清除浮动,clear的值有 left/right/both,分别是清除左/右/两边的浮动
}

冻结布局
流体布局当用户拉长或者缩小浏览器时,页面的内容会随之换行,很多时候这并是不我们想要看到的效果,这时候就要把页面冻结住,使用冻结布局。
冻结布局就是在流体布局的最外层,加一层div,并且指定宽度。
<div id="allcontent"> // 实现冻结布局
<header>页眉.................</header>
<div id="section">
内容开始
<p>段落1...................................</p>
<p>段落2...................................</p>
<p>段落3...................................</p>
<p>超长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长段落</p>
内容结束
</div>
<div id="aside">
<p>段落1...................................</p>
<p>段落1...................................</p>
<p>段落2...................................</p>
<p>段落3...................................</p>
<p>长长长长长长长长长长长长长长长长长长长长长长长长长长长段落</p>
</div>
<footer>
页脚
</footer>
</div>
div#allcontent
{
width: 1200px; // 指定宽度为1200px
}
凝胶布局
当我们使用冻结布局,页面就会停靠在左边,为了使页面居中,就要使用凝胶布局。
凝胶布局就是将页面最外层的div的左外边距和右外边距设置为auto。凝胶布局无论浏览器大小如何变化,页面始终会居中。
div#allcontent
{
width: 1200px;
margin-left: auto;
margin-right: auto;
}
绝对布局
绝对布局就是使用position:absolute对元素进行布局。
position有四个属性,默认就是static,就是不会被定位。absolute使用最近的父元素进行定位。fixed使用视窗进行定位,也就是使用浏览器进行定位。relative使用元素本身在正常位置进行定位。
两栏布局可以使用绝对定位,指定一定的像素,来实现绝对布局,
div#aside
{
position: absolute; // 绝对布局
top: 170px; // 距离父元素顶部边框170px
right: 0px; // 距离父元素右部边框0px
width: 300px; // 指定宽度
}
由于绝对定位是将元素从流中删除,所以更改浏览器大小时,也会出现边框遮挡住页脚的情况。
表格布局
表格布局就是将页面用表格的形式进行布局。使用display:table进行实现。
HTML中也有<table>标签,有的人实现表格布局会使用<table>标签,但是这是不合理的。HTML是超文本标记语言,各个标签都有自己对应的语义,目的是为了结构清晰,所以不应该使用HTML来进行表格布局,而应该使用CSS进行布局的操作。
<header>页眉.................</header>
<div id="tableContainer">
<div id="tableRow">
<div id="section">
内容开始
<p>段落1...................................</p>
<p>段落2...................................</p>
<p>段落3...................................</p>
<p>超长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长段落</p>
内容结束
</div>
<div id="aside">
<p>段落1...................................</p>
<p>段落1...................................</p>
<p>段落2...................................</p>
<p>段落3...................................</p>
<p>长长长长长长长长长长长长长长长长长长长长长长长长长长长段落</p>
</div>
</div>
</div>
<footer>
页脚
</footer>
表格布局需要在最外层的div中使用display:table
div#tableContainer
{
display: table; // 最外层div设置为表格
border-spacing: 10px; // 表格布局没有外边距,border-spacing就是等同于margin
}
div#tableRow
{
display: table-row; // 设置一行,也可以设置多行
}
div#section
{
display: table-cell; // 将div设置为表格中的单元格
background-color: rgb(93, 173, 226);
}
div#aside
{
display: table-cell; // 将div设置为表格中的单元格
background-color: rgb(133, 146, 158);
}
写在最后
实现布局的方式可以有许多种,使用哪一种具体看业务需求,但是两栏布局比较适合使用表格布局,而且,日常使用中,一般不会单独使用一种布局,多种布局同时使用才是常态,才能实现最好的效果。
完整源码链接:https://github.com/yijidao/layouts
CSS实现两栏布局的更多相关文章
- css 关于两栏布局,左边固定,右边自适应
好几个星期都没写博客了,最近不忙也不闲,稀里糊涂过了两个星期,之前几个月内天天坚持签到.最近也没签到.哈哈,说正事. 今天做东钿互金平台后台页面,昨天做了一个登录页面,业偶碰到了一个难题.等下也要把它 ...
- css实现两栏布局,左侧固定宽,右侧自适应的7中方法
一个面试会问的问题,如何实现两个盒子,左侧固定宽度,右侧自适应. 1.利用 calc 计算宽度的方法 css代码如下: .box{overflow: hidden;height: 100px;marg ...
- CSS | 自适应两栏布局方法
html代码: <div class="main"> <div class="left" style="background: #0 ...
- css的两栏布局
经典的实现左边固定宽度,右边宽度自适应的几种方法 利用float和margin-left属性(margin-left的值可以稍稍大于或者等于.left的宽度) .left{ width: 30px; ...
- CSS 实现:两栏布局(一边固定,一边自适应)
☊[实现要求]:CSS实现左边固定,右边自适应父容器宽度的两栏布局. <body> <div class="left"></div> <d ...
- CSS 实现左侧固定,右侧自适应两栏布局的方法
"左边固定,右边自适应的两栏布局",其中有老生常谈的float方法,BFC方法,也有CSS3的flex布局与grid布局.并非所有的布局都会在开发中使用,但是其中也会涉及一些知识点 ...
- css布局 - 工作中常见的两栏布局案例及分析
突然想到要整理这么一篇平时工作中相当常见但是我们又很忽视的布局的多种处理方法.临时就在我经常浏览的网站上抓的相对应的截图.(以后看到其他类型的我再补充) 既然截了图,咱们就直接看人家使用的布局方式,毕 ...
- 七种CSS左侧固定,右侧自适应两栏布局
一 两栏布局基本HTML和CSS 首先创建基本的HTML布局和最基本的样式. 基本的样式是,两个盒子相距20px, 左侧盒子宽120px,右侧盒子宽度自适应 <div class="w ...
- css两栏布局、圣杯布局、双飞翼布局
最近几个月一直用vue在写手机端的项目,主要写业务逻辑,在js方面投入的时间和精力也比较多.这两天写页面明显感觉css布局方面的知识有不足,所以复习一下布局方法. 两栏布局 1.浮动 .box1 .l ...
随机推荐
- 【Codeforces 479D】Long Jumps
[链接] 我是链接,点我呀:) [题意] 如果存在a[j]-a[i]=d 那么认为可以量出来长度d 现在给你量尺上的n个点. 问你最少要加多少个点,才能够量出来长度x和长度y [题解] 设dic1和d ...
- [K3Cloud2.0]如何解决创建管理中心失败的问题
标题有点大,实际上,Cloud2.0产品质量还是顶呱呱的,至于在安装使用过程中出现的这个管理中心无法创建的问题,实际上是与我的网络环境有关,下面讲一下我的网络环境: 开发团队目前所在网段:10.30. ...
- 最小生成树 D - Constructing Roads
There are N villages, which are numbered from 1 to N, and you should build some roads such that ever ...
- 洛谷—— P1419 寻找段落
https://www.luogu.org/problem/show?pid=1419 题目描述 给定一个长度为n的序列a_i,定义a[i]为第i个元素的价值.现在需要找出序列中最有价值的“段落”.段 ...
- Hive之内置函数
函数分类 UDF(User Defined Function):数据一对一 UDAF(User Defined Aggreation Function):数据多对一 UDTF(User Defined ...
- Spark之安装和使用
Scala安装 Spark使用Scala开发,安装的Scala版本必须和Spark使用的版本一致,否则使用Scala编写的Spark任务会有兼容性问题 可以到Spark官网查看确定Scala版本,或者 ...
- 《WF in 24 Hours》读书笔记 - Hour 2(2) - Workflow:创建分支和传递参数
1. 修改workflow1.xaml,添加Flowchart,添加Flowdesicion,添加CodeActivity2,并且名字改为下图所示: 2. CodeActivity1和2的代码如下: ...
- POJ 1861 Network (Kruskal求MST模板题)
Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14103 Accepted: 5528 Specia ...
- Apache 配置学习占位
http://www.cnblogs.com/yeer/archive/2011/01/18/1938024.html http://www.cnblogs.com/zgx/archive/2011/ ...
- LeetCode 69. Sqrt(x) (平方根)
Implement int sqrt(int x). Compute and return the square root of x. x is guaranteed to be a non-nega ...