【问题标题】:When targeting a Picture element in CSS, should we use img or picture selector?在 CSS 中定位图片元素时,我们应该使用 img 还是图片选择器?
【发布时间】:2014-10-13 07:58:13
【问题描述】:

所以新的 Picture 元素如下所示:

<picture>
  <source ... />
  <img browsers will fall back to this width="10" height="10" />
</picture>

在我们的 CSS 中,我们想设置一个背景颜色。

picture {background-color: red};
img {background-color: yellow};

启用图片的浏览器是否只会显示红色背景,而未启用图片的浏览器会显示黄色背景?或者两者的结合。同样,启用图片的浏览器会看到 img 元素的高度/宽度属性,还是完全忽略 img 元素?

【问题讨论】:

    标签: css html image


    【解决方案1】:

    picture 元素的想法是它只是为其封闭的 img 元素提供源信息,并且始终呈现的是 img 元素,而不是图片元素。

    但是,我在规范中看不到任何规范表明图片元素默认情况下将被视为内联元素以外的任何内容,因此我希望您能够使用不同的 @987654321 对其进行样式设置@设置,给它填充等,就像你对span元素所做的那样,在这种情况下,背景颜色的行为方式与今天围绕img元素的span元素的行为方式相同。

    因此同时定位两者可能是合适的。背景将像往常一样简单地分层。但是 img 将被渲染,因此在您的场景中,图像后面的背景将是黄色的,当然假设 img 至少具有一定程度的透明度。

    【讨论】:

    • 很有趣,所以图片/源元素更像是一种修改图像的 src 属性的语法,而不是可渲染元素本身。所以 支持的浏览器不会忽略 img,他们只是修改它。这意味着使用 CSS 定位 img 元素仍然是正确的。感谢您的澄清。
    【解决方案2】:

    由于没有浏览器支持它,猜测我们需要等待看到实现,但从目前的外观来看,根据当前文档,似乎 img 标签将被完全忽略,仅用作备用。

    新的实现如下:

    <picture>
       <source media="(min-width: 64em)" src="high-res.jpg">
       <source media="(min-width: 37.5em)" src="med-res.jpg">
       <source src="low-res.jpg">
       <img src="fallback.jpg" alt="This picture loads on non-supporting browsers.">
       <p>Accessible text.</p>
    </picture>
    

    由于您需要将 &lt;picture&gt; 元素内的图像定义为源,并且您不会有 img 标签,因此在具有 Picture 实现的浏览器中实现不应该识别 img 标签内的任何内容,除非媒体 src 不是t 定义。

    但是,很容易看出这种方法会导致图像的双重下载,因为浏览器会首先下载所有&lt;img&gt; 标签。因此,有一个proposal by David Newton: 使用&lt;object&gt;&lt;embed&gt; 作为备用图像容器,以避免重复下载图像。

    综上所述,我们只需要等待,但总之,我的回答是你的第一个选项picture {background-color: red};是正确的

    【讨论】:

    • 没有双重下载的危险,因为它是img元素的源被下载。图片元素只是修改了img元素使用的来源。这就是为什么源元素必须在图片元素中的 img 元素之前。
    • 在某些情况下,如果您不关心响应行为,并且像您说的那样只使用一张图像,那将就像您说的那样。但是&lt;picture&gt; 元素背后的整个想法是将其用于响应式布局。请参阅我的示例代码:您将下载 high-res.jpg、mid-res.jpg 和 low-res.jpg,然后是 fallback.jpg。当然,您可以使用 high-res.jpg 而不是后备,以确保覆盖所有尺寸。在这种情况下,您甚至不需要 &lt;picture&gt; 元素。如果你使用 mid-res.jpg 作为后备,你的图像在大屏幕上看起来会很糟糕。
    • (继续)因此,如果您遵循响应式方法,那么您将需要所有 3 张图片和一个可能(或可能不是)这 3 张图片之一的后备。所以很容易看出,至少在 2 种尺寸中,您页面中的每个 &lt;picture&gt; 元素都会有两次下载
    • 在响应式场景中,页面作者需要考虑每组可能的屏幕特征。但是浏览器不知道,它知道它有什么屏幕特征。所以它可以为这些特征下载正确的图像。它不需要其他人。我可以看到如果旋转会导致更改的特征越过断点,手机或平板电脑可能会预测性地下载“其他”屏幕方向的图像,否则它不会下载第二张图像,除非这些屏幕特征实际上改变了。
    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多