2_31_页面布局定位(CSS+DIV布局)_191029

内容提要

实现页面布局的三种方式:表格布局、框架布局、DIV+CSS布局

一、表格布局

1、优点
(1)实现方式比较简单。
(2)各个元素可以位于独立的单元格中,相互影响较小,而且对于浏览器的兼容性较好。
2、缺陷
(1)在某些浏览器下(例如IE),表格只有在全部下载完成后才可以显示。数据量比较大时会影响网页的浏览速度。
(2)搜索引擎难以分析较复杂的表格,而且网页样式的改版也比较麻烦。
(3)在多重表格嵌套的情况下,代码可读性较差,页面下载的速度也会受到影响。
3、目前,除了规模较小的网站之外,一般不采用表格布局

二、框架布局:
(1)利用框架来对页面空间进行有效的划分,每个区域可以显示不同的网页内容,各个区域之间互不影响。
(2)使用框架进行布局,可以使网页更整洁、清晰,网页下载的速度较快。
(3)但是如果框架使用较多,也会影响网页的浏览速度。对于内容较多,较复杂的网站最好不要采用框架布局。
(4)另外,框架和浏览器的兼容性不好,保存比较麻烦,应用的范围有限,一般也只应用于较小规模的网站。

三、DIV+CSS布局
对于规模较大的、比较复杂的网站大多数采用DIV+CSS方式来进行布局。DIV+CSS布局方式具有较为明显的优势。
1、优点
(1)内容和表现相分离。
(2)对搜索引擎的支持更加友好。
(3)文件代码更加精简,执行速度更快。
(4)易于维护。
2、缺陷
(1)DIV+CSS方式实现起来比较复杂,初学者不易掌握。
(2)DIV+CSS方式对于元素的控制太灵活,容易出错。
(3)DIV+CSS方式还没有解决浏览器的完全兼容。例如在IE浏览器上可以正常显示的页面,换作其它浏览器显示可能会面目全非。
(4)使用DIV+CSS布局网页的开发成本较高,开发周期较长。


CSS盒模型布局


• 在CSS中,页面中的所有元素都可以看成一个盒子,占据着页面上的一定的空间。
• CSS盒模型(Box Model)规定了元素处理内容内边距边框外边距 的方式。

CSS盒模型主要由四部分组成:
content: 盒模型里的内容,即元素的内容。
padding: 内边距,也称填充,指内容与边框的间距。
border: 边框,指盒子本身。
margin: 外边距,指与其他盒模型的距离。外边距默认是透明的,因此不会遮挡其后面的任何元素。

一个盒子的实际宽度或高度为:
content + padding + border

例如:
在这里插入图片描述
• 盒宽度= 1 + 10 + 300 + 10 + 1 = 322px
• 盒高度= 1 + 10 + 200 + 10 + 1 = 222px

盒子的宽度 =  content-width + border-left + border-right + padding-left + padding-right
盒子的高度 = content-height + border-top + border-bottom + padding-top + padding-bottom

在这里插入图片描述
可以通过 CSS 来控制这些盒子的显示属性,把这些盒子进行定位完成整个页面的布局,盒模型是CSS定位布局的核心内容。

• 内边距、边框和外边距可以应用于一个元素的所有边,也可以应用于单独的边,盒模型内边距、边框和外边距按照顺时针的顺序,可分别为 top、right、bottom 和 left 四个边。
在这里插入图片描述
(一)内边距 (padding)

元素的内边距在 边框内容区 之间,padding 属性定义元素边框与元素内容之间的空白区域。内边距会影响盒子的可见框的大小,元素的背景会延伸到内边距。

1、属性

(1) 定义元素的内边距,属性值可以使用 长度值百分比值,但不允许使用负值

如希望所有h1元素的各边都有10像素的内边距:
	h1{
		padding:10px;
		}

(2) 还可以按照 上、右、下、左 的顺序分别设置各边的内边距,各边均可以使用不同的单位 或 百分比值。

如:
h1{
	padding:10px 0.25em 2ex 20%;
	}

2、单边内边距
在这里插入图片描述
• 通过使用 padding-top、padding-right、padding-bottom和padding-left四个单独的属性,分别设置上、右、下、左内边距。

如:
h1{
	  padding-top:10px;
	  padding-right:0.25em;
	  padding-bottom:2ex;
	  padding-left:20%; 
	}

3、内边距的百分比数值

• 可以为元素的内边距设置百分数值,百分数值是相对于其父元素的width计算的。上下内边距与左右内边距一致,即上下内边距的百分数会相对于父元素宽度设置,而不是相对于高度。

如下面这条规则把段落的内边距设置为父元素width的10%:
p	{ 
	padding:10%;
	}

• 下面实例说明了如何设置CSS内边距。

<!DOCTYPE html>
<html lang="en">
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<title>padding</title>
		<style type="text/css">
		div{
			border:1px solid #F00;
			margin-bottom:2px;
			}
		#div1{
				padding:1.5cm	
				}
		#div2{
				padding:0.5cm 2.5cm
				}
		</style>
	</head>
<body>
<div id="div1"><span>每个边拥有相等的内边距</span></div>
<div id="div2"><span>上和下内边距是 0.5cm,左和右内边距是 			2.5cm</span></div>
</body>
</html>

在这里插入图片描述
(二)外边距(margin)

指的是 当前盒子其他盒子 之间的距离,他不会影响可见框的大小,而是会影响到盒子的位置

1、盒子有四个方向的外边距:

margin-top :
margin-right :
margin- bottom :
margin-left :

2、外边距同样可以使用 简写 属性margin:

(1)margin:10px;   (上右下左均为10px)

(2)margin:10px 20px;    (上下    左右)

3、可以 同时设置 四个方向的外边距 :

margin: 10px 20px 30px 40px;   (上  右  下   左)

4、margin还可以设置为auto,。auto一般只设置给水平方向的margin。

如:
	margin:0   auto;   (水平方向——居中)

注:(1)如果只指定 左外边距 或 右外边距 的 margin 为 auto 则会将外边距设置为最大值
(2)垂直方向外边距如果设置为 auto,则外边距默认就是 0,
就可以使元表自动在父元素中居中,所以我们经常将左右外边距设置为auto以使于子元素在父元素中水平居中

5、使网页整体居中
要使最外层的 div 在页面上居中显示,可使用以下样式:

#container{
  margin:0 auto; // 盒子水平居中
  text-align:center;
}

其中,margin:0 auto;指的是上下边距为0,左右为自动边距,对于IE6以上的浏览器可以实现居中。
text-align:center;是为了兼容IE6以下版本的浏览器。

6、垂直外边距
(1)在网页中垂直方向的相邻外边距会发生外边距的重叠
(2)外边距重叠指兄弟元素之间的相邻外边距会取最大值而不是取和


DIV布局


• DIV全称为 Division(分隔),代表网页内容中的一个逻辑区域。DIV相当于一个容器,由起始标签 < div> 和结束标签 < /div> 以及其中的内容组成。在DIV内部可以嵌套各类元素。
• 一般的网页需要包括标志、站点名称、主页面内容、站点导航、子菜单、搜索区、功能区以及页脚等部分。每一部分可以使用一个div表示。各个div组成了整个网页的结构。每一个div都可以使用CSS的定位属性使其显示在页面的合适位置。

一、默认布局
div的默认布局为垂直排列。每个div在默认情况下是块级元素,div前后会出现换行。

例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>DIV的默认布局-垂直排列</title>
    <style type="text/css">
        #lay1{
            width:200px;
            height:30px;
            background-color:#90EE90;
        }
        #lay2{
            width:200px;
            height:30px;
            background-color:#FFFACD;
        }
        #lay3{
            width:200px;
            height:30px;
            background-color:#F08080;
        }
    </style>
</head>
<body>
<div id="lay1">1</div>
<div id="lay2">2</div>
<div id="lay3">3</div>
</body>
</html>

效果如下:
在这里插入图片描述
二、水平排列
如果要div水平排列,只需要将 div 的 float 属性设置为 left 即可。

即:
  #lay1{
            float:left;
        }

例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>DIV默认布局—水平排列</title>
    <style type="text/css">
        #lay1{
            width:100px;
            height:30px;
            background-color:#90EE90;
            float:left;
        }
        #lay2{
            width:100px;
            height:30px;
            background-color:#FFFACD;
            float:left;
        }
        #lay3{
            width:100px;
            height:30px;
            background-color:#F08080;
            float:left;
        }
    </style>
</head>
<body>
<div id="lay1">1</div>
<div id="lay2">2</div>
<div id="lay3">3</div>
</body>
</html>

效果如下:
在这里插入图片描述

三、div的嵌套
div之间可以互相嵌套,可以通过设置div的相关属性来确定各个div之间的位置。

例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DIV的嵌套</title>
    <style type="text/css">
        #container{
            width:300px;
            height:120px;
            background-color:#7B68EE;
            padding-top:10px;
            padding-right:20px;
            padding-bottom:10px;
            padding-left:20px;
            text-align:center;
            /*水平居中*/
        	margin-left:auto;  /*左外边距 最大值*/
        	margin-right:auto;  /*右外边距 最大值*/
        }
        #lay1{
            width:200px;
            height:30px;
            background-color:#90EE90;
        }
        #lay2{
            width:200px;
            height:30px;
            background-color:#FFFACD;
        }
        #lay3{
            width:200px;
            height:30px;
            background-color:#F08080;
        }
    </style>
</head>
<body>
<div id="container">
    <div id="lay1">1</div>
    <div id="lay2">2</div>
    <div id="lay3">3</div>
</div>
</body>
</html>

效果如下:
在这里插入图片描述
四、div 浮动
当div的 float 属性取值为 left 或者 right 时,即成为浮动对象。

div用于网页布局时,一般都是嵌套的。如果外层的 div 没有设定大小,而内层的 div 又是浮动的,浮动对象的物理位置会脱离文档流,因而对其父元素或者其后的元素的布局会产生影响,甚至会出现布局混乱的现象。

如:①
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DIV的浮动</title>
    <style type="text/css">
        #container{
            background-color:#7B68EE;
        }
        #lay1{
            float: left;
            width:200px;
            height:30px;
            background-color:#90EE90;
        }
        #lay2{
            width:200px;
            height:30px;
            background-color:#FFFACD;
        }
        #lay3{
            float: left;
            width:200px;
            height:30px;
            background-color:#F08080;
        }
    </style>
</head>
<body>
<div id="container">
    <div id="lay1">1</div>
    <div id="lay2">2</div>
    <div id="lay3">3</div>
</div>
</body>
</html>	

在这里插入图片描述

如:②
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DIV的浮动</title>
    <style type="text/css">
        #container{
            background-color:#7B68EE;
        }
        #lay1{

            width:200px;
            height:30px;
            background-color:#90EE90;
        }
        #lay2{
            float: left;
            width:200px;
            height:30px;
            background-color:#FFFACD;
        }
        #lay3{
            float: left;
            width:200px;
            height:30px;
            background-color:#F08080;
        }
    </style>
</head>
<body>
<div id="container">
    <div id="lay1">1</div>
    <div id="lay2">2</div>
    <div id="lay3">3</div>
</div>
</body>
</html>

在这里插入图片描述
清除浮动可以消除浮动对象对其它元素的影响。
一般可以采用四种方法来清除浮动,分别为使用 空标签、使用 overflow 属性、使用 after伪对象 以及 浮动外部元素

(一)使用空标签
使用空标签是最常用的清除浮动的方法,也是W3C推荐使用的方法。
空标签可以采用块级元素。

例如:<div>、<p> 以及 <br/> 等。

在浮动元素之后添加一个空标签,并使其 clear 属性取值为both(或者除 none 之外的其它属性值)。

例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用空标签消除浮动</title>
    <style type="text/css">
        #container{
            background-color:#7B68EE;
            text-align:center;
            margin-left:auto;
            margin-right:auto;
            padding:10px;
        }
        #lay1{
            width:30%;
            height:50px;
            background-color:#90EE90;
            float:left;
        }
        #lay2{
            width:60%;
            height:60px;
            background-color:#FFFACD;
            float:right;
        }
    </style>
</head>
<body>
<div id="container">
    <div id="lay1"></div>
    <div id="lay2"></div>
    <div style="clear:both"></div>   <!--空标签消除浮动-->
</div>
</body>
</html>

效果如下:
在这里插入图片描述
(二)使用overflow属性
可以把父级元素的 overflow 属性设置成 hidden、auto 或者 scroll 来清除浮动。

例:

<!DOCTYPE html>
<html lang="en">
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>使用overflow属性消除浮动</title>
        <style type="text/css">
            #container{
                background-color:#7B68EE;
                text-align:center;
                margin-left:auto;
                margin-right:auto;
                padding:10px;
                overflow:auto;
                zoom:1;
            }
            #lay1{
                width:30%;
                height:50px;
                background-color:#90EE90;
                float:left;
            }
            #lay2{
                width:60%;
                height:60px;
                background-color:#FFFACD;
                float:right;
            }
        </style>
</head>
<body>
<div id="container">
    <div id="lay1"></div>
    <div id="lay2"></div>
</div>
</body>
</html>

在这里插入图片描述

例:

(未清除浮动的div嵌套)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用空标签消除浮动</title>
    <style type="text/css">
        #container{
            background-color:#7B68EE;
            text-align:center;
            margin-left:auto;
            margin-right:auto;
            padding:10px;
        }
        #lay1{
            width:30%;
            height:50px;
            background-color:#90EE90;
            float:left;
        }
        #lay2{
            width:60%;
            height:60px;
            background-color:#FFFACD;
            float:right;
        }
    </style>
</head>
<body>
<div id="container">
    <div id="lay1"></div>
    <div id="lay2"></div>
<!--    <div style="clear:both"></div>  &lt;!&ndash;空标签消除浮动&ndash;&gt;-->
</div>
</body>
</html>

效果如下:
在这里插入图片描述

练习:
在这里插入图片描述
要求: 第一行嵌套在一个div中,注意需要清除浮动(overflow),2、3行也一样。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>div盒子嵌套练习</title>
    <link href="12.jpeg" rel="icon">
    <style>
        .box{ /*在 div 的 type 中添加另一个属性值同意设置,以便减少代码书写*/
            width: 200px;
            height: 100px;
            border: 10px solid #cccbc5;
            background-color:darkseagreen;
            margin: 10px;
            float: left;
            padding: 10px;
        }
        .xiao{
            width: 160px;
            height: 60px;
            background-color: #cccccc;
            border: 10px solid #92a1eb;
            padding: 10px;
            margin: 10px;
            float: right;
        }
        .main{
            overflow: hidden; /*利用overflow属性清除浮动*/
        }
    </style>
</head>
<body>
<div>
    <div class="box1 box">这个盒子大小为240*140px<br/>内容区为200*100px</div>
    <div class="box2 box">这个盒子大小为240*140px<br/>内容区为200*100px</div>
    <div class="box3 box">这个盒子大小为240*140px<br/>内容区为200*100px</div>
    <div  style="clear:both">   <!--利用空标签清除浮动-->
</div>

<div class="main">
    <div class="box4 box">这个盒子大小为240*140px<br/>内容区为200*100px</div>
    <div class="box5 box">这个盒子大小为240*140px<br/>内容区为200*100px</div>
</div>

<div class="box6 xiao">这个盒子大小为200*100px<br/>内容区为160*60px</div>
<div class="box7 xiao">这个盒子大小为200*100px<br/>内容区为160*60px</div>
</body>
</html>

效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值