继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

web前端之布局模型详解

损失函数
关注TA
已关注
手记 70
粉丝 1533
获赞 2735

一、css布局模型

在网页中,css可设置元素有三种布局模型:Flow,Float,Layer

1、流动模型(Flow)

概念:流动(Flow)是默认的网页布局模式。也就是说网页在默认状态下的 HTML 网页元素都是根据流动模型来分布网页内容的。

典型的特征:

第一,块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%。实际上,块状元素都会以行的形式占据位置。

第二,在流动模型下,内联元素(行级元素)都会在所处的包含元素内从左到右水平分布显示。

2、浮动模型 (Float)

任何元素在默认情况下是不能浮动的,但可以用 CSS 定义为浮动,如 div、p、table、img 等元素都可以被定义为浮动。
float:left;//左浮动
float:right;//右浮动

3、层模型(Layer)

概念:层布局模型就像是图像软件PhotoShop中非常流行的图层编辑功能一样,每个图层能够精确定位操作,CSS定义了一组定位(positioning)属性来支持层布局模型。

层模型有三种形式:

(1)、绝对定位(position: absolute)

如果想为元素设置层模型中的绝对定位,需要设置position:absolute(表示绝对定位),这条语句的作用将元素从文档流中拖出来,然后使用left、right、top、bottom属性相对于其最接近的一个具有定位属性的父包含块进行绝对定位。如果不存在这样的包含块,则相对于body元素,即相对于浏览器窗口。

如下面代码可以实现div元素相对于浏览器窗口向右移动100px,向下移动50px。

div{
    width:200px;
    height:200px;
    border:2px red solid;
    position:absolute;
    left:100px;
    top:50px;
}
<div id="div1"></div>

(2)、相对定位(position: relative)

如果想为元素设置层模型中的相对定位,需要设置position:relative(表示相对定位),它通过left、right、top、bottom属性确定元素在正常文档流中的偏移位置。相对定位完成的过程是首先按static(float)方式生成一个元素(并且元素像层一样浮动了起来),然后相对于以前的位置移动,移动的方向和幅度由left、right、top、bottom属性确定,偏移前的位置空间保留不动

参照定位的元素必须是相对定位元素的前辈元素,参照定位的元素必须加入position:relative;,定位元素加入position:absolute,便可以使用top、bottom、left、right来进行偏移定位了。

(3)、固定定位(position: fixed)

fixed:表示固定定位,与absolute定位类型类似,但它的相对移动的坐标是视图(屏幕内的网页窗口)本身。由于视图本身是固定的,它不会随浏览器窗口的滚动条滚动而变化(比如网页中常见的广告位),除非你在屏幕中移动浏览器窗口的屏幕位置,或改变浏览器窗口的显示大小,因此固定定位的元素会始终位于浏览器窗口内视图的某个位置,不会受文档流动影响,这与background-attachment:fixed;属性功能相同。

二、元素居中布局方法

水平居中

1、行级元素

添加元素css样式:text-align:center;

2、块级元素

定宽的块级元素:width:200px;margin:20px auto;

非定宽的块级元素:

(1)、加入 table 标签

利用table标签的长度自适应性---即不定义其长度也不默认父元素body的长度(table其长度根据其内文本长度决定),因此可以看做一个定宽度块元素,然后再利用定宽度块状居中的margin的方法,使其水平居中。

<style>
table{
    border:1px solid;
    margin:0 auto;
}
</style>

<div>
 <table>
  <tbody>
    <tr><td>
    <ul>
        <li>我是第一行文本</li>
        <li>我是第二行文本</li>
        <li>我是第三行文本</li>
    </ul>
    </td></tr>
  </tbody>
 </table>
</div>

(2)、设置 display: inline 方法

显示类型设为 行内元素,进行不定宽元素的属性设置,然后使用 text-align:center 来实现居中效果。

(3)、设置 position:relative 和 left:50%

利用 相对定位 的方式,将元素向左偏移 50% ,即达到居中的目的

垂直居中

1、父元素高度确定的单行文本

通过设置父元素的 height 和 line-height 高度一致来实现的。(height: 该元素的高度,line-height: 顾名思义,行高(行间距),指在文本中,行与行之间的 基线间的距离 )。

这种文字行高与块高一致带来了一个弊端:当文字内容的长度大于块的宽时,就有内容脱离了块。

2、父元素高度确定的多行文本、图片等的竖直居中

(1)、使用插入 table (包括tbody、tr、td)标签,同时设置 vertical-align:middle。

css 中有一个用于竖直居中的属性 vertical-align,在父元素设置此样式时,会对inline-block类型的子元素都有用。下面看一下例子:

table td{height:500px;background:#ccc}
<body>
<table><tbody><tr><td class="wrap">
<div>
    <p>看我是否可以居中。</p>
</div>
</td></tr></tbody></table>
</body>

因为 td 标签默认情况下就默认设置了 vertical-align 为 middle,所以我们不需要显式地设置了。

打开App,阅读手记
4人推荐
发表评论
随时随地看视频慕课网APP