我在Firefox 34及以上版本中发现了一个与显示行为有关的错误: flex。
我可以确认代码在所有现代浏览器中都一直有效,现在仍然有效,但是Firefox34和最近的Firefox35测试版的行为完全不一致。
我制作了一把小提琴,展示了不同的行为:http://jsfiddle.net/ntkawu63/
在Firefox34中启动它,它将忽略图像上的最大宽度:100%。在任何其他浏览器中,包括Firefox33,它都会将最大宽度应用于图像并正常显示。
<style>
.mediaContainer
{
zoom: 1;
overflow: visible;
position: relative;
}
.mediaCenterContainer
{
display: flex;
justify-content: center;
align-items: center;
}
.imageContainer
{
margin: 0 auto;
}
.imageContainer img
{
margin-bottom: 10px;
max-width: 100%;
}
</style>
<div class="mediaContainer mediaCenterContainer">
<div class="imageContainer">
<img src="http://dummyimage.com/1920x1080/000/fff.png&text=This+is+a+flex+box+test+for+Firefox+340x2B.+In+Chrome,+the+image+will+be+max-width:+1000x25.+In+Firefox+the+image+will+be+centered,+but+not+have+a+constrained+width." class="Image Tag Crop" alt="My Dog" data-realwidth="1000" data-realheight="670" data-scalewidth="944" data-scaleheight="633" />
</div>
</div>
这段代码是否有问题,或者这是Mozilla应该引起的bug?
这里的重要方面是
div.imageContainer
需要一个正的flex收缩
值show: inline
)img
子项需要自己的约束来确保它不会溢出flex项上删除min-ware: 1px
或max-ware: 100%
来满足。ImageContainer
;否则,根据规范,. ImageContainer
必须采用其内容的大小,即PNG图像的完整1000px固有大小OP的问题已经满足了第2点,但不是第1点和第3点。以下是我使用的CSS:
.mediaContainer
{
overflow: visible;
width:100%;
}
.mediaCenterContainer
{
display: flex;
}
.imageContainer
{
flex-shrink:1;
min-width:1px;
}
.imageContainer img {
max-width:100%;
}
...这里有一把小提琴来演示它。
非常感谢@dma_k指出我原来答案中的错误。
*我通常讨厌链接到W3C规范,但这一部分实际上很可读;我会鼓励人们阅读它。
如果您约束div而不是img,那么firefox36(当前为dev预览版)将提供您期望的行为。您可以使用flex shrink来执行此操作:
.imageContainer {
flex-shrink:1;
}
...或短手flex
属性:
.imageContainer {
flex: 0 1 auto;
}
…或使用您在img
上以及div
上的max width
声明:
.imageContainer, .imageContainer img {
max-width:100%;
}
因此Firefox允许flex元素溢出其容器。我不太了解flexbox规范,但这种情况似乎很自然;这就是flex-shrink
属性存在的原因。
问题内容: 我有这个设置: HTML : CSS : 通过此设置,它可以在iPhone上运行,但不能在浏览器中运行。 是因为我已经在meta中,也许已经在? 问题答案: 我发现最好的方法是为较旧的浏览器编写默认CSS,因为较旧的浏览器包括5.5、6、7和8。无法读取@media。当我使用@media时,我会这样使用: 但是,您可以使用@media进行任何操作,这只是为所有浏览器构建样式时最适合我的
问题内容: 以下代码在Chrome或IE中正确显示(图像为200px宽)。在Firefox和Opera中,样式被完全忽略。为什么会发生这种情况,并且周围有很好的解决方法?另外,最符合标准的方法是什么? 注意 针对这种特殊情况的一种可能的解决方法是将设置为。但是,这是一个非常人为的示例。我正在寻找可变宽度容器的策略。 [更新] 如下面的mVChr所述,w3.org规范声明不适用于元素。我尝试使用,但
抱歉,如果以前有人问过这个问题,但我花了很长时间搜索都没有成功。 我有一个面板,我试图使用GridBagLayout添加一些组件。 问题是,出于某种原因,我无法理解-我试图添加的JTextArea似乎忽略了分配给它的宽度-它似乎接受高度没有问题。 除了文本区域之外,所有组件都添加得很好——文本区域的宽度应该为3,但显示宽度为1。 我不明白为什么会这样,有人能帮忙吗? 提前感谢您的帮助。 代码:(编
我想在flexbox中保持5/3宽高比。我想要的框是33%的屏幕高度,我想堆叠其中两个在对方的顶部与flexbox与flex方向设置为列。这似乎打破了宽高比。如果我设置宽度,它再次工作。有没有一种方法可以在不使用JavaScript计算宽度的情况下做到这一点?我应该做些别的吗? 这里有一个代码笔来演示这个问题。https://codepen.io/voxlz/pen/WNjPoqY html: c
我这里有这个代码: 如您所见,第二列和第三列前面有一些空白。 有没有办法摆脱这个问题?
问题内容: 我正在尝试编写一个分为三部分的搜索菜单。如果没有足够的垂直空间显示结果,则每个部分都会有一个滚动条。 在Chrome和Firefox中,每个菜单都显示其滚动条,但是在IE11上,菜单与包装器重叠。 我已经编写了一个可在Chrome和Firefox上运行的示例(Firefox很棘手,我需要添加多个菜单级别)。 我在IE 11上缺少什么吗? 问题答案: 要在Chrome,Safari,Fi