在学习各种布局之前我们先来认识各个关键词,理解这些关键词,然后由点到面,这样就简单多了。

display属性

  页面中每个元素都有一个默认的display属性,它的值与该元素的类型有关,默认值通常是 block (元素显示为块元素)或 inline(元素显示为行内元素)。此外值为none时,表示隐藏该元素,但是它和 visibility 属性不一样。把 display 设置成 none 元素不会占据它本来应该显示的空间,但是设置成 visibility: hidden; 还会占据空间。除了上面三个值外,display属性还有如下这些值,共整理如下:

值    描述
none   此元素不会被显示。
block   此元素将显示为块级元素,此元素前后会带有换行符。
inline   默认。此元素会被显示为内联元素,元素前后没有换行符。
inline-block   行内块元素。(CSS2.1 新增的值)
list-item   此元素会作为列表显示。
run-in   此元素会根据上下文作为块级元素或内联元素显示。
table   此元素会作为块级表格来显示(类似 <table>),表格前后带有换行符。
inline-table   此元素会作为内联表格来显示(类似 <table>),表格前后没有换行符。
table-row-group   此元素会作为一个或多个行的分组来显示(类似 <tbody>)。
table-header-group   此元素会作为一个或多个行的分组来显示(类似 <thead>)。
table-footer-group   此元素会作为一个或多个行的分组来显示(类似 <tfoot>)。
table-row   此元素会作为一个表格行显示(类似 <tr>)。
table-column-group   此元素会作为一个或多个列的分组来显示(类似 <colgroup>)。
table-column   此元素会作为一个单元格列显示(类似 <col>)
table-cell   此元素会作为一个表格单元格显示(类似 <td> 和 <th>)
table-caption   此元素会作为一个表格标题显示(类似 <caption>)
inherit   规定应该从父元素继承 display 属性的值。

块级元素和行内元素

  我们需要知道:

  块级元素会独占一行,其宽度自动填满其父元素宽度。默认的值为auto。
  行内元素不会独占一行,相邻的行内元素会排列在同一行里,直到一行排满,才会换行,其宽度随元素的内容自行变化。
  块级元素可以设置 width, height属性,行内元素设置width,  height无效。
  块级元素可以设置内外边距(margin 和 padding)。而行内元素的只能设置水平方向的内外边距。(padding-left,padding-right,margin-left,margin-right),但是竖直方向的内外边距不起效果。(padding-top,padding-bottom,margin-top,margin-bottom)。即水平方向有效,竖直方向无效。最后可以通过修改元素的display属性来切换行内元素和块级元素。此外最重要的一点是,当display属性值取值为inline-block时,该元素同时拥有块级元素和行内元素的特点:既可以设置长宽和内外边距,还可以像行内元素一样并排显示。
 
  常见的块元素有:div、p、ul、ol、li、h1~h6、header、footer、aside、form等;
  常见的行内元素有:a、span、strong、input、img、em等。
 
margin属性

  当对设置了宽度的块级元素使用左右外边距为 auto时可以使其水平居中。因为元素会占据所指定的宽度后,会将剩余的宽度一分为二成为左右外边距。

box-sizing属性

  新增的box-sizing属性有三个取值:

  content-box:表示padding和border不被包含在定义的width和height之内,即在宽度和高度之外绘制元素的内边距和边框。默认值。

  border-box:表示padding和border被包含在定义的width和height之内。此元素的内边距和边框不再会增加它的宽度。(border-box实际上就是IE quirk mode(怪异模式)下的box model。)

  inherit:表示从父元素继承 box-sizing 属性的值。

calc()

calc()在mdn中是这么解释的:

  CSS函数calc()可以用在任何一个需要<length><frequency>,<angle><time><number>、或<integer>的地方。有了calc(),你就可以通过计算来决定一个CSS属性的值了。你还可以在一个 calc() 内部嵌套另一个 calc() ,里面的 calc() 会被简单地视为加了括号。 

  calc是英文单词calculate(计算)的缩写,它是css3新增的功能。用来给元素的border、margin、pading、font-size和width等属性设置动态值。我们可以运用加减乘除来计算不同的单元。例如我们可以用百分比减去em值:

  .demo{width:calc(100% - 1.5em);}// 减号前后必须都有空格 

 position属性

  通过元素的position属性我们可以采取以下四种定位:

  static:默认值。元素以默认的文档流形式排列。

  relative:相对定位,相对于其自己正常的位置进行定位,通过top,right,bottom,left来进行上下左右偏移。它原本所占的空间仍保留,其他元素不会进行填补。

  absolute:绝对定位,对象将偏离文档流,原先存在的空间将删除。它参照的则是离自身最近的定位过的( position 值不是 static 的元素。)祖先元素,没有则以body元素进行定位。

  fixed:固定定位,也会脱离文档流,它相对于视窗来定位。

  当你定义的CSS中有position属性值为absolute、relative或fixed,可用z-index来更改元素的堆叠顺序。

float属性

  float属性一开始是用来文字环绕图片的,在css中任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。如果浮动非替换元素,则要指定一个明确的宽度;否则,它们会尽可能地窄。取值有left、right、none。浮动的元素将脱离文档流。

  clear属性用来清除浮动,clear 属性的值可以是 left、right、both 或 none。此外记住浮动的元素总是包含非浮动的元素。对父元素应用overflow: hidden也可以清除浮动,还可以在可以在父元素上使用伪类  :after 方法 。

下面来看看常见的布局:

  1、有二个div,左右二个铺满页面,左边div定宽,右边div根据浏览器大小自行伸缩。

  原理是利用float属性,第一栏向左浮动。设置第二栏的左外边距margin-left属性值等于第一栏的宽度。代码如下:

 <div id="wrapper">
<div class="left">left</div>
<div class="right">right</div>
</div> <style>
.left{width:100px;border:1px solid red;height:80px;float:left}
.right{border:1px solid blue;height:80px;margin-left:100px;}

2、简单的三栏布局,利用浮动,设置宽度即可:

 .left{width:150px;border:1px solid red;height:80px;float:left}
.middle{width:100px;border:1px solid blue;height:80px;float:left}
.right{width:125px;border:1px solid;height:80px;float:left;}

3、九宫格

 html:
<div id="container">
<div class="row1">
<div>1</div>
<div>1</div>
<div>1</div>
</div> <div class="row2">
<div>2</div>
<div>2</div>
<div>2</div>
</div> <div class="row3">
<div>3</div>
<div>3</div>
<div>3</div>
</div>
</div> css:
#container{width:960px;height:600px;margin:100px auto;}
#container .row1{height:200px;width:100%;border:1px solid red;box-sizing:border-box}
#container .row1 div{float:left;width:33.33%;height:100%;border:1px solid;box-sizing:border-box}
#container .row2{height:200px;width:100%;border:1px solid green;box-sizing:border-box}
#container .row2 div{float:left;width:33.33%;height:100%;border:1px solid;box-sizing:border-box}
#container .row3{height:200px;width:100%;border:1px solid blue;box-sizing:border-box}
#container .row3 div{float:left;width:33.33%;height:100%;border:1px solid;box-sizing:border-box}

4、两侧定宽,中栏自适应

利用table布局:

 <div id="container">
<div class="left">左侧定宽</div>
<div class="middle">中栏自适应</div>
<div class="right">右侧定宽</div>
</div>
<style>
 #container{width:500px;height:200px; border:1px solid red;display:table;table-layout:fixed}
  .left, .middle,.right{display:table-cell;height:200px;}
  #container .left {width:100px;border:1px solid;}
  #container .middle{border:1px solid;width:100%}
  #container .right{ width:100px;border:1px solid}
</style>

5、弹性布局:

  详细见另一篇

6、待续

css 各种常见布局整理的更多相关文章

  1. CSS之常见布局|常用单位|水平垂直居中

    常见布局: 1. 流式布局:百分比布局,宽高.margin.pinding都是百分比 2. 固定布局:盒子的宽高固定,如:margin.padding等 3. 浮动布局:float 4. 弹性布局:f ...

  2. css:常见布局问题

    一.单列布局 1. 水平居中 1.1 使用inline-block和text-align .parent{text-align:center;} .child{display:inline-block ...

  3. css三栏布局方案整理

    日常开发中,经常会用到css三栏布局,现将工作中常用的css 三栏布局整理如下: 什么是三栏布局: 三栏布局,顾名思义就是两边固定,中间自适应. 一. float布局 <!DOCTYPE htm ...

  4. CSS常见布局问题整理

    实现div的水平居中和垂直居中 多元素水平居中 实现栅格化布局 1. 实现div的水平居中和垂直居中 实现效果: 这大概是最经典的一个题目了,所以放在第一个. 方法有好多, 一一列来 主要思路其实就是 ...

  5. css常见布局方式

    CSS常见布局方式 以下总结一下CSS中常见的布局方式.本人才疏学浅,如有错误,请留言指出. 如需转载,请注明出处:CSS常见布局方式 目录: 使用BFC隐藏属性 float + margin abs ...

  6. CSS常见布局解决方案

    最近要准备移动端项目,大半年没好好写过CSS了,今天恶补了一下CSS的一些布局,下面做一些分享. 水平居中布局 1.margin + 定宽 <div class="parent&quo ...

  7. css CSS常见布局解决方案

    CSS常见布局解决方案说起css布局,那么一定得聊聊盒模型,清除浮动,position,display什么的,但本篇本不是讲这些基础知识的,而是给出各种布局的解决方案.水平居中布局首先我们来看看水平居 ...

  8. 纯CSS实现移动端常见布局——高度和宽度挂钩的秘密

    纯CSS实现移动端常见布局--高度和宽度挂钩的秘密 不踩坑不回头.之前我在一个项目中大量使用css3的calc计算属性.写代码的时候真心不要太爽啊-可是在项目上线之后,才让我崩溃了,原因非常easy, ...

  9. CSS中常见的布局

    一.css中常见的布局有哪些? (1)两列布局 (2)三列布局 (3)弹性布局 (4)圣杯布局 (5)双飞翼布局 二.具体实现  (1)两列布局 https://www.cnblogs.com/qin ...

随机推荐

  1. Java NIO学习与记录(三): Scatter&Gather介绍及使用

     Scatter&Gather介绍及使用 上一篇知道了Buffer的工作机制,以及FileChannel的简单用法,这一篇介绍下 Scatter&Gather 1.Scatter(分散 ...

  2. 使用scp命令,远程上传下载文件/文件夹

    1.从服务器下载文件 scp username@servername:/path/filename /local/path例如: scp ubuntu@117.50.20.56:/ygf/data/d ...

  3. Cpython 支持的线程

    因为Python解释器帮你自动定期进行内存回收,你可以理解为python解释器里有一个独立的线程,每过一段时间它起wake up做一次全局轮询看看哪些内存数据是可以被清空的,此时你自己的程序 里的线程 ...

  4. git stash使用一则

    当在新的分支工作,修改的文件提交到暂存区,这时,切换到其他分之,可能报错,因为米有commit,如果切换到其他分支,暂存区的修改可能丢失,我们可以使用git stash save -a(暂存区) &q ...

  5. 何为session?

    何为session 在计算机中,尤其是在网络应用中,称为"会话控制".session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存储 ...

  6. ../../build/debug/codegen/libCodeGen.a(llvm-codegen.cc.o ):( data.rel.ro_ZTIN4llvm18ValueMapCallbackVHIPKNS_5ValueENS_6WeakVHENS_14ValueMapConfigIS3_EEEE[_ZTIN4llvm18ValueMapCallbackVHIPKNS_5ValueENS_

    解决方式如下: wget http://llvm.org/releases/3.3/llvm-3.3.src.tar.gz    tar xvzf llvm-3.2.src.tar.gz    cd ...

  7. springboot-1-介绍

    之前跟着一个博主学过springboot, 但不怎么全面, 最近看了本书, 汪云飞的springboot 实战, 发现springboot太强大了, 跟着书重新走一遍... 边写边记录 http:// ...

  8. SSH安全登陆原理:密码登陆与公钥登陆

      SSH全称(Secure SHell)是一种以安全性闻名的应用层网络通信协议,用于计算机间的安全通信,是目前比较成熟的远程登陆解决方案. 它提供两种方法登陆: 1.密码登陆 2.公钥登陆   密码 ...

  9. 说一说HTTP

    什么是URI和URL URI用字符串标示某一互联网资源,而URL表示资源的地点.可见URL是URI的子集. URI要使用涵盖全部必要信息的URI.绝对URL以及相对URL.相对URL是指从浏览器中基本 ...

  10. 第8章 scrapy进阶开发(2)

    8-4 selenium集成到scrapy中 其实也没什么好说的直接上代码 这是在middlewares.py中定义的一个class: from selenium.common.exceptions ...