【问题标题】:Need to keep image (horizontal / vertical) in a fixed height div需要将图像(水平/垂直)保持在固定高度的 div
【发布时间】:2015-07-21 06:34:00
【问题描述】:

我正在关注我之前的问题,该问题有两个框,有两个图像(可以是垂直或水平),问题是框的高度是固定的,当我更改窗口屏幕时某些屏幕尺寸的图像会绕过框的边框。

我检查了12 这些问题的答案,但没有太大帮助。

DEMO

CSS

.items { */
    position: relative;
    margin-bottom: 7px;
    margin-left: 7px;
    margin-right: 0px;
    text-align: left;
    background-color: red;
    border-top-left-radius: 20px;
    border-top-right-radius: 20px;
    border-bottom-left-radius: 20px;
    padding-left: 1%;
    height:260px;

}



.col-md-12.col-xs-12.btn>a>img {
    float: right;
    width: 100px;
    height: 50px;
}

.col-md-12.col-xs-12.my-col {
    padding-left: 100%;
}

.my-row {
    bottom: 0;
    padding-right: 0;
    position: absolute;
}

.my-row {
    bottom: 0;
    padding-right: 0;
    position: absolute;
}

.btn {
    float: right;
    bottom:0;
    margin-right:-12px;
    margin-bottom:-6px;
    position:absolute;
    right:0;
}

HTML

<div class="container-fluid">
            <div class="row">
                    <div class="col-md-3 items">
                        <div class="row">
                            <div class="col-md-12 text-center">
                                <h4>T1</h4>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-md-12 text-center">
                                <h5>T2</h5>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-md-12 row text-center">
                                <a
                                    href="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQKWYNnGt8d9G1sf8PE0TpOglpZ2dKnHWAP5FB_spYgelcToong"
                                    title="T1" data-gallery rel="nofollow"> <img
                                    id="imageresource"
                                    src="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQKWYNnGt8d9G1sf8PE0TpOglpZ2dKnHWAP5FB_spYgelcToong"
                                    class="img-thumbnail" width="30%" style="margin-left: 30px;" />
                                </a>

                            </div>
                        </div>
                        <div>
                                    <a href="#" target="_blank"><img src="#" class="btn" /></a>
                                </div>
                    </div>



                    <div class="col-md-3 items">
                        <div class="row">
                            <div class="col-md-12 text-center">
                                <h4>T1</h4>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-md-12 text-center">
                                <h5>T2</h5>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-md-12 row text-center">
                                <a
                                    href="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQKWYNnGt8d9G1sf8PE0TpOglpZ2dKnHWAP5FB_spYgelcToong"
                                    title="T1" data-gallery rel="nofollow"> <img
                                    id="imageresource"
                                    src="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQKWYNnGt8d9G1sf8PE0TpOglpZ2dKnHWAP5FB_spYgelcToong"
                                    class="img-thumbnail" width="25%" style="margin-left: 30px;" />
                                </a>

                            </div>
                        </div>
                        <div>
                                    <a href="#" target="_blank"><img src="#" class="btn" /></a>
                                </div>
                    </div>


            </div>
        </div>

    </div>

【问题讨论】:

  • 我可能对你在说哪些盒子感到困惑。?
  • @HimeshAadeshara 请点击“演示”查看代码演示。有两个红框。
  • 我知道一个类img-responsive,当添加到任何&lt;img&gt; 时,它会响应并且图像永远不会超出范围。你的代码让我感到困惑并且让我:(因为它包含很多这里不需要的垃圾。你尝试添加类并说明结果,你的问题是否解决了?
  • @RohitKumar 我添加了课程但没有帮助,哪些部分是垃圾?
  • hrefs 和 srcs、数据属性、目标属性等的长值,顺便说一下,我检查了你的演示链接,发现图像没有超出边界div,它们会自动调整大小。你到底想要什么?

标签: html twitter-bootstrap css twitter-bootstrap-3


【解决方案1】:

首先,对于您想要的,标记过于复杂,第 15 行和第 45 行在不正确的同一元素上应用引导类 .col-md-12.row。引导类 .col-xx-nn 必须分配给具有引导类 .row 的子元素。

回到你想要的轨道。我认为,我已经简化了 HTML 代码以获得您想要的结果。检查一下,让我知道哪里不对,我会更改并解释原因。

https://jsfiddle.net/6y4uf16y/84/

我所做的是围绕使用 CSS 弹性框的销售图像创建一个容器 div。此 div 将占用任何剩余空间。因此,如果您更改 .items 元素的高度。 flexbox 容器将适应并且销售图像将适当地响应新的大小。这里没有固定的高度,除了放在260px.items 类上的高度,我相信这就是你想要的。

原因是引导类 .img-reponsive 需要一个高度和/或宽度属性才能响应。因此,我将高度和宽度设置为等于它周围的弹性盒子容器。如果您愿意,可以将 width 值或 .img-sale 更改回 30%

此外,作为奖励,我已将按钮对齐,使其始终位于右下角,正如我认为您想要的那样。

如果此答案解决了您的问题,请不要忘记将其标记为正确的解决方案。

干杯

编辑抱歉,错误的 JSFiddle 链接,已添加正确的链接。我还添加了证据,证明它是动态的,在 h4 和 h5 元素中包含多行文本。

【讨论】:

  • 我按照本教程(引导网格的基本结构部分)进行操作,这就是为什么我在 .row 类中有 .col-xx-nn 的原因。如果我遗漏了什么,请告诉我。谢谢w3schools.com/bootstrap/bootstrap_grid_system.asp
  • .col-xx-nn 元素作为.row 元素的 是正确的,正如w3schools.com 在所述教程above 中显示的那样。但是,我指的是 JSFiddle here 的第 15 行和第 45 行,您将 CSS 类 .col-md-12.row 类放在同一个元素上,这是不允许的。如果您说您按照 w3schools 上的教程进行操作,我假设这是一个意外或错字。
  • 感谢您的回答,问题是我需要为每张图片设置不同的宽度。此外,右下角的图像与小屏幕中的中间图像重叠。
  • 您可以简单地应用 css margin-left: automargin-right: auto 在其父边界内居中任何块元素,这意味着您不需要添加 Bootstrap 类 .row .text-center 来居中图像。
  • 现在我已经添加了它,因此图像可以缩放以填充最大可用高度或最大可用宽度,具体取决于图像首先到达的边界。我已经使用 CSS 属性 max-width: 100%max-height: 100% 完成了这项工作。这告诉浏览器不要让图像超出其父容器的边界。您可以按照您认为合适的方式修改这些值。如果您还不知道这一点,您还可以将 max 属性与 min-heightmin-width 以及普通的 heightwidth 值结合起来,以实现您正在寻找的所需行为
【解决方案2】:

你必须添加类

.col-md-12 >a>img.btn {
    float: right;
    width: 100px;
    height: 50px;
}

因为 .col-md-12.col-xs-12.btn>a>img 不适用于任何给定的 HTML div 内容

【讨论】:

    【解决方案3】:

    随着盒子变宽,图像变宽是设计要求吗?如果是这样,将图像保留在框内的唯一方法是在增加图像高度时增加框的高度。

    如果不需要放大图像,那么您可以在此处查看我的解决方案:http://jsfiddle.net/6y4uf16y/75/

    我所做的只是从您的图像中删除显式宽度(第一个是width="25%",第二个是width="30%"),而是使用 CSS 通过限制图像的最大高度来控制比例。 .items img {max-height:100px;}.

    由于您有一个固定的高度并且需要将图像保留在框内,因此您知道图像上也有一个固定的最大高度

    【讨论】:

    • 感谢您的回答,我需要显示不同尺寸的图像,这就是为什么我对每个图像都有一个宽度属性。要求是将图像保持在它们的盒子中间,通过改变屏幕尺寸,盒子尺寸应该改变,因此图像尺寸应该成比例地改变。
    • 您可以将图像保留在框的中间而不放大它们(这就是 % 宽度发生的情况)。当您考虑它时,也没有办法在不增加高度的情况下增加图像的宽度(至少在不裁剪图像或拉伸图像的情况下不能)。关于 max-height 属性的好处是,无论您的图像纵横比是多少,您都知道它永远不会溢出您的容器。如果也设置最大宽度,所有图像都会覆盖你。
    • 我添加了几个 CSS 规则来覆盖 .text-center 的默认样式,并为将保留在容器中的图像演示不同的 AR:jsfiddle.net/6y4uf16y/76。为了使代码更具可读性,我添加了合并您的边界半径border-radius: 20px 20px 0 20px; 并在.items 上合并了您的边距规则,以使定位更加明显。我还在底部更新了我的样式:.items .row.text-center {text-align:center;padding:0;} .items .row {margin:0;} .items img {max-height:160px; max-width:100%; display:block; margin:auto;}
    • 顺便说一句!一旦应用了绝对定位或固定定位,“浮动”之类的东西就不再重要了(我可能是错的,但我认为 100% 的时间都是如此)。此外,如果您指定绝对定位,您可以通过摆脱负边距并使用定位规则来简化您的 .btn 类(例如:.btn {bottom:-6px; right:-12px; position:absolute;} 如果您确实需要负定位。我想我是如何改变的不过,你的风格,bottom:0; right:0; 应该能得到你想要的东西。)
    • 在 Firefox 中,图像始终保持完全相同的大小。
    【解决方案4】:

    我不确定你是否可以在 T1 和 T2 上换行,否则你可以这样做

    img{
        max-height:170px;
        width:auto
    }
    

    DEMO

    【讨论】:

    • 在 Firefox 中,图像始终保持完全相同的大小。
    【解决方案5】:

    我同意@Bhavin Solanki 的观点,这可能是我建议尝试给予的一件事

    	width: 100px;
    	height: 50px;

    百分比或者您可以使用特定图像选择器的媒体查询,这将帮助您管理很多事情

    【讨论】:

      【解决方案6】:

      您的 HTML 引导代码并不完全正确:

      1. 您不能将 .col-md-12 类嵌套在 .col-md-3 类中 not 至少据我所知。
      2. 您的.rows 类并不总是在代码中很好地定位 请参阅我在下面准备的 fiddle 链接。

      我试图尽我所能理解你想用你的代码实现什么我还在你的代码中订购了标签,以便你的 div 适合窗口大小而不管它的宽度。

      编辑

      尝试使用 vw 单位 (width:15vw;) 定义图像的宽度,这将防止图像穿过包含项目。

      我在这里为你举例说明:

      http://jsfiddle.net/merhzqwg/65/

      希望对你有帮助。

      【讨论】:

      • 感谢您的回答,我需要两个相邻的框,每个框的前两行有两个文本,中间有一个图像,每个右下角有一个图像盒子。我当前设计的问题是,如果您更改屏幕尺寸,您会看到图像通过它们所在的红色框的边框。我想确保它们不会覆盖它们的框的边框位于任何屏幕尺寸中。
      【解决方案7】:

      好的,就是这样,你的代码不是很干净。还有一些错误

      例如:您使用了两次id="imageresource"id 可以在单个页面上使用一次。 非常重要

      但我会为此提供快速解决方案。

      默认情况下,引导程序将max-width: 100%; height: auto; 添加到类img-thumbnail 以覆盖我所做的是我已经为两个图像img-sale 添加了一个类。

      <img class="img-thumbnail img-sale" id="imageresource" src="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQKWYNnGt8d9G1sf8PE0TpOglpZ2dKnHWAP5FB_spYgelcToong" width="30%" style="margin-left: 30px;" />
      

      并添加了以下css:

      .img-sale {
        max-height: 170px;
        width: auto;
      }
      

      http://codepen.io/anon/pen/OVwrpJ?editors=110

      http://jsfiddle.net/6y4uf16y/82/

      但其余代码不建议继续。

      【讨论】:

      • 感谢您的回答,您能建议哪些其他部分需要更改吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 2016-07-15
      • 2015-01-03
      • 2010-12-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      相关资源
      最近更新 更多