博客列表 >内外边距应用和浮动与定位的使用--2019/07/05

内外边距应用和浮动与定位的使用--2019/07/05

LISTEN的博客
LISTEN的博客原创
2019年07月22日 16:29:21479浏览
  1. 理解并写出外边距的三个特征: 同级塌陷,嵌套传递,自动挤压的案例;

    实例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" href="css/style2.css">
        <title>外边距 margin</title>
    </head>
    <body>
    <!--
        1.同级上下塌陷、左右叠加
        2.嵌套传递
        3.自动挤压
    -->
    
    <!--1、同级上下塌陷-->
    <div class="box1"></div>
    <div class="box2"></div>
    
    <br>
    <!--1、同级左右叠加-->
    
    <div class="div1"></div>
    <div class="div2"></div>
    
    <br>
    <hr>
    
    <!--2.嵌套传递-->
    <div class="box3">
        <div class="box4"></div>
    </div>
    <hr>
    <div class="box5"></div>
    </body>
    </html>

    运行实例 »

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

    实例

    /********** 同级上下塌陷 **********/
    .box1{
        width: 100px;
        height: 100px;
        background-color: palegreen;
    }
    .box2{
        width: 100px;
        height: 100px;
        background-color: lightcoral;
    }
    
    .box1{
        margin-bottom: 30px;
    }
    .box2{
        margin-top:50px;
    }
    
    /* 从而得出一个结论: 当二个盒子上下排列时,外边距会出现塌陷现象,小的会陷到大的里面去,简称:"同级塌陷" */
    
    /********** 同级左右叠加 **********/
    .div1{
        width: 100px;
        height: 100px;
        background-color: darkblue;
        display: inline-block;
        margin-right: 30px;
    }
    .div2{
        width: 100px;
        height: 100px;
        background-color: lightskyblue;
        display: inline-block;
        margin-left: 50px;
    
    }
    
    
    /* 下面演示当二个盒子相互潜逃,为父子关系时,设置了margin会出现哪些问题? */
    
    /********** 嵌套传递 **********/
    
    .box3 {
        width: 200px;
        height: 200px;
        background-color: lightblue;
    }
    
    .box4 {
        width: 100px;
        height: 100px;
        background-color: lightcoral;
    }
    
    /* 我们的任务是:使box4离box3顶部之间有50px的间距,通过margin-top来实现 */
    .box4 {
        margin-top: 50px;
    }
    /* 结果发现不对, 外边距跑到了外部盒子box3上面去了,这就是外边距的"嵌套传递"现象 */
    /* 当给一个子盒子添加margin时,这个margin会自动传递到父级盒子上 */
    /* 所以,正确的做法是,给父级盒子添加内边距来实现 */
    /* 先复位 */
    .box4 {
        margin-top: 0;
    }
    
    .box3 {
        padding-top: 50px;
        /* 修改盒子高度,将撑开的50px的高度去掉 */
        height: 150px;
    }
    
    
    /* 下面演示margin的自动挤压,这是布局中使用非常广泛 */
    
    /********** 自动挤压 **********/
    
    .box5 {
        width: 100px;
        height: 100px;
        background-color: red;
    
        /*左侧添加auto,会尽可能将左侧空间分配给盒子左外边距,盒子被挤到最右边*/
        /*margin-left: auto;*/
        /*右侧添加auto,会尽可能将右侧空间分配给盒子右外边距,盒子被挤到最左边*/
        /*margin-right: auto;*/
        /*两行等价于,最终盒子居中 */
        /*margin: auto;*/
    
        /*距离顶部50,左右居中*/
        margin: 50px auto;
    }

    运行实例 »

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

    运行结果:

    外边距.png

    外边距三种特点:1.同级上下塌陷、左右叠加  2.嵌套传递  3.自动挤压

  2. 写案例,并分析内边距对盒中内容的影响,以及解决的三种方案是什么?


  3. 实例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" href="css/style1.css">
        <title>padding 图片居中显示</title>
    </head>
    <body>
    <!-- 将图片在容器中居中显示 -->
    <!--    方法1: 重新设置原盒子的宽度-->
    <div class="box1">
        <img src="images/girl.jpg" alt="小姐姐" width="200">
    </div>
    <hr>
    <!--    方法2: 宽度分离,利用父级div设置宽度,子级div继承的方法-->
    <div class="warp">
        <div class="box2">
            <img src="images/girl.jpg" alt="小姐姐" width="200">
        </div>
    </div>
    <hr>
    <!--    方法3: box-sizing :以特定的方式定义匹配某个区域的特定元素。content-box|border-box|inherit;-->
    <div class="box3">
        <img src="images/girl.jpg" alt="小姐姐" width="200">
    </div>
    </body>
    </html>

    运行实例 »

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

  4. 实例

    .box1{
        /*默认情况下,width是直接使用到盒子中的内容级content*/
        width: 300px;
        height: 300px;
        background-color:lightblue;
        border:3px solid black;
    }
    
    
    .box1{
        padding:50px;
        /* 会发现,内边距会增加盒子填充厚度,将盒子撑大 */
        /*如果想保持原来盒子大小,只能手工修改box1的宽高*/
        width: 200px;
        height: 200px;
    }
    
    /*********************** 方案2: 宽度分离 *********************/
    
    /* 给box2认一个干爹,添加一个父级盒子wrap, 这时box2就是儿子了, width就有效了*/
    /*这是利用于嵌套盒子之间,只有宽度可以继承的特征*/
    .warp{
        width: 300px;
        border:3px solid black;
    }
    
    .box2{
        padding :50px;
        background-color: lightcoral;
    
    }
    
    /*********************** 方案3: box-sizing 盒尺寸 *********************/
    
    /*经过前面学习, 知道了在默认情况下, 宽度是作用到盒中的内容上的*/
    /*而一个盒子有content,padding,border,margin四部分组成,所以改变宽度会造成盒子大小不确定*/
    /*方案2: 是将width宽度直接作用到了外部盒子上, 而box2此时就自动变成了warp的内容,所以会应用到width*/
    
    .box3{
        width: 300px;
        background-color: palegreen;
        border: 3px solid black;
        /*让宽度width作用到边框级,作用到内容级仍会撑开盒子的*/
        /*box-sizing: content-box;*/
        box-sizing:border-box;
    
        /*内边距不会撑开盒子, 因为宽度作用到了边框级, 与内容无关*/
        padding: 50px;
    }
    
    /* 总结:
    * 第一种方案DOM结构简单,但是要修改原盒子大小
    * 第二种方案不需要修改原盒子大小,但需要增加一个容器盒子
    * 第三种无疑是首选, 但是不同级别的盒元素,理解起来有困难
    
    */

    运行实例 »

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

    运行结果

     

内边距.png

让图片居中的三种方法:

方法1: 重新设置原盒子的宽度
方法2: 宽度分离,利用父级div设置宽度,子级div继承width属性的方法

方法3: box-sizing :以特定的方式定义匹配某个区域的特定元素。content-box|border-box|inherit;


3. 浮动的实现原理与清除的技巧

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="css/style3.css">
    <title>浮动float</title>
</head>
<body>
<!--
    1.文档流: html元素默认按照书写的顺序在浏览器中,遵循先从左到右,再从上到下进行排列
    2.布局前提: 通常先将元素从文档流中脱离,这样才能随心所欲的操作
    3.元素脱离文档流的手段: 浮动和绝对定位
-->

<!-- 浮动的基本原理 -->
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>

<!-- 第四个区块不需要浮动 -->
<div class="box4"></div>
</body>
</html>

运行实例 »

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

实例

.box1 {
    width: 150px;
    height: 150px;
    background-color: lawngreen;

}

.box2 {
    width: 200px;
    height: 200px;
    background-color: lightskyblue;
}

.box1{
    float: left;/* .box1 左浮动,脱离文档流,后面的区块自动前移占据了它的空间 */
}

.box2{
    float: left;
    /*
    第二个区块浮动后,相当于到了另一个由浮动元素组成的文档流中
    所以,它碰到前一个浮动元素后就停止了向左浮动,排到了前一个浮动元素的右边
    */
}

.box3 {
    width: 300px;
    height: 300px;
    background-color: lightcoral;
}

/* .box3 向右浮动,直到碰到浏览器窗口右边框为止,当窗口宽度缩小到不能容纳它时会自动掉到第二排 */
.box3 {
    float: right;
}



/*.box4 在文档流中,受前面浮动元素的影响,仍会自动上移并占据原浮动元素的空间*/
.box4 {
    height: 100px;
    background-color: blue;
}

/* .box4 第四个区块,我是不希望它浮动的, */
/*所以要消除前面的浮动元素对它的影响*/
.box4 {
    /* 可以通过清除浮动来解决 */
    clear: left;    /* 削除左边浮动元素的影响, 但会发现右浮动区块仍占据了它的一部分区别 */
    clear: right;   /* 消除掉右浮动元素对它的影响 */

    /* 因为这个清除左右浮动经常用,所以可以简写 */
    clear: both;
}

运行实例 »

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

运行结果

浮动.png


4. 相对定位与绝对定位的区别与联系,并实例演示

相对定位

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="css/style4.css">
    <title>定位与相对定位 position:relative</title>
</head>
<body>
<!--
  定位:将元素在页面中重新排列,分为四类
  1.静态定位: 浏览器默认方式, 即文档流中的位置
  2.相对定位: 元素并未脱离文档流,只是相对于它原来的位置,做相对移动
  3.绝对定位: 元素脱离文档流重新排列,不论元素之前是什么类型,全部转为块元素,支持宽高
  4.固定定位: 始终相对于浏览器的窗口做为定位父级,进行定位
-->
<!-- 相对定位小案例: 在页面中创建一个彩色十字架-->
<div class="box1">1</div>
<div class="box2">2</div>
<div class="box3">3</div>
<div class="box4">4</div>
<div class="box5">5</div>
</body>
</html>

运行实例 »

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

实例

.box1 {
    width: 150px;
    height: 150px;
    background-color: lightblue;
}

.box2 {
    width: 150px;
    height: 150px;
    background-color: lightgray;
}

.box3 {
    width: 150px;
    height: 150px;
    background-color: lightgreen;
}

.box4 {
    width: 150px;
    height: 150px;
    background-color: lightcoral;
}

.box5 {
    width: 150px;
    height: 150px;
    background-color: lightseagreen;
}

/* 相对定位 */
.box1{
    position: relative;
    left: 150px;
}

.box3{
    position: relative;
    left: 300px;
    top: -150px;/* 注: 这里必须使用负数才可以向反方向移动 */
}

.box4{
    position:relative;
    left: 150px;
    top:-300px;
}

.box5{
    position:relative;
    left: 150px;
    top:-300px;
}

运行实例 »

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

相对定位运行结果

相对定位.png


绝对定位

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="css/style5.css">
    <title>绝对定位 position:absolute</title>
</head>
<body>

<!--
    定位参照物:
    1. 相对定位, 是以元素在文档流中的原始位置为参照物进行定位的
    2. 绝对定位, 它是脱离了文档流的, 所有必须要有一个定位父级做为参照物
    position: absolute; 默认以整个窗口进行绝对定位, 定位父级是<body>
 -->
<div class="parent">
    <div class="box1">1</div>
    <div class="box2">2</div>
    <div class="box3">3</div>
    <div class="box4">4</div>
    <div class="box5">5</div>
</div>

</body>
</html>

运行实例 »

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

实例

.parent{
    position:relative;
    border:2px solid red;
    width: 450px;
    height: 450px;
}

.box1 {
    width: 150px;
    height: 150px;
    background-color: lightblue;
}

.box2 {
    width: 150px;
    height: 150px;
    background-color: lightgray;
}

.box3 {
    width: 150px;
    height: 150px;
    background-color: lightgreen;
}

.box4 {
    width: 150px;
    height: 150px;
    background-color: lightcoral;
}

.box5 {
    width: 150px;
    height: 150px;
    background-color: lightseagreen;
}

/*绝对定位*/
.box1{
    position: absolute;
    left: 150px;
}

.box2{
    position: absolute;
    top:150px;
}

.box3{
    position: absolute;
    left: 300px;
    top:150px;
}

.box4{
    position: absolute;
    left: 150px;
    top:150px;
}

.box5{
    position: absolute;
    left: 150px;
    top: 300px;
}

运行实例 »

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

绝对定位运行结果

绝对定位.png

定位:将元素在页面中重新排列,分为四类
1.静态定位(static): 浏览器默认方式, 即文档流中的位置
2.相对定位(relative): 元素并未脱离文档流,只是相对于它原来的位置,做相对移动
3.绝对定(absolute): 元素脱离文档流重新排列,不论元素之前是什么类型,全部转为块元素,支持宽高
4.固定定位(fixed): 始终相对于浏览器的窗口做为定位父级,进行定位

  1. 相对定位, 是以元素在文档流中的原始位置为参照物进行定位的

  2. 绝对定位, 它是脱离了文档流的, 所有必须要有一个定位父级做为参照物


5. 模仿完成课堂上的二个定位案例:模拟php中文网登陆(遮罩+绝对定位)和固定定位广告的展示方式

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="css/style6.css">
    <title>定位小案例</title>
</head>
<body>
<div class="shade"></div>
<div class="login"><img src="images/login.jpg" alt="登录"></div>
<div class="ads">
    <button onclick="this.parentNode.style.display='none'">X</button>
    <h2>小广告。。。。。。</h2>
    <h3>啦啦啦!!!</h3>
</div>
</body>
</html>

运行实例 »

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

实例

body{
    margin: 0;
    background-image: url(../images/php.jpg);
    background-size: cover;
    background-repeat: no-repeat;
}

.shade{
    position: absolute;
    left: 0;
    top:0;
    width: 100%;
    height: 100%;

    /* 将背景设置为纯黑,并通过透明度使背影内容透出来 */
    background-color: black;
    opacity:0.6;

}

.login img{
    width: 380px;
    height: 460px;
}

.login{
    background-color: white;
    position:absolute;
    left: 50%;
    top:50%;

    margin-left: -190px;
    margin-top: -230px;
}

.ads{
    width: 300px;
    height: 150px;
    background-color: lightskyblue;
    opacity: 0.8;
    position: fixed;
    right: 0;
    bottom: 0;
}

button{
    width: 70px;
    float: right;
    margin-top: 10px;
    margin-right: 20px;
    border: none;
    padding: 0;
    background-color: #888888;
    opacity:0.6;
    color: red;
    font-size:2em;
}

button:hover{
    background-color: lightcoral;
    color: black;
    border: 1px solid red;

}

h2,h3{
    padding-left: 20px;
    clear: both;
}

运行实例 »

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

运行结果

定位小案例.png

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