- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
flexbox 中具有 max-height
样式的图像呈现方式不同,具体取决于它是否具有 height
和 width
属性设置。
有属性的,设置为图像的真实宽度/高度,呈现时保留其宽高比,但没有属性的那些尊重max-height
并且看起来被压扁了。
.flex-parent {
display: flex;
max-height: 10vh;
}
<div class="flex-parent">
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Red_eyed_tree_frog_edit2.jpg/320px-Red_eyed_tree_frog_edit2.jpg">
<img width="320" height="240" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Red_eyed_tree_frog_edit2.jpg/320px-Red_eyed_tree_frog_edit2.jpg">
</div>
这就是它在 Chrome 58 中的显示方式(它在 Firefox 54 中的显示方式类似)。
为什么它们呈现不同?管理这种行为的规则是什么?
我(显然不正确)的理解是,高度和宽度属性会覆盖图像加载时发现的固有高度和宽度,如果高度和宽度属性等于图像的尺寸,则渲染应该没有差异加载图像后。
上下文是制作一个带有响应图像的页面,其中每个图像
vh
)Frog 图片来自https://en.wikipedia.org/wiki/File:Red_eyed_tree_frog_edit2.jpg
最佳答案
flex 容器的初始设置是 align-items: stretch
.
这意味着 flex 元素将扩展到 cross axis容器。
在行方向容器中,如问题中,横轴是垂直的。
这意味着元素(在本例中为图像)将覆盖容器的整个高度。
但是,当 flex 元素具有定义的交叉尺寸时,它会覆盖 stretch
默认值。
来自规范:
8.3. Cross-axis Alignment: the
align-items
andalign-self
propertiesFlex items can be aligned in the cross axis of the current line of the flex container, similar to
justify-content
but in the perpendicular direction.
stretch
If the cross size property of the flex item computes to
auto
, and neither of the cross-axis margins areauto
, the flex item is stretched.
这是关键语言:
If the cross size property of the flex item computes to
auto
这就是规范定义“交叉尺寸属性”的方式:
The width or height of a flex item, whichever is in the cross dimension, is the item’s cross size. The cross size property is whichever of
width
orheight
that is in the cross dimension.
因此您的代码似乎按照规范中的定义运行。
这就是你拥有的:
.flex-parent {
display: flex;
max-height: 10vh;
}
<div class="flex-parent">
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Red_eyed_tree_frog_edit2.jpg/320px-Red_eyed_tree_frog_edit2.jpg">
<img width="320" height="240" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Red_eyed_tree_frog_edit2.jpg/320px-Red_eyed_tree_frog_edit2.jpg">
</div>
第一张图片 在 CSS 或 HTML 中都没有定义宽度(主要尺寸)或高度(横向尺寸)。因此,它的交叉大小计算为 auto
。
这个声明:
If the cross size property of the flex item computes to
auto
... 为真,align-items: stretch
生效。
图像扩展到容器的高度,即 10px。
第二张图片,但是,有明确的大小。横向尺寸在 HTML 中定义 (height="240"
)。
现在声明:
If the cross size property of the flex item computes to
auto
... 为假,align-items: stretch
被覆盖。以 HTML height
属性为准。
关于第二张图片的两个注释:
max-height
限制,因为 CSS 中的初始设置是 overflow: visible
.width
和 height
属性映射到它们各自的 CSS 属性。因此,height="240"
覆盖了 height: auto
默认值。请参阅下面的规范引用。*在 flex 容器中渲染图像时,还有两个问题需要考虑。
flex 元素的默认最小尺寸。此设置可防止 flex 元素缩小到低于其内容的大小。阅读这篇文章了解全部详情:
主要浏览器之间的不同行为。 Firefox、Chrome、Safari、Edge 和 IE11 并不总是以相同的方式将图像呈现为 flex 元素。阅读这篇文章了解更多详情:
考虑到上述所有因素,这是我建议的解决方案:
.flex-parent {
display: flex;
max-height: 50vh; /* adjusted for demo */
}
.flex-parent {
min-width: 0;
}
img {
width: 100%;
height: auto;
}
<div class="flex-parent">
<div>
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Red_eyed_tree_frog_edit2.jpg/320px-Red_eyed_tree_frog_edit2.jpg">
</div>
<div>
<img width="320" height="240" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Red_eyed_tree_frog_edit2.jpg/320px-Red_eyed_tree_frog_edit2.jpg">
</div>
</div>
*HTML width
和 height
属性映射到它们各自的 CSS 属性。因此,在指定时,它们会覆盖 CSS 默认值。来自 HTML5 规范:
10.4.3 Attributes for embedded content and images
The
width
andheight
attributes onapplet
,embed
,iframe
,object
orvideo
elements, andinput
elements with atype
attribute in the Image Button state and that either represents an image or that the user expects will eventually represent an image, map to the dimension propertieswidth
andheight
on the element respectively.10.2 The CSS user agent style sheet and presentational hints
When the text below says that an attribute on an element maps to the dimension property (or properties), it means that if the element has an attribute set, and parsing that attribute's value using the rules for parsing dimension values doesn't generate an error, then the user agent is expected to use the parsed dimension as the value for a presentational hint for properties, with the value given as a pixel length if the dimension was an integer, and with the value given as a percentage if the dimension was a percentage.
关于html - 为什么 flex 元素的宽度和高度会影响 flex 元素的呈现方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44878379/
我有下面的图表,它填充了显示器的宽度和高度。高度始终只比屏幕大一点,因此会出现滚动条以显示底部 20 像素左右。 有没有办法让 Kendo UI 显示 100%,而不是 105% 的高度? 在线示例:
这个问题在这里已经有了答案: Why doesn't height: 100% work to expand divs to the screen height? (12 个答案) 关闭 9 年前
此页面 ( http://purcraft.com/madeinla/) 有问题,我正在尝试使用 iframe 元素显示此页面的内容:( http://purcraft.com/madeinla/ho
我在一个父 div 中有 2 个子 div。 Child1 是标题,Child2 是正文。我希望将 Child 2 的高度设置为 Parent - Child1 的高度。 Child2 有内容,所以它
我正在尝试用图像填充窗口。我正在使用 CSS 来尝试解决这个问题,但我想知道是否有一种方法可以最大化图像的宽度/高度,直到所有空白区域都被填满,但又不会破坏质量。 .rel-img-co
这个问题在这里已经有了答案: How to make a div 100% height of the browser window (41 个回答) 关闭 8 年前。
这可能是一个新手问题,但是是否可以将 Sprite 图标添加到带有文本的标签中? 例如: labeltext .icon { width: 30px height: 30px;
我有 3 个 div,分别是 header、content 和 footer。页眉和页脚具有固定的高度,并且它们被设计为 float 在顶部和底部。我想要使用 jquery 自动计算中间的 con
我有一个外部 div,其指定的宽度/高度(以毫米为单位)。 (mm只是赋值,不用于渲染)。 里面有另一个 div,其实际宽度/高度(以 px 为单位)。 两个 div 可以具有不同的比例。 我想要做的
我正在为一个非常简单的画廊 webapp 进行布局排序,但是当我使用 HTML5 文档类型声明时,我的一些 div(100%)的高度会立即缩小,我不能似乎使用 CSS 将它们丰满起来。 我的 HTML
我正在为一个非常简单的画廊 webapp 进行布局排序,但是当我使用 HTML5 文档类型声明时,我的一些 div(100%)的高度会立即缩小,我不能似乎使用 CSS 将它们丰满起来。 我的 HTML
我想更改 UISearchBar。文本字段的高度和宽度。我的问题是如何更改 iphone 中 UISearchBar 中的 UiSearchbar 高度、宽度、颜色 和 Uitextfield 高度?
我想要两个宽度和高度均为 100% 的 div。我知道子 div 不会工作,因为父 div 没有特定的高度,但有没有办法解决这个问题? HTML: CSS: body
我有几个带有“priceText”类的 div,我试图实现如果 div.priceText 高度小于 100px,则隐藏 this div 中的图像。 我无法让它工作。我已成功隐藏所有 .priceT
我正在尝试从 Image 列中列出的图像中获取实际图像尺寸,并将其显示在 Image Size 列中。 我遇到的问题是,我只能获取第一张图片的大小,该图片会添加到 Image Size 列的每个单元格
我正在使用一个插件,它要求我在加载图像后获取图像的宽度和高度,而不管图像的尺寸是如何确定的。
我有一个示例 pdf(已附),它包括一个文本对象和一个高度几乎相同的矩形对象。然后我使用 itextrup 检查了 pdf 的内容,如下所示: 1 1 1 RG 1 1 1 rg 0.12 0 0 0
我是 WPF 新手。我试图解决的一个问题是如何在运行时获得正确的高度。 在我的应用程序中,我将用户控件动态添加到代码隐藏中的 Stackpanel。 Usercontrol 包含一些 Texblock
在自定义 WPF 控件中,我想将控件的宽度设置为高度的函数。例如:Width = Height/3 * x; 实现此目的的最佳方法是什么,以便控件正确且流畅地调整大小(和初始大小)? 最佳答案 您可以
好吧,我本以为这是一个简单的问题,但显然它让我感到困惑。 当我尝试设置 RibbonComboBox 的高度时,它不会移动它的实际大小,而是移动它周围的框。 这是我的 XAML:
我是一名优秀的程序员,十分优秀!