博客列表 >重点:元素对齐、定位、浮动—2018年8月16日

重点:元素对齐、定位、浮动—2018年8月16日

益伦的博客
益伦的博客原创
2018年08月20日 00:26:51784浏览

课程:PHP中文网上了第三期的培训(前端部分)

时间:2018年8月16号晚8点

讲师:Peter zhu!

内容:元素对齐、定位、浮动

<!--

    1. 固定定位与绝对定位是双胞胎,唯一的区别是定位父级不同.

    2. 绝对定位是相对于它最近的有定位属性的父级区块进行定位;

    3. 固定定位永远相对于当前的窗口进行定位(body)

    -->


实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>元素对齐方式</title>
</head>
<body>
<h3>元素对齐方式</h3>
1. 子元素是单行行内元素: 如a, span <br>
a:水平居中: 在父元素应用: text-align: center;
b:垂直居中: 在行内子元素上设置行高与父元素等高: line-height:200px;

<style>
    .box1 {
        width: 200px;
        <!--height: 200px;
        background-color: #ffff0a;
        <!--text-align: center;
    }
    .box1 a {-->
        <!--line-height: 200px;
    }
</style>
<div class="box1">
    <a href="">php中文网</a>
</div>
<hr> 

2. 子元素是多行的内联文本 <br>
a:水平居中: 在父元素应用: text-align: center;<br>
b:垂直居中: 在父元素: display:table-cell;


<style>
    .box2 {
        width: 200px;
        height: 200px;
        background-color: lightgreen;
        text-align: center;  /*水平居中*/
        display: table-cell;
        vertical-align: middle; /*垂直居中*/
    }
</style>
<div class="box2">
    <span>php中文网</span> <br>
    <span>www.php.cn</span>
</div>
<hr>
3.子元素是块元素 <br>
a: 水平居中: 子元素设置左右外边距自动适应容器margin: auto;
b:垂直居中: 在父元素: display:table-cell;
<style>
    .box3 {
        width: 200px;
        height: 200px;
        background-color: lightgreen;
        display: table-cell;
        vertical-align: middle; /*垂直居中*/
    }
    .box3 .child {
        width: 100px;
        height: 100px;
        background-color: lightcoral;
        /*margin-left: auto;*/
        /*margin-right: auto;*/
        margin: auto;  /*水平居中*/
    }
</style>
<div class="box3">
    <div class="child"></div>
</div>
<hr>
4. 子元素是不定宽的块元素
a: 水平居中: 子元素转为行内元素,父级加: text-align:center
b: 垂直居中: 在父元素: display:table-cell;
<style>
    .box4 {
        width: 200px;
        height: 200px;
        background-color: lightblue;
        text-align: center; /*水平居中*/
        display: table-cell;
        vertical-align: bottom; /*位于底部*/

    }
    ul {
        margin: 0;
        padding-left: 0;
    }
    .box4 li {
        display: inline;  /*将块元素转为行内元素*/
    }
</style>

<div class="box4">
    <ul>
        <li><a href="">1</a></li>
        <li><a href="">2</a></li>
        <li><a href="">3</a></li>
        <li><a href="">4</a></li>
        <li><a href="">5</a></li>
    </ul>
</div>

</body>
</html>

运行实例 »

3.png

分割线

绝对定位

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>绝对定位</title>
    <style>
        body {
            /*margin:0;*/
        }
        .box {
            width: 600px;
            height: 600px;
            /*background-color: wheat;*/
            /*定位父级必须设置定位属性*/
            position: relative;
        }
        .box1 {
            width: 200px;
            height: 200px;
            background-color: lightblue;
            /*绝对定位元素会脱离文档流*/
            position: absolute;
            top:0;
            left: 200px;

        }
        .box2 {
            width: 200px;
            height: 200px;
            background-color: lightgreen;
            position: absolute;
            top:200px;
            left:0;
        }
        .box3 {
            width: 200px;
            height: 200px;
            background-color: lightcoral;
            position: absolute;
            top: 200px;
            left: 400px;
        }
        .box4 {
            width: 200px;
            height: 200px;
            background-color: lightgrey;
            position: absolute;
            top: 400px;
            left: 200px;

        }

    </style>
</head>
<body>
<div class="box">
    <div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
    <div class="box4"></div>
</div>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

4.png

分割线

固定定位,及页面右下角广告案例

实例

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>固定定位</title>
</head>
<body>
    <!--
    1. 固定定位与绝对定位是双胞胎,唯一的区别是定位父级不同.
    2. 绝对定位是相对于它最近的有定位属性的父级区块进行定位;
    3. 固定定位永远相对于当前的窗口进行定位(body)
    -->

    <style>
        .box1 {
            position: fixed;
            bottom: 0; /*底部*/
            right: 0; /*右边*/
        }
        .close {
            position: absolute;
            right: 20px;
            top: 10px;
        }
    </style>

    <div class="box1">
        <a href="http://php.cn/k.html"><img src="images/ads.jpg" alt="广告"></a>
        <span class="close">X</span>

        <!--等学到js,再教大家如何关闭掉这个广告-->
        <!--<span class="close" onclick="this.parentNode.style.display='none' ">X</span>-->

    </div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

5.png

分割线

浮动

总结:

    1. 元素的水平方向浮动,意味着元素只能左右移动而不能上下移动。

    2.一个浮动元素会尽量向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。

    3.浮动元素之后的元素将围绕它。

    4.浮动元素之前的元素将不会受到影响。

    5.如果图像是右浮动,下面的文本流将环绕在它左边;

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>浮动的原理与清除浮动</title>
</head>
<body style="border: 1px dashed red">
<style>
    .box1 {
        width:200px;
        height: 200px;
        background-color: lightskyblue;

        float:left; /*设置左浮动*/
        /*下面绿色块看不到了,因为浮动元素脱离了文档流,绿色自动上移占据了原来蓝色块的位置*/
        /*如果想看到绿色块,只要将绿色块宽高调整大一点就可以*/
        /*得到第一个特点: 浮动元素与绝对定位元素一样,也脱离了文档流*/
    }
</style>
<div class="box1"></div>

<!--------------------------------------------------------------------------->

<style>
    .box2 {
        width: 200px;
        height: 200px;
        background-color: lightgreen;

        /*float:left; !*设置左浮动*!*/
        /*为什么会紧贴着第一个浮动的元素?*/
        /*因为第二个色块也脱离了文档流,与第一个是在同一个空间中,所以会挨着顺序排列,大家都上天了都是神仙*/
        float: right; /*浮动方向可以调整*/

        /*得到第二个特点:
         1.浮动元素之前的元素将不会受到影响(关掉.box1的浮动试试看),只对浮动元素后面的元素有影响
         2.多个浮动元素只能沿着水平方向排列,一行排不下自动换行
         */
    }
</style>
<div class="box2"></div>

<!--------------------------------------------------------------------------->
<style>
    .box3 {
        width: 900px;
        height: 200px;
        background-color: lightsalmon;

        clear: left; /*清除左边元素的浮云属性*/
        clear: right; /*清除右边元素的浮动属性,窗口调整到一定大小才会看到左右区块都回到文档流中*/

        clear: both; /* clear: left; clear: right; 的简写 */


    }
</style>
<div class="box3"></div>

<!--------------------------------------------------------------------------->

<style>
    .text {
        /*行内元素,它的宽高由内部文本决定,不支持用户自定义*/
        width: 200px;
        height: 200px;
        background-color: yellow;

        float: left; /*设置浮动*/
        /*浮动使元素脱离了文档流,同时使行内元素也支持了宽高,表现出与块级元素一样的特征*/
        /*可以看出该文本块已在不在body中了,脱离了文档流,说明浮动的确仅影响到后面的元素*/

    }
</style>
 <span class="text">php中文网</span>


<!--
    总结:
    1. 元素的水平方向浮动,意味着元素只能左右移动而不能上下移动。
    2.一个浮动元素会尽量向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
    3.浮动元素之后的元素将围绕它。
    4.浮动元素之前的元素将不会受到影响。
    5.如果图像是右浮动,下面的文本流将环绕在它左边;
-->
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

6.png

分割线

子元素浮动引起的父级区块高度塌陷的解决方案

实例

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>子元素浮动引起的父级区块高度塌陷的解决方案</title>
</head>
<body>
<style>
	.box1 {
		border: 5px dashed red;

		/*
		流式布局中,子块高度撑开父块
		子块浮动后,脱离文档流,父块失去高度限制,自动折叠,出现高度塌陷
		解决方案有三种:
		*/

		/*方案一:给父级区块加高度,优点是简单,缺点是不能自适应子块高度变化*/
		/*height: 400px;  !*父块加高度的方案不推荐*!*/

		/*方案二:父级区块加:overflow: hidden;(溢出隐藏)*/
		/*overflow: hidden;  !*部分浏览器可能会存在兼容性,例如IE,可能会出现gun动条*!*/
	}

	/*方案三: 给父级区块添加伪类元素解决*/
	.box1:after {
		content: '';  /*添加空内容元素*/
		display: block; /*将添加的空元素转为块级元素*/
		clear: both; /*清除该空元素前面元素的浮动属性,使之回到文档流中,以撑开父级高度*/
	}

	.box2 {
		height: 400px;
		width: 100%;
		background-color: lightgreen;

		float: left;
	}
</style>
<div class="box1">
	<div class="box2"></div>

	<!--方案四: 添加附加空区块,仅仅用来清除前面元素的浮动属性-->
	<!--不推荐,因为后端进行数据绑定时会遇到麻烦:例如循环输出数据,需要对它单独处理-->
	<div style="clear: both;"></div>
</div>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议