网页布局的三种方式-标准流浮动和定位

Posted JSW79

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网页布局的三种方式-标准流浮动和定位相关的知识,希望对你有一定的参考价值。

网页布局的三种方式

网页布局的本质——用CSS 来摆放盒子。把盒子摆放到相应位置

CSS 提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序):

  • 普通流(标准流)
  • 浮动
  • 定位

标准流

标准流定义

所谓的标准流:,就是标签按照规定好默认方式排列

  1. 块级元素会独占一行,从上向下顺序排列。

常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table

  1. 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行

常用元素:span、a、i、em 等

以上都是标准流布局,标准流是最基本的布局方式。

浮动

浮动定义

浮动最典型的应用:可以让多个块级元素一行内排列显示。

网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。

float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。

语法:

选择器{ float: 属性值; }

属性值:

描述
left 元素向左浮动。
right 元素向右浮动。
none 默认值。元素不浮动,并会显示在其在文本中出现的位置。
inherit 规定应该从父元素继承 float 属性的值。

浮动特性

一、脱离标准普通流的控制(浮)移动到指定位置(动), (俗称脱标),且浮动的盒子不再保留原先的位置

​ 如同其名字的意义一样,浮动,即浮动到元素上方,可以这样来理解:标准流在最底层,浮动的元素在标准流的上方,即脱离了标准流的控制。同时它位于标准流的上层,所以标准流里不会再存在它的位置。但也会有特殊的情况,即文字和浮动元素位于同一个父元素里时,浮动元素不会盖住文字,而是环绕文字,这是因为浮动设计的初衷就是类似word图片和文字的浮动效果,所以不会出现浮动元素盖住文字的情况出现。

image-20210521221112953

二、如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列

例如三个在同一个父盒子下的子盒子,都设置左浮动

image-20210521221932494

例如在同一个父盒子下的两个子盒子分别设置左浮动和右浮动

image-20210521221954389

注意:浮动的元素是互相贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐

三、浮动元素会具有行内块元素特性

任何元素都可以浮动。不管原先是什么模式的元素,添加浮动之后具有行内块元素相似的特性。

  1. 如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定
  2. 浮动的盒子中间是没有缝隙的,是紧挨着一起的
  3. 行内元素同理

注意点

  1. 为了约束浮动元素位置, 我们网页布局一般采取的策略是:

    ​ 先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准则

  2. 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流.

清除浮动

由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为0 时,就会影响下面的标准流盒子。

image-20210521225929562

由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响。

语法:

选择器{clear:属性值;}
描述
left 在左侧不允许浮动元素。
right 在右侧不允许浮动元素。
both 在左右两侧均不允许浮动元素。
none 默认值。允许浮动元素出现在两侧。
inherit 规定应该从父元素继承 clear 属性的值。

一般情况下,用到的都是clear: both;

  • 清除浮动的本质是清除浮动元素造成的影响
  • 如果父盒子本身有高度,则不需要清除浮动
  • 清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了

清除浮动一般采用两种方法,给父盒子添加属性,可直接粘贴,代码如下:

  1. :after 伪元素法
.clearfix:after {
	content: "";
	display: block;
	height: 0;
	clear: both;
	visibility: hidden;
}

.clearfix { /* IE6、7 专有*/
	*zoom: 1;
}
  • 优点:没有增加标签,结构更简单
  • 缺点:照顾低版本浏览器
  • 代表网站:百度、淘宝网、网易等
  1. 双伪元素清除浮动
.clearfix:before,.clearfix:after {
	content:"";
	display:table;
}

.clearfix:after {
	clear:both;
}

.clearfix {
	*zoom:1;
}
  • 优点:代码更简洁
  • 缺点:照顾低版本浏览器
  • 代表网站:小米、腾讯等

定位

定位定义

定位:将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子。

定位= 定位模式+ 边偏移。

定位模式用于指定一个元素在文档中的定位方式。边偏移则决定了该元素的最终位置。

一、定位模式

定位模式决定元素的定位方式,它通过CSS 的position 属性来设置,其值可以分为四个:

描述
absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
fixed 生成绝对定位的元素,相对于浏览器窗口进行定位。 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
relative 生成相对定位的元素,相对于其正常位置进行定位。 因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。
static 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
inherit 规定应该从父元素继承 position 属性的值。

二、边偏移

边偏移就是定位的盒子移动到最终位置。有top、bottom、left 和right 4 个属性

属性 描述
bottom 设置定位框的底部外边距边缘。
left 设置定位框的左侧外边距边缘。
right 设置定位框的右侧外边距边缘。
top 设置定位框的顶部外边距边缘。

静态定位

静态定位是元素的默认定位方式,无定位的意思。

语法:

选择器{ position: static; }
  • 静态定位按照标准流特性摆放位置,它没有边偏移
  • 静态定位在布局时很少用到

相对定位relative

相对定位是元素在移动位置的时候,是相对于它原来的位置来说的。

语法:

选择器{ position: relative; }

相对定位的特点:

  1. 它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)。
  2. 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它。因此,相对定位并没有脱标。它最典型的应用是给拥有绝对定位的子元素的父盒子设置属性的。

绝对定位absolute

绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的。

语法:

选择器{ position: absolute; }

绝对定位的特点:

  1. 如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位(Document 文档)。
  2. 如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参考点移动位置。
  3. 绝对定位不再占有原先的位置。(脱标),所以绝对定位是脱离标准流的

子绝父相

子绝父相是定位中最常用的一种方式这句话的意思是:子级是绝对定位的话,父级要用相对定位。

  1. 子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
  2. 父盒子需要加定位限制子盒子在父盒子内显示。
  3. 父盒子布局时,需要占有位置,因此父亲只能是相对定位。

这就是子绝父相的由来,所以相对定位经常用来作为绝对定位的父级。

总结:因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位

当然,子绝父相不是永远不变的,如果父元素不需要占有位置,子绝父绝也会遇到。

固定定位fixed

固定定位是元素固定于浏览器可视区的位置。主要使用场景:可以在浏览器页面滚动时元素的位置不会改变。

语法:

选择器{ position: fixed; }

固定定位的特点:(务必记住)

  1. 以浏览器的可视窗口为参照点移动元素。
  • 跟父元素没有任何关系
  • 不随滚动条滚动。
  1. 固定定位不在占有原先的位置。
    固定定位也是脱标的,其实固定定位也可以看做是一种特殊的绝对定位。

定位叠放次序z-index

在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用z-index 来控制盒子的前后次序(z轴)

语法:

选择器{ z-index: 1; }
  1. 数值可以是正整数、负整数或0, 默认是auto,数值越大,盒子越靠上
  2. 如果属性值相同,则按照书写顺序,后来居上
  3. 数字后面不能加单位
  4. 只有定位的盒子才有z-index 属性

拓展

一、绝对定位的盒子居中

加了绝对定位的盒子不能通过margin:0 auto 水平居中,但是可以通过以下计算方法实现水平和垂直居中。

left: 50%;/*让盒子的左侧移动到父级元素的水平中心位置。*/
margin-left: -100px/*让盒子向左移动自身宽度的一半。*/

二、定位特殊特性

绝对定位和固定定位也和浮动类似。

  1. 行内元素添加绝对或者固定定位,可以直接设置高度和宽度。
  2. 块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小。

三、脱标的盒子不会触发外边距塌陷

浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并的问题。

总结

通过盒子模型,清楚知道大部分html标签是一个盒子。

  1. 标准流
    可以让盒子上下排列或者左右排列,垂直的块级盒子显示就用标准流布局。

  2. 浮动
    可以让多个块级元素一行显示或者左右对齐盒子,多个块级盒子水平显示就用浮动布局。

  3. 定位
    定位最大的特点是有层叠的概念,就是可以让多个盒子前后叠压来显示。如果元素自由在某个盒子内移动就
    用定位布局。

一个完整的网页,是标准流、浮动、定位一起完成布局的,每个都有自己的专门用法。
通过CSS浮动、定位可以让每个盒子排列成为网页。

以上是关于网页布局的三种方式-标准流浮动和定位的主要内容,如果未能解决你的问题,请参考以下文章

二十浮动(float)

CSS基础知识四浮动清除浮动

0023 浮动:float清除浮动

CSS学习笔记

夯实基础--CSS=>浮动(float)

浮动与清除浮动的六种方法