问下老师,margin-left,margin-right负值的问题

问下老师,margin-left,margin-right负值的问题

  1. .left设置 margin-left: -220px和margin-right: -220px时,盒子是怎样运动的?为什么margin-right: -220px时,.left可以占据 .con的padding的位置(.left在 .con内容框之外);而margin-left: -220px时, .left没有占据padding位置只是在 .con内容框以内呢?

  2. 我的head和foot宽度有问题

<!DOCTYPE html>

<html>

<head>

<title></title>

<meta charset="utf-8">

<style>

*{

padding:0;

margin:0;


}

.header,.foot{

width:100%;

height:100px;

background:gray;

text-align:center;

line-height:100px;




}

.con{

height:800px;

width:100%;

padding:0px 200px 0px 220px;


}

.left{

width:220px;

background:blue;

height:200px;

}

.right{

width:200px;

background:yellow;

height:200px;


}

.middle{

background:red;

width:100%;

height:200px;

}

.middle,.left,.right{

float:left;

position:relative;



}

.left{

margin-right:-220px;

/*left:-220px;*/

}

.right{

/*margin-right:-250px;*/

}

</style>

</head>

<body>

<div class="header">header</div>

<div class="con">

<div class="middle">这是中间内容这是中间内容这是中间内容这是中间内容这是中间内容这是中间内容这是中间内容这是中间内容</div>

<div class="left">这是左边内容这是左边内容</div>

<div class="right">这是右边内容这是右边内容</div>

</div>

<div class="foot">foot</div>

</body>

</html>


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

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

4回答
山河远阔ZZ 2019-03-14 15:24:57

同学你好,元素设置margin-right负值会向右走,当移动的距离大于等于自身宽度的时候(正值比较),就会显示在最右边不动,占据padding的位置;

山河远阔ZZ 2019-03-14 10:25:41

同学你好,当left块设置的margin-right为正的时候,它跟right块之间的距离会越来越远,如下:

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

当left块的margin-right值为负的时候,是让right块跟它重叠了,如下:

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

当margin-right:-220px的时候,left块被right块给挤上去了,所以就跑到了middle区域的最右侧,如下:

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

祝学习愉快哦!

  • 提问者 Leeluo #1
    .right盒子设置margin-right:-220px,是怎么运动到.con的padding区域呢?怎么没有盖在.con红色块上面呢?
    2019-03-14 12:34:19
拾梦者sdj 2019-03-13 22:34:09

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

同学,我是这么理解的。

如果没有宽度限制,它们本来是如上图显示的。

如果left想要移动到midden的最左侧,就需要向左移动midden的宽度。

margin-left:-100%; 100%指的是midden的宽度。

left移动走之后right即到达上图left的位置。

right想要到达midden的右侧,需要向左移动right本身的宽度,即:

margin-right:-220px;

注意俩次移动的距离不一样,第一个100%容易错想成left的自身宽度。望理解,采纳。


希望共同进步

山河远阔ZZ 2019-03-13 19:07:09

同学你好。

1、这里先纠正一个问题 . 中间的大盒子.con设置宽度100% , 在加上padding ,会超出100%出现横向滚动条的 . 如下:

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

圣杯布局里面 ,大盒子不需要设置宽度100% , 要去掉哦 

2、 三个盒子本身设置浮动 ,应该在一行浮动 ,但是中间的盒子设置宽度100% , 把两个小盒子挤下去了 . 所以它们是被迫挤下去的 :

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

这里可以想象一下 ,如果中间的盒子宽度比较小 ,left应该紧挨着middle .当你让left往左移动 , 那么它就会覆盖在middle上 , margin-left:-220px就是往左移动 ,所以盖在了中间盒子上:

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

当设置margin-right:-220px , 它就会往右移动跑到了父元素的padding上:

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

3、顶部和底部的宽度是没有问题的哦,如下:

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

如果帮助到了你,欢迎采纳。

祝学习愉快!

  • 提问者 Leeluo #1
    设置了middle的宽度,让左中右三块在一行显示;当.left设置margin-right:值为负时,.left并不会向右移动 <!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> <style> *{ padding:0; margin:0; } .header,.foot{ width:100%; height:100px; background:gray; text-align:center; line-height:100px; } .con{ height:800px; /*width:100%;*/ padding:0px 200px 0px 220px; } .left{ width:220px; background:blue; height:200px; } .right{ width:200px; background:yellow; height:200px; } .middle{ background:red; width:300px; height:200px; } .middle,.left,.right{ float:left; position:relative; } .left{ margin-right:-100px; /*left:-220px;*/ } .right{ /*margin-right:-200px;*/ /*right:-200px;*/ } </style> </head> <body> <div class="header">header</div> <div class="con"> <div class="middle">这是中间内容这是中间内容这是中间内容这是中间内容这是中间内容这是中间内容这是中间内容这是中间内容</div> <div class="left">这是左边内容这是左边内容</div> <div class="right">这是右边内容这是右边内容</div> </div> <div class="foot">foot</div> </body> </html>
    2019-03-13 21:20:10
  • 提问者 Leeluo #2
    老师解释的这句话“当设置margin-right:-220px , 它就会往右移动跑到了父元素的padding上:”理解不动。。。
    2019-03-13 21:35:32
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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