Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如果第二个div为空,如何让浮动div跨越总宽度?_Html_Css - Fatal编程技术网

Html 如果第二个div为空,如何让浮动div跨越总宽度?

Html 如果第二个div为空,如何让浮动div跨越总宽度?,html,css,Html,Css,我正在构建一个模板,该模板应包含两种布局: 我有一个容器,上面有a区(左)和B区(右)。A总是满足的。如果B有内容,则其宽度应为30%,其余部分由A获得。两个立柱应具有100%的高度,不得在较短的构件周围浮动。 如果B为空,则它不应显示,A应占据100%的宽度 <div class="container"> <div class="left"> <placeholder 1 /> <placeholder 2 /> <

我正在构建一个模板,该模板应包含两种布局:
我有一个容器,上面有a区(左)和B区(右)。A总是满足的。如果B有内容,则其宽度应为30%,其余部分由A获得。两个立柱应具有100%的高度,不得在较短的构件周围浮动。
如果B为空,则它不应显示,A应占据100%的宽度

<div class="container">
  <div class="left">
    <placeholder 1 />
    <placeholder 2 />
  </div>
  <div class="right"><!-- can be empty -->
    <placeholder 3 />
    <placeholder 4 />  
  </div>
</div>

我很想用css来做这件事。可能吗?
还是我需要使用javascript?IE6不是一个问题…

您应该清除浮动-但这对于处理您描述的宽度问题应该是可以的。我错过什么了吗

 <div class="container">
      <div class="left">
        <placeholder 1 />
        <placeholder 2 />
      </div>
      <div class="right"><!-- can be empty -->
        <placeholder 3 />
        <placeholder 4 />  
      </div>
      <div class="clear"></div>
    </div>

默认情况下,如果
B
没有内容,则div将为100%无,这使其为0%;如果有内容,它将扩展到内容的大小。但是如果你把最大宽度设置为30%,你会让它消失,没有内容,最大宽度设置为30%

B.div {
    max-width:30%;
}

我试着用CSS来实现我认为你的意思,但没能实现。为了实现我认为您需要的功能,我必须添加一点javascript

编辑: 只需从“div B”中删除内容,然后重新运行fiddle,看看它如何处理任何内容

请参见:

这适用于IE8+和所有现代浏览器

它几乎可以在IE7中使用-唯一的问题是“空的right
div
”拒绝隐藏。没有一种纯粹的CSS方法可以解决这一问题,因此我提供了一段jQuery支持的JavaScript来解决这一问题:

<!--[if lte IE 7]>
<script>
$(function() {
    $('.right:empty').hide();
});
</script>
<![endif]-->

当你说
.right
可以是“空的”时,你是说
中的“完全空的”吗?是的,占位符3和4将完全消失。完全删除
而不仅仅是其中的所有内容是一个选项吗?使用“伪造”等高柱是否可以接受?我有一个纯CSS解决方案,但是如果不使用JavaScript,要在IE7中使用它是很困难的。删除div.right需要一些脚本,但是我不确定删除的条件,所以没有。人造列是可以的。请分享您的解决方案,即使它不适用于IE7thx phil。但要么我不明白,要么我没说清楚。我再试一次。我试图通过浮动A:
.left{float:left;}
来创建列,但如果不同时声明宽度,则此操作无效。我不知道,这取决于B是否为空。如果我在标记中将B放在A之前:
ba
和float B而不是A,也给B一个宽度:
。right{float:right;width:100px;}
它们在清空和填充B时表现得很好,除了它们对我的清除的抵制:A一直在B周围浮动。似乎我在表达自己时遇到了一些问题。是的,你的想法是:)我仍然在寻找一个css唯一的解决方案。但是你的剧本肯定会成功的,谢谢。
<!--[if lte IE 7]>
<script>
$(function() {
    $('.right:empty').hide();
});
</script>
<![endif]-->
<div class="container">
    <div class="right">..</div>
    <div class="left">
        ..
    </div>
</div>
.container {
    overflow: hidden
}
.left {
    overflow: hidden;
    background: #ccc;
}
.right {
    float: right;
    width: 30%;
    background: cyan
}