博客列表 >交作业5:内外边距定位与浮动(2019-7-5)

交作业5:内外边距定位与浮动(2019-7-5)

强风工作室
强风工作室原创
2019年07月29日 08:16:49785浏览

老师:目前我的学习进度是跟不上的,我基础差,从JS开始已经跟不上了,不过我一定会认真学完每一课,做好每一次作业的,只是会做的慢一点。每一节课的知识量很大,我需要慢慢搞懂老师讲到的每一个概念。


7月5日直播课作业:

作业1-4可预览网址:

微信图片_20190728235108.png

作业1:理解并写出外边距的三个特征: 同级塌陷,嵌套传递,自动挤压的案例;

(1)同级塌陷:

同级塌陷指的是同级元素呈上下排列的时候,两个元素的外边距会互相塌陷,只呈现出其中一个较大的外边距,但同级元素的左右外边距不会塌陷。实际运用中需要知道这个html特性,便于利用和操作。

 

(2)嵌套传递:

元素内容的外边距会直接传递给元素的外边距,导致外边距被撑大。实际运用中应该避免外边距的嵌套传递,而采用内边距来控制元素的内容。

 

(3)自动挤压:

通过设置元素的外边距为自动,浏览器会把尽可能多的空间分配给外边距,这样就会将元素尽可能往另一边的空间挤压过去,并且不管浏览器的宽度怎么变化,元素都能够一直保持这被羁押的状态。当左右外边距都设置为auto的时候,左右外边距都会对元素进行挤压,就会把元素寄到浏览器的居中位置了,善用改特性,能够在不居中是元素居中。

 

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

方法一:重设宽高

1、通过先撑大盒子,再重新设置盒子的宽度来使内容居中。

2、设置父盒子宽高为300,设置盒子的内边距为50,挤压内容使之居中,但由于设置内边距为50之后,父盒子会被随之撑大,需要重设父宽高为200,才能减去撑大的部分,使内容刚好居中。

3、这个方法并不好,不利于元素大小的调整,需要调节的参数会很多。

实例

.box1 {
    background-color: aquamarine;

    /*设置父盒子宽高为300,但由于设置内边距为50之后,需要重设宽高为200,才能减去撑大的部分,所以在这里直接设为200*/
    width: 200px;
    height: 200px;

    /*设置盒子的内边距为50,挤压内容使之居中*/
    padding: 50px;
}

/*将box2作为box1的内容*/
.neirong {
    background-color: darksalmon;
    width: 200px;
    height: 200px;
}

运行实例 »

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

 

实例
<div>

    <div class="box1">

        <div class="neirong"></div>

    </div>

</div>

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

 

方法二:宽度分离

1、在最外层再加上一个壳,相当于有三层,最里层为内容,最外层为壳,中间层为原来的父盒子。

2、在壳只设置宽度,此时壳有形却不可见,利用子盒子只继承父盒子宽度的原理,父盒子自动撑大,宽高变成跟壳一致,然后在父盒子设置内边距,使将内容刚好被挤压到居中的位置。

3、简洁好用。

实例

/*将box2作为box1的内容*/
.neirong {
    background-color: darksalmon;
    width: 200px;
    height: 200px;
}

/*给父盒子再套一个壳*/
.ke {
    width: 300px;
}

.box2 {
    background-color: aquamarine;
    padding: 50px;
}

运行实例 »

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

实例

<div class="ke">
    <div class="box2">
        <div class="neirong"></div>
    </div>
</div>

运行实例 »

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

 

 

方法三:将父盒子的宽度设置到边框上

1、根据方法二的理解,只要在父盒子外增加一个外层,并将宽度设置在外层,父盒子就可以继承宽度,不会导致被撑大。此时,我们可以把父盒子的边框看做是外层,在边框上设置宽度,那么父盒子就被作为内容,继承了边框的宽度,而不需要另外设置一个外层。跟方法二有异曲同工之妙,却更加简洁优雅。

2、此方法会压缩内容的宽高,如果压缩后的内容区域小于内容的实际尺寸,内容的画面会被裁剪。

3、这个方法最好,多利用。

实例

.neirong {
    background-color: darksalmon;
    width: 200px;
    height: 200px;
}

.box3 {
    width: 300px;
    height: 300px;
    /*把父盒子的边框作为外壳,父盒子变成了内容,宽度设置在边框上就相当于设置在外层上,父盒子作为内容自动继承宽度*/
    box-sizing: border-box;
    background-color: aquamarine;
    padding: 50px;
    border: black 1px solid;
}

运行实例 »

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

 

实例

<div class="box3">
        <div class="neirong"></div>
</div>

运行实例 »

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

 

作业3:浮动的实现原理与清除的技巧

(1)浮动:

浏览器的默认布局是文档流,不美也不受控制。为了控制布局,做到随心所欲的布局,元素必须脱离文档流,脱离浏览器的控制。脱离文档流的方法分为两种:一种是浮动,一种是定位。

元素浮动之后,不占据文档流的位置,会浮在文档流的上层,还在文档流中的元素将会前挪。浮动后的元素会左浮动或者右浮动,直到碰到边框或者另一个浮动元素的边缘,各个元素自动紧贴排列。

浮动元素只影响后面的元素,不影响前面的元素,如果前面的元素没有浮动,浮动的元素并不会盖住前面的元素,但后面的元素往上排列后会被浮动元素盖住。

浮动的适用场景是文字环绕效果,另外,浮动可以实现常规的多列布局,更适合实现自适应多列布局,比如左侧固定宽度,右侧根据父元素宽度自适应。

 

(2)清除浮动:

浮动会导致父元素高度坍塌。解决父元素高度坍塌的方式就是清除浮动,常规的方法是clear清除浮动和BFC清除浮动,推荐clearfix的方式。

 

 

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

(1)相对定位(position: relative):

没有脱离文档流,通常用来做为绝对定位的父级。定位的基准是元素在文档流中的原始位置为原点,父级不需要定位属性。

实例:

实例

.xddw {
    /*position: relative;*/
    width: 400px;
    height: 400px;
    border: coral solid 1px;
}

.xd1 {
    position: relative;
    width: 100px;
    height: 100px;
    background-color: aquamarine;

    /*设置位置*/
    top: 0;
    left: 100px;
}

.xd2 {
    position: relative;
    width: 100px;
    height: 100px;
    background-color: darksalmon;
}

.xd3 {
    position: relative;
    width: 100px;
    height: 100px;
    background-color: lightgoldenrodyellow;

    /*设置位置*/
    top: -100px;
    left: 100px;
}

.xd4 {
    position: relative;
    width: 100px;
    height: 100px;
    background-color: blueviolet;

    /*设置位置*/
    top: -200px;
    left: 200px;
}

.xd5 {
    position: relative;
    width: 100px;
    height: 100px;
    background-color: lightseagreen;

    /*设置位置*/
    top: -200px;
    left: 100px;
}

运行实例 »

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

实例

    <div class="xddw">
        <div class="xd1">1</div>
        <div class="xd2">2</div>
        <div class="xd3">3</div>
        <div class="xd4">4</div>
        <div class="xd5">5</div>
    </div>

运行实例 »

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

 

 

(2)绝对定位(position: absolute):

脱离文档流,必须有定位父级,父级必须设有定位属性,且不能是静态定位。CSS中必须设置TOP等值,否则不能脱离文档流。定位的基准是以父级的左上角坐标(0,0)为原点。是大多数场景使用的布局。

实例:

实例

.jddw {
    position: relative;
    width: 400px;
    height: 400px;
    border: coral solid 1px;
}

.jd1 {
    position: absolute;
    width: 100px;
    height: 100px;
    background-color: aquamarine;

    /*设置位置*/
    top: 0;
    left: 100px;
}

.jd2 {
    position: absolute;
    width: 100px;
    height: 100px;
    background-color: darksalmon;

    /*设置位置*/
    top: 100px;
    left: 0;
}

.jd3 {
    position: absolute;
    width: 100px;
    height: 100px;
    background-color: lightgoldenrodyellow;

    /*设置位置*/
    top: 100px;
    left: 100px;
}

.jd4 {
    position: absolute;
    width: 100px;
    height: 100px;
    background-color: blueviolet;

    /*设置位置*/
    top: 100px;
    left: 200px;
}

.jd5 {
    position: absolute;
    width: 100px;
    height: 100px;
    background-color: lightseagreen;

    /*设置位置*/
    top: 200px;
    left: 100px;
}

运行实例 »

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

 

实例

    <div class="jddw">
        <div class="jd1">1</div>
        <div class="jd2">2</div>
        <div class="jd3">3</div>
        <div class="jd4">4</div>
        <div class="jd5">5</div>
    </div>

运行实例 »

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

 

(3)固定定位(position: fixed):

脱离文档流,以窗口为原点进行上下左右的定位,不随页面滚动,通常用语固定位置的浮动广告。(实例在作业5中体现)

 

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

作业中有一个疑问:按理绝对定位时必须有定位父级,但是我在设定遮罩和登录框时却没有定位父级,为何还能够正常显示呢?恳请老师解答。

 

作业5可预览网址:

微信图片_20190728235312.png

实例

.back {
    width: 1371px;
    height: 526px;
    margin: auto;
    background-image: url("../image/back.png");
}

.foot {
    width: 479px;
    height: 108px;
    margin: auto;
    background-image: url("../image/foot.png");
}

.shade {
    /* 遮罩绝对定位,并自动伸展到整个窗口 */
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;

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

.login {
    /* 遮罩绝对定位,定位到画面居中*/
    position: absolute;
    width: 349px;
    height: 371px;
    left: 50%;
    top: 50%;
    margin-left: -174px;
    margin-top: -285px;
}

.ads {
    position: fixed;
    right: 0;
    bottom: 25px;
    width: 388px;
    height: 491px;
}

运行实例 »

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

 

 

实例

<h1>7月5日直播课作业5</h1>
<hr>
<!--作业5:模仿完成课堂上的二个定位案例:模拟php中文网登陆(遮罩+绝对定位)和固定定位广告的展示方式-->
<h3>作业5:模仿完成课堂上的二个定位案例:模拟php中文网登陆(遮罩+绝对定位)和固定定位广告的展示方式</h3>
<!--背景图-->
<div class="back"></div>
<div class="foot"></div>
<div class="shade"></div>
<div class="login"><img src="static/image/login.png" alt="" ></div>
<div class="ads">
        <div>
            <button onclick="this.parentNode.style.display = 'none'">X</button>
            <img src="static/image/kf.png" alt="">
        </div>
</div>

运行实例 »

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

 

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