xHTML/CSS:如何使内部 div 获得 100% 宽度减去另一个 div 宽度
我在外部一个内有 2 个嵌套 div,其宽度:100%。两个嵌套的 div 都应该在一行中,并且首先应该从其内容中获取它的大小:
<div id="#outer" style="width:100%; border:1px">
<div id="#inner1" style="border:1px; display:inline">
inner div 1. Some text...
</div>
<div id="#inner2" style="width:100%????; border:1px; display:inline">
inner div 2...
</div>
</div>
问题是如果未指定 #inner1 div 的宽度并且取决于它的内部内容,如何使 #inner2 div 获取其余的水平空间?
PS 在我的例子中,所有样式都在单独的类中,这里我将 CSS 放入样式属性中只是为了简化。
我希望结果在 IE7+ 和 FF 3.6 中工作,
对我来说更详细的是,它看起来像这样:
<style type="text/css">
.captionText
{
float:left;
}
.captionLine
{
height: 1px;
background-color:black;
margin: 0px;
margin-left: 5px;
margin-top: 5px;
border: 0px;
padding: 0px;
padding-top: 1px;
}
</style>
<table style="width:300px;">
<caption width="100%">
<div class="captionText">Some text</div>
<div class="captionLine"> </div>
</caption>
<tr>
<td>something</td>
</tr>
</table>
这是我想要的图像:
I have 2 nested divs inside outer one, which has width:100%. Both nested divs should be in one line and first should get it size from it's contents:
<div id="#outer" style="width:100%; border:1px">
<div id="#inner1" style="border:1px; display:inline">
inner div 1. Some text...
</div>
<div id="#inner2" style="width:100%????; border:1px; display:inline">
inner div 2...
</div>
</div>
Question is how to make #inner2 div to get rest of the horizontal space if width of the #inner1 div is not specified and depends on what it is inside?
P.S. All styles are in separate classes in my case, here I putted CSS into style attributes just for simplification.
I want result to work in IE7+ and FF 3.6
In more details for me it looks like this:
<style type="text/css">
.captionText
{
float:left;
}
.captionLine
{
height: 1px;
background-color:black;
margin: 0px;
margin-left: 5px;
margin-top: 5px;
border: 0px;
padding: 0px;
padding-top: 1px;
}
</style>
<table style="width:300px;">
<caption width="100%">
<div class="captionText">Some text</div>
<div class="captionLine"> </div>
</caption>
<tr>
<td>something</td>
</tr>
</table>
Here is the image of what I want:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
神秘的
overflow:hidden;
是你的朋友。它阻止与浮动相邻的元素延伸到浮动后面 - 我认为这就是您正在寻找的布局。这里有一些稍微编辑过的 HTML: 我认为你的
id
中不能有#
字符:这是实现你想要的布局的 CSS。
(我使用 HTML 条件注释为 IE 6 添加了额外的 CSS。我刚刚注意到你没有实际上也不需要它在 IE 6 中工作,但如果您想善待 IE 6 用户……)已
在 IE 6、7 和 8 中测试和工作;火狐3.5;和 Chrome 4。
The mysterious
overflow: hidden;
is your friend here. It stops elements adjacent to floats from extending behind the float — I think that’s the layout you’re looking for.Here’s some slightly edited HTML: I don’t think you can have
#
characters in yourid
s:And here’s the CSS to achieve the layout you want.
(I put in additional CSS for IE 6 with HTML conditional comments. I just noticed you didn’t actually need it to work in IE 6 too, but if you fancy being nice to the IE 6 users out there...)
Tested and working in IE 6, 7, and 8; Firefox 3.5; and Chrome 4.
如果您现在正在阅读本文,您可能可以使用
calc
,所以要心存感激。HTML
CSS
请参阅JSFiddle 上的工作示例 。
If you're reading this now you can probably use
calc
, so be thankful.HTML
CSS
See the working example on JSFiddle.
您需要将inner1 div向左浮动,如下所示:
这应该可以解决问题。一探究竟!
再见
You would need to float the inner1 div to the left, like so:
This should do the trick. Check it out!
bye
嵌套元素不需要使用div,只需像这样使用SPAN
You do not need to use div for nested element, just use SPAN like this
扩展@Nasser Hajloo的答案,这对我有用(即使在IE6中)
尝试使用小于400px的主div来看看它如何调整。 (它也适用于 div 而不是 span - 关键是第一个 div/span 中的 width: auto。)
Expanding on @Nasser Hajloo's answer, this works for me (even in IE6)
Try it with the main div smaller than 400px to see how it adjusts. (It also works with divs rather than spans - the key is the width: auto in the first div/span.)
这个:将
inner1
嵌套在inner2
中,并从inner2
中删除display:inline
,如下所示:试试 看看它在这里工作:http://jsbin.com/adiwi
Try this: nest
inner1
insideinner2
, and remove thedisplay:inline
frominner2
, like this:You can see it working here: http://jsbin.com/adiwi
从您的代码来看,您似乎正在尝试获取一条水平线来填充 div 中的空白空间。如果我是正确的,您希望通过标记创建视觉效果。如果我错了请纠正我。
(很高兴看到您想要的图像)
示例:
这不是最佳实践。您应该尝试使用 CSS 来获得这种效果。
首先尝试使您的代码更具语义性:
要获得该行:
想让
希望该线位于 px
背景
财产
。
From your code it looks like you are trying to get a horizontal line to fill the empty space in your div. If I'm correct your looking to create a visual effect with markup. Correct me if I'm wrong.
(Would be nice to see an image of what you want)
Example:
This is not best practice. You should try to get this effect with CSS.
Try making your code more semantic first:
To get the line:
want
want the line to be in px
background
property
.
您的第一个问题是您的 id 前面带有“#”前缀。 # 仅在 CSS 中用于引用具有该 id 的元素,例如 CSS 规则 #outer{width:100%} 引用您的元素:
另外,您不需要使用 width's on div(或任何其他块元素)不浮动,因为它们已经自动占据 100% 的可用宽度。
如果您希望 2 个 DIV 出现在同一行,则必须将第一个 DIV 向左浮动。然后相邻的 DIV 将出现在侧面,同样您不需要为第二个元素指定 widthd。这是您的完整示例,包括每个 div 的不同颜色边框。
我把边框放大了,这样你就可以更清楚地看到发生了什么。
Your first problem is that you are prefixing your ids with a '#'. The # is only used in CSS to refer to the element with that id, e.g. the CSS rule #outer{width:100%} refers to your element:
Also you don't need to use width's on div's (or any other block elements) that aren't floated, as they already automatically take up 100% of the available width.
If you want to the 2 DIVs to appear on the same line you have to float the first one to the left. The adjacent DIV will then appear on the side, again you don't need to sepecify widthd for the second element. Here is your complete example including a different coloured border for each div.
I've made the borders bigger so you can see clearer whats going on.
另一个解决方案是运行一个 javascript,当文档加载时调整 CaptionLine 类的大小。
花了一些时间让它在 IE8 下工作,没有尝试过 IE7,但应该可以工作。
2 需要注意的事情。
Another solution is to run a javascript which resizes the captionLine class when document has loaded like this.
Took some time to get it working under IE8, have not tried IE7 but should work.
2 things to note.
答案真的很简单!如果左侧有固定 div(菜单),则给固定 div float: left 和右侧灵活 div margin-left ,其宽度大于第一个固定的宽度分区
Answer is really simple! If you have fixed div (menu) on the left side, then give fixed div float: left and your right flexible div margin-left that is bigger then width of first fixed div.