老师,请解释一下这个背景图设置为center top的原因?

老师,请解释一下这个背景图设置为center top的原因?

设置了dog的top之后,背景图片下部会出现空白?为什么


<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Hank Dog</title>
        <meta charset="utf/8">
        <link href="hankdog.css" type="text/css" rel="stylesheet"/>
    </head>
    <body>
        <div class="dog center">
            <!-- 额头 -->
            <div class="forehead center"></div>、
            <!-- 脸部 -->
            <div class="face center"></div>
            <!-- 下巴 -->
            <div class="chin center"></div>
            <!-- 左耳朵 -->
            <div class="ear"></div>
            <!-- 右耳朵 -->
            <div class="ear right"></div>
            <!-- 眼部标记 -->
            <div class="birthmark"></div>
            <!-- 左眼睛 -->
            <div class="eye">
                <!-- 眼球 -->
                <div class="eyeball"></div>
            </div>
            <!-- 右眼睛 -->
            <div class="eye right">
                <!-- 眼球 -->
                <div class="eyeball"></div>
            </div>
            <!-- 鼻子 -->
            <div class="nose center">
                <!-- 左鼻孔 -->
                <div class="nostril"></div>
                <!-- 右鼻孔 -->
                <div class="nostril right"></div>
            </div>
            <!-- 嘴巴 -->
            <div class="mouth center">
                <!-- 左边牙齿 -->
                <div class="tooth"></div>
                <!-- 右边牙齿 -->
                <div class="tooth right"></div>
                <!-- 舌头 -->
                <div class="tongue center"></div>
            </div>
            <!-- 身体部分 -->
            <div class="body center">
                <!-- 左胳膊 -->
               <div class="arm"></div>
               <!-- 右胳膊 -->
               <div class="arm right"></div>
               <!-- 左腿 -->
               <div class="leg">
                   <!-- 左脚 -->
                   <div class="foot"></div>
               </div>
               <!-- 右腿 -->
               <div class="leg right">
                   <!-- 右脚 -->
                   <div class="foot"></div>
               </div>
               <!-- 肚腩 -->
               <div class="belly center"></div>
            </div>
        </div>
    </body>
</html>


/* 清除内外边距 */
*{
    margin:0;
    padding:0;
}
/* 根元素,统一设置样式 */
:root{
    --hl: #1b2f90;
    --bg: #f9f9f6;
    --t: 1s;
}

body{
    background: url("bg.png") no-repeat center top ;
    background-size: 100% ;
}
/* 狗主体 */
.dog{
    width: 300px;
    height: 400px;
    position: relative;
    top:500px;
}
/* 设置居中 */
.center{
    position: absolute;
    left: 50%;/*右移父元素宽度的50% */
    transform: translate(-50%,0); /*左移自身宽度的50%*/
}
/* 让耳朵显示在头部的下面 */
.forehead,.face,.chin{
    z-index: 1;
}
/* 额头 */
.forehead{
    width:102px;
    height: 48px;
    background: var(--bg) ;
    border-radius: 51px/40px 40px 8px 8px;
}
/* 脸部 */
.face{
    width: 110px;
    height: 68px;
    background: var(--bg);
    border-radius: 50%;
    top:20px;
}
/* 下巴 */
.chin{
    width: 104px;
    height: 36px;
    background: var(--bg);
    border-radius: 52px/0px 0px 36px 36px;
    top:60px;
}
/* 左耳朵 */
.ear{
    width: 16px;
    height: 70px;
    background: var(--hl);
    border-radius: 50%;
    position: absolute;
    left: 50%;
    top:34px;
    transform-origin: 50% 0;/*因为设置了水平翻转,所以要设置翻转的中心*/
    transform: translate(-42px,0) rotate(10deg);
    z-index: 0;
    /* 动画部分 */
    animation:rotate var(--t) ease-out infinite;
}
/* 右耳朵 */
.ear.right{
    transform:scale(-1,1)  translate(-27px,0) rotate(10deg) ;
    animation:rotate-r var(--t) ease-out infinite;
    /* scale(-1,1)水平翻转 */
}
/* 眼部胎记 */
.birthmark{
    width: 30px;
    height: 36px;
    background: var(--hl);
    border-radius: 15px/17px 26px 2px 16px;
    position: absolute;
    left: 50%;
    top: 10px;
    z-index: 1;
    transform: translate(17px,0) rotate(-10deg);

}

/* 左眼睛部分 */
.eye{
    width: 24px;
    height: 24px;
    background: var(--bg);
    border-radius: 12px/12px 12px 12px 2px;
    position: absolute;
    left: 50%;
    top: 20px;
    transform-origin: 50% 0;
    transform: translate(-42px,0) rotate(10deg);
    z-index: 2;/*眼睛在脸部上方,所以设置的z-index值要比较大*/
    box-shadow: 1px 0 0 0 #000 inset, -1px 0 5px 1px #ccc;
    /* 眼眶是不可以让眼球超出去的 */
    overflow: hidden;
}
/* 右眼睛部分 */
.eye.right{
    transform:scale(-1,1)  translate(-21px,0) rotate(10deg) ;
    box-shadow: 1px 0 0 0 #000 inset;
    /* scale(-1,1)水平翻转 */
}
/* 眼球部分 */
.eyeball{
    width: 26px;
    height: 26px;
    background: #e79101;
    border-radius: 50%;
    position: absolute;
    left: 3px;
    top:1px;
    box-shadow: 0 0 5px 0 #000 inset;
    /* 动画效果 */
    animation: translate var(--t) ease-out infinite;
}
/*  眼球上面的白色和黑色部分。使用伪元素*/
.eyeball:before{
    content:"";
    display:block;
    width: 18px;
    height: 18px;
    background: #000;
    border-radius: 50%;
    position: absolute;
    top:50%;
    left: 50%;/*右移父元素宽度的50% */
    transform: translate(-50%,-50%); /*左移自身宽度的50%*/

}
.eyeball:after{
    content:"";
    display:block;
    width: 5px;
    height: 5px;
    background: #fff;
    border-radius: 50%;
    position: absolute;
    top:7px;
    left: 4px; 
}
/* 鼻子 */
.nose{
    width: 62px;
    height: 32px;
    top:42px;
    background: #373737;
    border-radius: 31px/10px 10px 22px 22px;
    z-index:3;
}
/* 鼻子上层的遮罩 */
.nose::before{
    content: "";
    display: block;
    width: 60px;
    height: 12px;
    position: absolute;
    top: 1px;
    left: 50%;
    transform: translate(-50%,0);
    border-radius: 30px/10px 10px 3px 3px;
    background: linear-gradient(10deg,#fff 0%, #fff 8%,#b1aeb1 15%, #b1aeb1 50%,#544d53 100%);
}
/*左 鼻孔 */
.nostril{
    width: 15px;
    height: 4px;
    background: linear-gradient(0deg,#363035 0%, #000 100%);
    position: absolute;
    top: 20px;
    left: 50%;
    border-radius: 50%;
    transform: translate(-20px ,0) rotate(30deg);
    /* 动画部分 */
    animation: resize var(--t) ease-out infinite;

}
/* 右鼻孔 */
.nostril.right{
    transform: scale(-1,1) translate(-8px ,0) rotate(30deg);
}
/* 嘴巴 */
.mouth{
    width: 68px;
    height: 20px;
    background: #671316;
    border-radius: 34px/ 0px 0px 20px 20px;
    z-index: 1;
    box-shadow: 0 0 4px 0 #000 inset;
    top: 70px;
    animation: open var(--t) ease-out infinite;
}
/* 嘴巴上面的遮罩 */
.mouth::before{
    content: "";
    display: block;
    width: 68px;
    height: 7px;
    background: var(--bg);
    border-radius: 34px/0 0 7px 7px;
    z-index:2;
}
/* 牙齿和舌头 */
.tooth{
    width: 8px;
    height: 3px;
    background: var(--bg);
    border-radius: 4px/0 0 0px 1px;
    position: absolute;
    left: 50%;
    top: 6px;
    transform: translate(-8px,0);
    z-index: 1;
}
.tooth.right{
    transform: scale(-1,1) translate(-1px,0);
}
.tongue{
    width: 34px;
    height: 14px;
    background: #a2504f;
    border-radius: 17px/0 0 7px 7px;
    z-index: -1;
    box-shadow: 0 0 4px 0 #111 inset;
    top: -2px;
    animation: extend var(--t) ease-out infinite;
}
/* 身体部分 */
.body{
    width: 66px;
    height: 70px;
    background: var(--bg);
    border-radius: 50%;
    top:90px;
}
/* 胳膊 */
.arm{
    width: 26px;
    height: 40px;
    background: var(--bg);
    border-radius: 13px/15px 0 0 20px;
    position: absolute;
    top: 5px;
    transform: translate(-7px,0) rotate(15deg);
}
/* 使用伪元素构造胳膊和身体之间的阴影 */
.arm::before{
    content: "";
    display: block;
    width: 5px;
    height: 28px;
    border-radius: 5px/13px 0 0 5px;
    box-shadow: -1px 0 0.5px 0 rgba(200,200,200,0.6);
    position: absolute;
    top: 10px;
    left: 13px;
    transform: rotate(1deg);
}
/* 右胳膊 */
.arm.right{
    transform: scale(-1,1) translate(-46px,0) rotate(15deg);
}

/* 腿部的样式 */
.leg{
    width: 29px;
    height: 50px;
    background: linear-gradient(-85deg,#ddd 0%, #ddd 1% ,#f9f9f6 20%,#f9f9f6 100%);
    border-radius: 15px/13px 5px 10px 40px;
    position: absolute;
    top: 36px;
    transform: translate(1px,0) rotate(1deg);
}
.leg.right{
    transform: scale(-1,1) translate(-37px,0) rotate(1deg);

}
/* 脚部 */
.foot{
    width: 29px;
    height: 15px;
    background: linear-gradient(-110deg,#ddd 0%, #ddd 10% ,#f9f9f6 20%,#f9f9f6 100%);
    border-radius: 7px/10px 10px 4px 4px;
    position: absolute;
    left: 2px;
    bottom: -10px;
}
/* 肚腩,为了遮盖腿部的阴影 */
.belly{
    z-index: 2;
    width: 52px;
    height: 36px;
    background: linear-gradient(0deg,#ddd 0%, #ddd 5%,#f9f9f6 20%,#f9f9f6 100%);
    border-radius: 30px/0 0 36px 36px;
    bottom: 0px;
}

/* 耳朵动画部分 */
@keyframes rotate{
    form{
        transform: translate(-42px,0) rotate(10deg) ;
    }
    50%{
        transform:translate(-42px,0) rotate(30deg) ;
    } 
    to{
        transform:translate(-42px,0) rotate(10deg) ;
    }
}
@keyframes rotate-r{
    from{
        transform:scale(-1,1)  translate(-27px,0) rotate(10deg) ;
    }
    50%{
        transform:scale(-1,1)  translate(-27px,0) rotate(30deg) ;
    }
    to{
        transform:scale(-1,1)  translate(-27px,0) rotate(10deg) ;
    }
}
/* 眼球动画部分 */
@keyframes translate{
    from{
        left:3px ;
    }
    50%{
         left:5px;
    }
    to{
        left:3px;
    }
}
/* 鼻孔动画部分 */
@keyframes resize{
    from{
        height:4px ;
    }
    50%{
         height:3px;
    }
    to{
        height:4px;
    }
}

/* 舌头动画部分 */
@keyframes extend{
    from{
        height:14px ;
    }
    50%{
         height:25px;
    }
    to{
        height:14px;
    }
}
/* 嘴巴动画部分 */
@keyframes open{
    from{
        height:20px ;
        border-radius: 34px/ 0px 0px 20px 20px;
    }
    50%{
         height:16px;
         border-radius: 34px/ 0px 0px 15px 15px;
    }
    to{
        height:20px;
        border-radius: 34px/ 0px 0px 20px 20px;
    }
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕粉 2020-04-29 17:37:09

同学你好,关于同学的问题回答如下:

1、当同学设置了背景图片大小时,背景图片会根据这个大小自适应显示,平铺整个页面,所以也会居中显示。

2、因为图片是自适应显示的,所以是按比例的,当宽度以某个比例显示时,高度也会相应的显示。所以当top值设置的过大时,狗狗又脱离了文档流,是根据页面的定位显示的,就会出现超出图片区域:

http://img1.sycdn.imooc.com//climg/5ea94a9d09e1f46b09770737.jpg

祝学习愉快~

好帮手慕粉 2020-04-29 11:29:18

同学你好,关于同学的问题回答如下:

1、这个是背景图片的background-position属性,默认值是left top,也就是左上角对齐,在大分辨率的电脑上,我们可以把设置背景图片的大小去掉,来对比下效果:
(1)当不设置背景图片大小时:
http://img1.sycdn.imooc.com//climg/5ea8f3c6098a0f3407310336.jpg

页面效果:

http://img1.sycdn.imooc.com//climg/5ea8f3d509e9977219200943.jpg

(2)当设置了居中对齐后:

http://img1.sycdn.imooc.com//climg/5ea8f409095891fe07010317.jpg

图片就会在网页中居中显示:

http://img1.sycdn.imooc.com//climg/5ea8f3fb092e48c119190941.jpg

所以这里设置center top是为了让背景图片在页面中居中显示。

2、在给图片设置了背景大小后,老师没有出现有空白间隙的情况:

http://img1.sycdn.imooc.com//climg/5ea8f45c09f2164a07140336.jpg

这个时候背景图片的大小是父容器的100%,按说是不会出现间隙的。

祝学习愉快~

  • 我试了一下:如果设置了,background-size:100%,那么不设置center top,效果也是一样的。老师的示例图这个小狗是飘在半空中的,如果把小狗移到草地上,比如top:700px。那么网页中图片下方就会出现空白
    2020-04-29 17:01:35
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师