为了账号安全,请及时绑定邮箱和手机立即绑定

为什么右边(right)浮动,不能实现宽度自适应呢? 代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>混合布局编程挑战</title>

<style type="text/css">

body{ margin:0; padding:0; font-size:30px; color:#fff}

.top{width:100%;height:80px;background:#ccc;}

.main{height:600px;background:#f00;margin:0 auto;}

.left{width:200px;height:100%;background:#00f; }

.right{height:100%;background:#0da;float:right;}

.foot{height:50px;background:#f31;}

</style>


</head>


<body>

<div class="top">top</div>

<div class="main">

    <div class="right">right</div>

    <div class="left">left</div>

</div>

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


</body>

</html>


正在回答

5 回答

浮动元素如果不定量设置宽高,则其宽高属性默认为0值。如果不设定宽高的浮动元素里面有子内容,例如你代码中的文本right,则浮动元素的宽高由文本right的宽高决定。所以设置了浮动属性的元素是无法自适应的,必须取消其浮动属性。

你可以试着把你代码中的height:100%去掉,就会发现.right这个块缩到了.main的右上角。

但要注意的是,如果把浮动属性去掉,那么.right就会是一个子块,会占满整个.main块,因为这个时候你设置的高度是100%,同父级块,而块元素是要单独占一行的。于是.left块就会被挤出.main块区域。

这时候就必须要为.left预留足够边距,即 margin-left:200px;。想要出现题目中的间隔缝隙,只需把左边距加大即可。

但这个时候你又会发现,.left块仍然会被挤到下方。这就是因为.left的设置语句出现在.right后,属于后加载对象。所以.main依然不会有位置给它。这个时候就要用到绝对定位,把.left固定在.main的左边。这个绝对定位可以相对于body,也可以相对于.main。如果要相对于.main,则要在.main中加入相对定位,才能保证其子元素的定位是相对于父级定位的。

4 回复 有任何疑惑可以回复我~
#1

慕UI1237056 提问者

嗯嗯,理解啦,非常感谢!
2016-03-30 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//56f34b5d000131ec19190782.jpg

上面代码显示的结果是这样的。为什么right元素右浮动之后不能自适应宽度呢

0 回复 有任何疑惑可以回复我~

不设置高度能撑开,开发的时候一般不设高度

0 回复 有任何疑惑可以回复我~

left{ width:200px;height:500px;position:absolute;left:0;top:100px;background:blue;}

.right{background:#9C9;height:500px;margin-left:210px;}


0 回复 有任何疑惑可以回复我~
#1

浮生若梦_0023

嗯这样 对的。 请问下 如果不设置高度的话, 怎么解决 绝对定位元素上下撑不开父级?
2016-03-21 回复 有任何疑惑可以回复我~
#2

慕UI1237056 提问者

margin-left设置的左边距是距离他的父元素的距离,为什么不是距离其兄弟元素的距离呢?
2016-03-24 回复 有任何疑惑可以回复我~
#3

慕UI1237056 提问者

也就是说,main是right元素需要与left元素的父元素,right和left需要间隔10px,left的宽度为200px。为什么right元素的左外边距不能设置为10px,必须要设置为210px呢
2016-03-24 回复 有任何疑惑可以回复我~

因为right设置了float,无法撑大main,所以main宽度为200px(只有left撑大main);而main是right的父元素,所以right的宽度等于main元素的宽度。

0 回复 有任何疑惑可以回复我~
#1

慕前端7494772

好像错了
2016-03-18 回复 有任何疑惑可以回复我~
#2

浮生若梦_0023 回复 慕前端7494772

错了 他问的是左右 不能自适应
2016-03-21 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
如何用CSS进行网页布局
  • 参与学习       209624    人
  • 解答问题       1153    个

用最简洁的案例教你布局的那些知识,这是前端工程师基本技能

进入课程

为什么右边(right)浮动,不能实现宽度自适应呢? 代码如下:

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信