CSS 多栏布局 固定布局 流动布局
正常情况下都应该保持元素 height 属性的默认值 auto .
多栏布局,某一栏目占的总宽度包括它的,Width,margin,padding ,border。
CSS3中,应用 box-sizing 属性之后,给盒子 添加边框和内边距都不会增大盒子,相反会导致内容变窄(像没有设置width的auto一样;)
比如 :
如果 section 的总宽度超出,可以用4种方法处理,
- 从width中减去添加的外边距,边框和内边距的宽度和。
- 用行内的元素设定外边距,边框和内边距(行内元素不设置宽度)
- 在栏中再添加一个宽度默认值的 div,让它包含所有内容元素,然后再给这个 div 应用边框和内边距。
- section {box-sizing:border-box;}。
2:section > * {margin:0 10px;} (选择section的所有子元素,设定它们的外边距,边框和内边距)
3:浮动了栏,设定了栏宽,最好不要修改,而直接添加一个内部 div ,把padding margin border 给这个 div。
<div id="wrapper">
<nav><div class="inner"></div></nav>
<article> <div class="inner"></div></article>
<aside><div class="inner"></div> </aside>
</div>
nav {float :left; width:XZX;}
article{float :left; width:XYZ;}
aside {float :left; width:ZZY;}
nav .inner {padding:XXpx; margin:XXpx;}
article .inner {padding:XZpx XYpx; margin:XXpx;}
aside .inner {padding:ZZpx; margin:XXpx;}
4:nav {
box-sizing:border-box; }
article {
box-sizing:border-box; }
aside {box-sizing:border-box; }
即可。
IE6 和 IE7 不支持 box-sizing
属性。不过,有一个专门解决这个问题的腻子脚本(polyfill),名叫 borderBoxModel.js。
你可以使用条件注释(以便只有 IE6 和 IE7 加载)把它添加到 HTML 标记之后、结
束的</body>标签之前,以保证在加载 DOM 之后再执行该脚本:
<!--[if lt IE 8 ]>
<script src="helpers/borderBoxModel.js"></script>
<![endif]-->
PS:
设计一个将来可能由他人维护的动态网站时,需要考虑得更长远一些。比如,应该预见到可能
出现一些过大的元素。如果将来有一张比浮动栏更宽的图片被放到栏中,就会导致布局变宽,
而 右 边 的 栏 又 会 滑 到 下 方 。 为 此 , 一 个 简 单 的 预 防 措 施 就 是 添 加 一 条
.inner img{max-width:100%;}
声明,以便限制图片的宽度不超过其父元素(在此就是内部 div)。
HTML 只会在单词间空格的地方换行。一些长 URL,甚至一些长单词,在栏比较窄的情况下,都会导致栏宽过大。
因此,还应该给所有栏的外包装元素应用
{word-wrap:break-word;}
声明,
流动布局:
1.用负外边距实现
解决方案是控制两个外包装,其中一个外包装threecolwrap包围所有三栏,另一个栏twocolwrap外包装只包围左栏和中栏。
把twocolwrap的margin设置为右栏(它不包括)的负值,width:100%。然后把中间栏设置margin-right 设置为右栏的值(正值),width:auto;但是左栏要固定值。
<div id="main_wrapper">
<header>
<!-- 页眉-->
</header>
<div id="threecolwrap">/*三栏外包装(包围全部三栏) */
<div id="twocolwrap">/*两栏外包装(包围左栏和中栏) */
/*左栏*/
<nav>
<!-- 导航 -->
</nav>
/*中栏*/
<article>
<!-- 区块 -->
</article>
</div>/*结束两栏外包装( twocolwrap) */
/*右栏*/
<aside>
<!-- 侧栏 -->
</aside>
</div>/*结束三栏外包装( threecolwrap) */
<footer>
<!-- 页脚 -->
</footer>
</div>
* {margin:0; padding:0;}
body {font:1em helvetica, arial, sans-serif;}
div#main_wrapper{
min-width:600px; max-width:1100px;
/*超过最大宽度时,居中布局*/
margin:0 auto;
/*背景图片默认从左上角开始拼接*/
background:url(images/bg_tile_150pxw.png) repeat-y #eee;
}
header {
padding:5px 10px;
background:#3f7ccf;
}
div#threecolwrap {
/*浮动强制它包围浮动的栏*/
float:left;
width:100%;
/*背景图片右对齐*/
background:url(images/bg_tile_210pxw.png) top right repeat-y;
}
div#twocolwrap {
/*浮动强制它包围浮动的栏*/
float:left;
width:100%;
/*把右栏拉到区块外边距腾出的位置上*/
margin-right:-210px;
}
nav {
float:left;
width:150px;
background:#f00;
padding:20px 0;
}
/*让子元素与栏边界保持一定距离*/
nav > * {margin:0 10px;}或者里面加一个div
article {
width:auto;/*不浮动*/
margin-left:150px;
/*在流动居中的栏右侧腾出空间*/
margin-right:210px;
background:#eee;
padding:20px 0;
}
*让子元素与栏边界保持一定距离*/
article > * {margin:0 20px;} 或者里面加一个div
aside {
float:left;
width:210px;
background:#ffed53;
padding:20px 0;
}
*让子元素与栏边界保持一定距离*/
aside > * {margin:0 10px;}
footer {
clear:both;
width:100%;
text-align:center;
background:#000;}
background:#000;
}
为了给右栏腾出空间,中栏 article 元素有一个 210 像素的右外边距。当然,
光有这个外边距只能把右栏再向右推 210 像素。别急,包围左栏和中栏的两栏外包
装上 210 像素的负右外边距,会把右栏拉回 article 元素右外边距(在两栏外包装内
部右侧)创造的空间内。
2.用CSS3 单元格 实现
仅仅是把三栏的display 属性设定为 table-cell 就可以了。
<nav><!-- 内容 --></nav>
<article><!-- 内容 --></article>
<aside><!-- 内容 --></aside>
和以下 CSS:
nav {display:table-cell; width:150px; padding:10px;
background:#dcd9c0;}
article {display:table-cell; padding:10px 20px;
background:#ffed53;}
aside {display:table-cell; width:210px; padding:10px;
background:#3f7ccf;}
这个简单、功能完备的布局对 IE7 和 IE6 可没有任何腻子脚本,甚至连个退化的后备方案都没有。
多行多栏布局 :
把每行用一个div盒子包起来,设置一个id,
在行内设置行内元素的width 和float (使变成一行),
然后在行内小盒子中,增加div,以改变padding ,margin,border属性,又不会改变行内小盒子的宽度。
CSS 多栏布局 固定布局 流动布局的更多相关文章
- css多栏自适应布局
css多栏自适应布局还是需要总结一下的,都是基本功. 一般使用position属性布局,或者用float属性布局,也可以使用display属性. 看资料说position适合首页布局,因为首页内容往往 ...
- 三种方法实现CSS三栏布局
本文由云+社区发表 作者:前端林子 本文会分别介绍三种CSS实现三栏布局的方法,可在浏览器中打开查看效果 1.方法一:自身浮动的方法 实现方法:需要左栏向左浮动,右栏向右浮动,中间设左右margin来 ...
- css三栏布局方案整理
日常开发中,经常会用到css三栏布局,现将工作中常用的css 三栏布局整理如下: 什么是三栏布局: 三栏布局,顾名思义就是两边固定,中间自适应. 一. float布局 <!DOCTYPE htm ...
- HTML学习笔记 css定位(静态,相对,固定,绝对布局)偏移案例 第十二节 (原创) 参考使用表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【CSS-flex】圣杯布局(Holy Grail Layout)、输入框的布局、悬挂式布局、固定的底栏
1.圣杯布局(Holy Grail Layout) 其指的是一种最常见的网站布局.页面从上到下,分成三个部分:头部(header),躯干(body),尾部(footer).其中躯干又水平分成三栏,从左 ...
- Css三栏布局自适应实现几种方法
Css三栏布局自适应实现几种方法 自适应实现方法我们可以从三个方法来做,一个是绝对定位 ,自身浮动法 和margin负值法了,下面我们一起来看看这三个例子吧,希望例子能帮助到各位同学. 绝对定位法三栏 ...
- CSS三栏布局的四种方法
总括: 不管是三栏布局还是两栏布局都是我们在平时项目里经常使用的,也许你不知道什么事三栏布局什么是两栏布局但实际已经在用,或许你知道三栏布局的一种或两种方法,但实际操作中也只会依赖那某一种方法,本文具 ...
- CSS百分比padding实现比例固定图片自适应布局
一.CSS百分比padding都是相对宽度计算的 在默认的水平文档流方向下,CSS margin和padding属性的垂直方向的百分比值都是相对于宽度计算的,这个和top, bottom等属性的百分比 ...
- CSS技巧 (2) · 多列等高布局
前言 最近,面试的时候都碰到一些关于利用CSS实现多列等高布局或者一侧宽度固定,另一侧宽度自适应的问题,下面稍微总结一下: 先看一道题目 巧妙的多列等高布局 规定下面的布局,实现多列等高布局,要求两 ...
- Bootstrap页面布局3 - BS布局以及流动布局
1. <h1 class='page-header'>布局<small> 使用bootstrap网格系统布局网页</small></h1> 得到如图所示 ...
随机推荐
- Ansible介绍以及基于角色搭建LNMP和zabbix
1 ansible 常用指令总结,并附有相关示例. /usr/bin/ansible 主程序,临时命令执行工具 /usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man ...
- dom4j解析和生成xml文件
解析xml大致步骤: 1: 创建SAXReader: 2: 使用SAXReader解析指定的xml文档信息,并返回对应Document对象.Document对象中就包含了该xml文中的所有信息以及结构 ...
- SPI读写官方Demo
// SPDX-License-Identifier: GPL-2.0-only /* * SPI testing utility (using spidev driver) * * Copyrigh ...
- 测开-面试题-Java基础
1 垃圾回收机制? 答: 一.手动垃圾回收机制(C/C++)手动:使用过的对象必须要程序员自己来回收 缺点: 1.若程序员忘记及时回收--对象会一直在内存中,若程序运行时间很长,内存中存在大量垃圾,空 ...
- sql语句顺序/包含执行顺序和书写顺序
分页查询 如果一页记录为10条,希望查看第3页记录应该怎么查呢? 第一页记录起始行为0,一共查询10行: 第二页记录起始行为10,一共查询10行: 第三页记录起始行为20,一共查询10行: ...
- Windows环境同时安装多个版本的Python解释器(python2和python3)
https://blog.csdn.net/qq_21583139/article/details/125881382 出现问题: 更新pip 操作后出现,pip报错,应该是升级到最新pip版本然后和 ...
- switch和if
#include<stdio.h> int main() { char ch1='A'; char ch2='B'; switch(ch1) { case'A': switch(ch2) ...
- UE打LOG整理
Kismet库 蓝图方法cpp使用 例:打LOG:Print String 蓝图节点的鼠标tips:Target is Kismet System Library #include "Run ...
- 《CSOL大灾变》开发记录——武器购买逻辑开发
上次完成了武器购买界面设计,这次来完成武器购买逻辑与武器选择逻辑. 武器购买逻辑分为两个部分,一个部分是GUI部分的逻辑,也就是购买菜单,一个是武器游戏数据更新的逻辑,也就是实际中玩家获取武器的逻辑开 ...
- deepinlinux安装golang
Download 从 Google 官方获取安装包,不用FQ直接访问 http://golang.google.cn,选择 Linux 的安装包如 go1.14.linux-amd64.tar.gz ...