Twitter Bootstrap 3 中的图片默认没有响应?

Posted

技术标签:

【中文标题】Twitter Bootstrap 3 中的图片默认没有响应?【英文标题】:Images not responsive by default in Twitter Bootstrap 3? 【发布时间】:2013-07-29 17:50:04 【问题描述】:

看起来在新版本 3.0 中,如果图像是具有相同类名的 div 的一部分,我必须将图像的类名设置为 col-lg-4 col-sm-4 col-4,以使图像对所有断点都做出响应。

在版本 2 中,图像 CSS 属性默认继承父级的 div 属性。

这对吗?

【问题讨论】:

好像有一个新的响应式图片类.img-responsive 【参考方案1】:

引导程序 4

对于 Bootstrap 4,使用 Sass (SCSS):

// make images responisve by default
img 
  @extend .img-fluid;    

答案已更新至版本 3

Bootstrap 3 有一个用于响应式图像的特殊类(将 max-width 设置为 100%)。该类定义为:

.img-responsive 
 display: block;
 height: auto;
 max-width: 100%;

注意img标签默认获取:

img 
     vertical-align: middle;
     border: 0;
     page-break-inside: avoid;
     max-width: 100% !important;
     

所以请使用class="img-responsive" 让您的图片具有响应性。

让所有图像默认响应:

css:在bootstrap css下添加如下代码:

   img 
          display: block;
          height: auto;
          max-width: 100%;
   

less: 在你的 mixins.less 中添加以下代码:

img 
  &:extend(.img-responsive);

注意:需要较少的 1.4.0。见:https://***.com/a/15573240/1596547

轮播

carousel 中的 img 标签默认是响应式的

语义规则

另见@its-me (https://***.com/a/18653778/1596547) 的回答。默认情况下,使用上述方法使您的所有图像都具有响应性,会将您的图像转换为block level elements。段落中不允许使用块级元素 (<p>),请参阅:https://***.com/a/4291515/1596547

据我了解,块级元素与内联元素的区别已被一组更复杂的内容类别所取代。另请参阅:https://developer.mozilla.org/en-US/docs/Web/html/Inline_elemente#Inline_vs._block-level。 所以在 HTML5 中,一个 p 标签可以包含任何与普通字符数据混合的短语元素。 (参见:http://www.w3.org/TR/html-markup/p.html)img 标签就是这样一个短语元素。 img 标签的 display 属性默认值确实是 inline-block。将 display 属性更改为 block 不会违反上述任何规则。

块级元素 (display:block) 占用了其父级的所有可用空间,这似乎正是您对响应式图像的期望。所以设置display: block; 似乎是一个合理的选择,它必须优先于inline-block 声明。

根据@its-me (https://***.com/a/18653778/1596547) 的建议需要inline-block 的p 元素内的图像可能根本不响应。

【讨论】:

萨斯:img @extend .img-responsive; 【参考方案2】:

@BassJobsen 提出了很好的建议,但我会使用 display: inline-block; 而不是 display: block;,因为这感觉更符合语义 1(这意味着你可以更加确定你不是在其他地方搞砸了)。

所以,我的应该是这样的:

img 
  display: inline-block;
  height: auto;
  max-width: 100%;

如果我的理解有缺陷,请告诉我。 :)


[1]:首先,如果是这样的用例,图像几乎总是包裹在块级元素中;再说一次,我们还在段落 (p) 等元素中使用图像,其中inline-blockblock 元素更合适。

【讨论】:

有趣的东西。如果您设置宽度(在这种情况下为最大宽度),则元素将始终 / 成为我理解的块级元素。因此,遵循语义规则,您不能在<p> 中使用最大高度的图像。设置显示内联块可能感觉更好,但不是。这应该是 Bootstrap 现在默认不让图像响应的原因。 @BassJobsen 这里有更多支持我的回答:***.com/a/2402773/1071413 @its-me 似乎在 HTML5 中,块级元素与内联元素的区别被一组更复杂的内容类别所取代。另见developer.mozilla.org/en-US/docs/Web/HTML/… 在最初使用公认的解决方案后,我遇到了一些不良结果。另外,我也得出了使用 inline-block 的相同结论,它解决了这些问题,而没有我所知道的任何负面影响。【参考方案3】:

在尝试确定为所有图像应用img-responsive 是否安全后来到这里。

@its_me 的回答让我认为将其应用于 p 元素下的图像是不安全的。

这似乎不是引导团队的想法。

这就是为什么 bootstrap3 中的图片默认没有响应的原因:

总结是它破坏了大量毫无戒心的第三方小部件(包括 Google 地图),可以理解的是,它们不会预期其中的图像会被强制调整为其他宽度。这就是为什么我们在 Bootstrap v3 中回滚了 Bootstrap v2 的“图像默认响应”方法,转而支持显式的 .img-responsive 类。

https://github.com/twbs/bootstrap/issues/18178#issuecomment-154180107

【讨论】:

以上是关于Twitter Bootstrap 3 中的图片默认没有响应?的主要内容,如果未能解决你的问题,请参考以下文章

Twitter Bootstrap 轮播 - Firefox 中的 css 转换

Twitter Bootstrap 3 中的圆桌会议

Twitter Bootstrap 按钮文本自动换行

吴裕雄 Bootstrap 前端框架开发——Bootstrap 图片:响应式图片

吴裕雄 Bootstrap 前端框架开发——Bootstrap 图片

如何根据内容动态调整 Twitter Bootstrap 模式的大小