【问题标题】:Firefox behaviour: 2 divs side by side with variable widthFirefox 行为:2 个 div 并排,宽度可变
【发布时间】:2014-10-04 04:31:08
【问题描述】:

我正在尝试在 css 中并排显示 2 个 div。

  • 第一个 div 具有可变宽度(根据它包含的图像)。
  • 第二个必须占据所有剩余的宽度。
  • 第二个 div 包含 3 个部分:“top”、“middle”和“bottom”,其添加高度为 100%。
  • 两个 div 的高度均为 100%。

感谢this question,我成功地将 div 并排放置,当主体具有固定尺寸时,一切正常。

但由于我将此页面嵌入到 iframe 中,因此我希望 div 占据所有可用空间。我想避免使用 javascript 设置正文尺寸...

我决定将这段代码添加到正文中:

body {
  margin: 0;
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  bottom: 0;
}

这在 Chrome 和 Safari 上起到了作用:图像有一个 100% 的高度来定义它的宽度,第二个 div 伸展直到它占据了所有可用空间。 (标题显示在图像上)

但是当我使用 Firefox 时,第一个窗格比预期的要大(见红色矩形)。

我用代码创建了一个小提琴:http://jsfiddle.net/0w0s6z5n/1/

我不明白为什么行为不同以及我在此页面上做错了什么。有人可以向我解释为什么这种行为会有所不同,并为我指明正确的方向,以成功地在 Chrome/Safari 上显示所有内容。

提前感谢您的帮助。

【问题讨论】:

  • 也许你可以尝试为盒子设置一个最大宽度属性?由于没有firefox,我无法对其进行测试,抱歉,希望对您有所帮助
  • 感谢您的回答。由于我事先不知道body的大小和图像的大小,所以我认为我不能随意放置max-width属性。我希望页面完全适应可用空间。
  • 没错,希望有人知道解决方案,祝你好运!

标签: html css firefox cross-browser


【解决方案1】:

添加

    width: 100%;
    height: 100%;

body是的,就这么简单)!! :)

问题:容器总是取父元素的维度,所以如果你打算在%中使用它们,你必须声明它们

css:

body {
    margin: 0;
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    bottom: 0;
    background-color: orange;
    width: 100%; /* added */
    height: 100%; /* added */
}

Fiddle here

【讨论】:

  • 非常感谢。我觉得很蠢 :) 所以 Firefox 需要我定义 body 的尺寸,但其他浏览器会推断它们?
  • @VincentDurmont : 一般来说,这是经验法则...总是声明维度并一起使用html,body,而不仅仅是body。旧版本的IE也有这个问题,所以对于跨浏览器一致性,始终定义它!....另外,作为旁注,始终使用position 作为最后的手段! :)
  • 好的,谢谢。如果我想在我的图像上显示一个标题,除了使用position:absolute;,我还有其他方法吗?
  • 不,为此,您必须制作图像relative 和标题absolute,我刚刚提到position 作为最后的手段,因为您已将body 制作为absolute ……这对我来说很奇怪! :)
【解决方案2】:

我不确定这是否正是您想要的,但据我了解,您需要第一个 div 具有可变宽度,其余的应该到位。

我编辑了你的代码: Fiddle here

CSS:

body {
margin: 0;
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
background-color: orange;
}
.container {
 width: 100%;
 height: 100%;
 background-color: pink;
}
.first {
 position: relative;
 float: left;
 height: 100%;
 background-color: red;
}
.second {
 height: 100%;
 background-color: yellow;
}
.media {
 height: 100%;
}
.caption {
 position: absolute;
 width: 100%;
 height: 15%;
 right: 0;
 bottom: 0;
 left: 0;
 background-color: grey;
}
.top {
 height: 40%;
 background-color: blue;
 }
.middle {
 height: 30%;
 background-color: purple;
 }
.bottom {
  height: 30%;
  background-color: green;
 }

这样,如果您更改 .media 的宽度,其余部分就会到位并且也适用于 firefox(已测试)。

【讨论】:

  • 感谢您的回答,但我不想在图像上使用 100% 的宽度。尺寸可能会有所不同,我只希望图像具有 100% 的高度。宽度应该适应。
  • 您可以随意调整宽度。您只需将其设置为某些东西,其余的就会适应。进入小提琴并将 .media 宽度更改为您想要的任何像素。它会占用像素,其余的会适应它。
  • 我想我不清楚,但图像是动态加载的,我不知道它的尺寸。我唯一可以确定的是,高度/宽度比 > 1。
  • 哦好的...然后您将父 div 设置为 width: 100 % , height: 100% ... 在您的情况下为 body
  • 我就是这么做的!非常感谢您的宝贵时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多