CSS页面布局的三种方式

网页中元素的布局方式

​ 在网页中有很多的元素,那么这些元素是靠着什么俩排序的呢?它不可能没有依据。为什么有的元素会占一整行,而有的元素可以在一行内显示。通过本篇文章将会详细告诉大家页面中的元素的排列依据。

元素的种类

​ 在HTML中的元素可以分为以下几种:

块元素

​ 该类型的元素有以下几个特点:

1、独占一行显示,纵向排列。这是块元素最基本的特点。

2、可以设置大小(width和height属性对过期元素起作用)

最常见的块级元素有h1~h6标题,p、section、header、footer等,其中最具有代表性的就是div

行内元素

​ 该类型的元素具有以下几个特点:

1、水平排列,不会独占一行。

2、不能设置大小(width和height属性对该类型的元素不起作用)

常见的行内元素有a、span等。

行内块元素

​ 该类型的元素综合了以上两种元素的特点:

1、水平排列,不会独占一行。

2、元素的大小可设置(width和height属性对过期元素起作用)

常见的行内块元素有img、input等。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title></title>
		<style type="text/css">
			
			div {
				 200px;
				height: 200px;
				background-color: red;
				margin: 10px;
			}
			input {
				 200px;
				height: 200px;
			}
		</style>
	</head>
	<body>
		<div id="">
			这是块级元素
		</div>
		<div id="">
			这是块级元素
		</div>
		<a href="#">这是行内元素</a>	
		<a href="#">这是行内元素</a>	
		<a href="#">这是行内元素</a>	<br> <br>
		
		<input type="text" name="" id="" value="行内块元素" />
		<input type="text" name="" id="" value="行内块元素" />
	</body>
</html>

结果:

元素之间的相互转换

​ 这些元素之前也是可以相互转换的,用到的css属性就是display(显示、展示)的意思。下面就来看一下它转换元素需要使用到的值。

display:block —— 当设置了该样式以后,该元素就以块元素的形式展示,它的另外一个作用就是显示元素。

display:inline—block 当设置了该样式以后,该元素就以行内块元素显示。

display:inline 当设置了该样式以后,该元素就以行内元素的形式展示。

利用上面的这些样式,可以将网页中的三种元素相互转换。

页面布局的三种方式——普通文档流、浮动、定位

​ 在页面上我们经常会看到一些元素排列的顺序,有的水平排列、有的垂直排列。也有一些元素在页面的各个角落,这些元素是靠什么来进行排列的呢?

普通文档流

​ 页面中的元素按照默认的方式排序,即块级元素纵向排列,水平元素水平渲染。在网页在,这样的元素组成的布局方式就称为普通文档流。普通文档流也叫做标准流。上面的那幅图就是普通文档流的排列方式。这时候所有的元素都在一个平面内。

浮动

​ 这种类型的布局页面中也是比较常见的,创名字可以看出,它是一种脱离文档流的布局方式(即浮动元素和普通流元素不在一个平面内),能够让浮动的元素置于页面中其他普通元素的上方,使用float属性定义,它的值主要有left、right两种,分别代表左浮动和右浮动。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title></title>
		<style type="text/css">
			
			div {
				 200px;
				height: 200px;
				background-color: red;
				margin: 10px;
		</style>
	</head>
	<body>
		<div id="">
			这是块级元素
		</div>
		<div id="">
			这是块级元素
		</div>
		<div id="">
			这是块级元素
		</div>
	</body>
</html>

结果:

上面的三个盒子属于普通流的元素,因为他们是块级元素,纵向排列,这个时候三个元素都处在同于个平面内。当给3个盒子设置了浮动以后,结果是这样的:

通过上面的结果可以看出,元素由纵向排列变味了横向排列。因为三个元素都有左浮动,所以三个元素就按照第一个开始纵向排列。

【注意】:从这里开始,三个元素已经脱离了文档流(标准流),我们一般称之为元素的脱标。如果在元素的下方有普通流的元素,那么他将会排列到最左上方。如下图:

浅蓝色的盒子为普通文档流的元素,本来它是在div的后面的,因为三个div已经脱标,造成页面原来的位置清空,这个时候普通文档流的元素就会补上去。(三个div和下面的盒子已经不在一个平面内了)

如果在最前面有一个普通流元素会是怎样的呢?

结果如上,因为浮动的元素不能影响他们前面的元素,因此前面的元素如果是块级元素,那么就会按照普通流的排列方式,独占一行,这是的浮动元素就会新起一行。从而得出一个结论:

浮动元素不能影响它们前面的元素,只能影响它们后面的元素。

<div id="">
			这是块级元素
		</div>
		<div id="">
			这是块级元素
		</div>
		<div id="">
			这是块级元素
		</div>
		<p>dhoeuicfhjoeifhceowihfjwei0ohfyo0</p>

结果:

按照我们的思路来说,后面的元素会补充到前面去,因为前面没有元素(前面的元素脱标了),其实p元素已经在最前面了:

问题在于文本为什么会出现在右边?

​ 因为浮动最开始的作用并不是用来布局页面元素,而是用来设置文字的环绕效果,这么一说就应该知道了,浮动会把后面元素中的文本自动调整到自身的周围,这根它的这个最初的作用有关。直到现在浮动依旧没有忘记自己的初衷,实在是令我感动,呜呜呜,嘤嘤嘤......么么叽.....么么叽......么么叽.........

​ 竟然浮动会脱标,那么势必在使用的时候回对其他元素造成影响。css也提供了一个可以用来消除浮动产生的影响的属性,即clear属性,它的值为以下几个:left、right、bother分别用来清除左边的、右边的以及两边的影响。

比如下面的情景就会在实际开发中经常遇到:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title></title>
		<style type="text/css">
			
			div {
				 200px;
				height: 200px;
				background-color: red;
				margin: 10px;
				float: left;
				}
				
			header {
				 800px;
				height: 40px;
				background-color: green;
			}	
			footer {
				 800px;
				height: 40px;
				background-color: blueviolet;
			}	
		</style>
	</head>
	<body>
		
		<header>
			这是标题
		</header>

		<div id="">
			内容1
		</div>
		<div id="">
			内容2
		</div>
		<div id="">
			内容3
		</div>
		<footer>
			页脚
		</footer>
	</body>
</html>

结果:

这个页面的页脚之间的内容经过浮动以后,下面的内容就会受到影响。为了消除这个阴险就可以使用clear属性在页脚上设置,页脚的浮动就会被清除,从而以标准流的形式展示:

为了让元素正常排列,需要对浮动后面的元素进行清除:

定位

​ 最后一种就是定位啦,细心地小伙伴就会发现浮动只能左右,不能上下,因此需要使用浮动来使元素上下布局就不可能了。这个时候我们就可以使用定位了。

定位使用position属性,它的值有下面几个:

static:默认值,元素默认的position属性

relative:相对定位,该定位相对于自身进行定位,定位后,原来的位置保留。即元素不脱标

absolute:绝对定位,相对带有带有任何定位的元素(static除外)的父元素或者祖先元素。如果都没有,就会根据body进行定位。元素脱标

fixed:固定定位,相对窗口进行定位。元素脱标

sticky:粘性定位。了解即可

使用了position的元素,还需要使用边偏移属性来移动元素,边偏移就是left、right、top、bottom四个方位名词。常用的单位就是px(像素)。默认元素定位从左上角开始。边偏移的值可以为负数。如果为负数表示向相反的方向移动。

默认的定位样式,即position:static 这个属性可以省略。

相对定位: position:relative

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title></title>
		<style type="text/css">
			
			* {
				margin: 0;
				padding: 0;
			}
			
			div {
				 200px;
				height: 200px;
				background-color: red;
				position: relative;
				top: 20px;
				left: 20px;
				}
			section {
				 200px;
				height: 200px;
				background-color: blue;
			}	
		</style>
	</head>
	<body>
		<div id="">
			
		</div>
		<section>
			
		</section>
	</body>
</html>

结果:

红色的盒子为相对定位,向右移动20px、向下移动了20px,因为相对定位不脱标,因此,下面的元素不会动。

【注意】:偏移的值代表在哪一个方向进行偏移,比如top:10的元素顶部有10px的偏移量,不是代表向上移动10px。

绝对定位:position:absolute

绝对定位会让元素脱标,哈还是以上面的例子,当把红色的盒子设置为绝对定位以后,它就脱标了,下面的元素就会排上来:

这里需要注意的是,上面的例子使用绝对定位,因为绝对定位的父元素没有定位属性,因此会按照哦body来进行定位。如果有父级元素定位元素,那么就会按照父级定位元素来定位:

红色边框为红色盒子的父元素,并且有定位属性(static除外),盒子就会按照边框盒子来进行定位,这是在实际开发中肯定会遇到的问题,有个口诀即父相子绝就是这个原理,当然父元素不一定为相对定位,只需要是一个定位属性即可。

固定定位 position:fixed

同样绝对定位也会让元素脱标,与绝对定位不同,它的根始终都是body,也就是它只根据body来定位,并且不随着滚动条滚动:

还是上面的代码,当把红色盒子的定位改为fixed,这时的参照我变为了窗口(body),就不会根据其他的定位原元素来进行定位了,并且不会随着滚动条滚动。

原文地址:https://www.cnblogs.com/qmlove/p/13289932.html