zoukankan      html  css  js  c++  java
  • 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),就不会根据其他的定位原元素来进行定位了,并且不会随着滚动条滚动。

  • 相关阅读:
    ES 使用小结
    TruncateATable 清除一张表
    js 排序,去重
    读高性能JavaScript编程 第四章 Conditionals
    读高性能JavaScript编程 第四章 Duff's Device
    c# AOP 文章地址
    String、StringBuffer与StringBuilder之间区别
    批处理命令
    C#中的is和as操作符
    c# 入门
  • 原文地址:https://www.cnblogs.com/qmlove/p/13289932.html
Copyright © 2011-2022 走看看