【问题标题】:Wrapping an image in a link in a Bootstrap row在 Bootstrap 行中的链接中包装图像
【发布时间】:2016-06-11 17:54:44
【问题描述】:

我已经花费了比我愿意承认的时间更多的时间来尝试让一排图像成为row 中的可点击链接,该链接将图像对齐在row 中间,不会中断引导响应。链接工作正常,但由于图像大小的变化(尽管它们都是紧凑高度的景观),对齐方式已关闭。我可以让图像在div.row 内垂直对齐,但它会破坏响应性并且图像无法正确调整大小。

Here's a JSFiddle of what I've tried

这是我想要做的:

row
--------------------------------------------------------
                  |                  |                  
      image1      |      image2      |      image3      
                  |                  |                  
--------------------------------------------------------

这是我能想到的最好的:

row
--------------------------------------------------------
      image1      |      image2      |      image3      
                  |      image2      |      image3      
                  |      image2      |            
--------------------------------------------------------

This answer 正是我想要实现的目标,但是当我使用其中的 CSS 类时,图像不会垂直居中。

我在 Bootstrap 项目中得到了所有紧凑的风景图像。尝试在行内垂直对齐图像

我的尝试:

这是我开始的:

<div class="row vertical-align">
    <div class="col-sm-4">
        <a href="#" title=""><img src="../img/my-image-1.png" class="img-responsive"></a>
    </div>
    <div class="col-sm-4">
        <a href="#" title=""><img src="../img/my-image-1.png" class="img-responsive"></a>
    </div>
    <div class="col-sm-4">
        <a href="#" title=""><img src="../img/my-image-1.png" class="img-responsive"></a>
    </div>    
</div>

我可以让所有内容都以可点击链接的形式出现在一行中,但由于图像大小的细微变化,图像不会在行的垂直中心对齐。我在普通屏幕上添加了这个vertical-align,但是当窗口调整大小时它会破坏 Bootstrap 的响应能力。

.vertical-align {
    display: flex;
    align-items: center;
}

对于我的第二次尝试,我从div.row 中删除了垂直对齐类,并从img 标记中删除了Bootstrap 的img-responsive 类,如下所示:

<div class="row">
    <div class="col-sm-4">
        <div><a href="#"><img src="../img/my-image-1.png"></a></div>
    </div>
    <div class="col-sm-4">
        <div><a href="#"><img src="../img/my-image-2.png"></a></div>
    </div>
    <div class="col-sm-4">
        <div><a href="#"><img src="../img/my-image-3.png"></a></div>
    </div>    
</div>

在我的 CSS 文件中,我添加了这些类:

.jumbotron .row > a {
    display: block;
}

.jumbotron > .row div a img {
    max-height: 80px;
    max-width: 100%;
    vertical-align: middle;
}

上面的 CSS 类不会破坏 Bootstrap,但它们会沿着它们的顶部对齐图像,而不是在 div.row 的垂直中心。

我尝试了很多其他的东西,但我无法让它发挥作用。这篇文章看起来充满了希望,但我无法让它发挥作用:

How to vertically align an image inside div

我想用 CSS 和 HTML 来解决这个问题,而不是 jQuery。任何建议:我将不胜感激。

【问题讨论】:

  • 你能拼凑一个plunker吗?
  • 我有点害怕问那是什么......
  • Punker (plnkr.co) 是一个在线工具,您可以在其中创建一个正在运行的应用程序来展示您的问题。有时代码示例还不够。
  • 哇!很高兴这不是城市词典的定义。我会看看我能和 plnkr.co 一起扔什么
  • @pgreen2 我提出了我遇到的问题的 jsfiddle。我尝试将 !important 添加到我的 CSS 语句中,认为 Bootstrap 中有一些东西可以覆盖它,但这并没有做任何事情。

标签: html css twitter-bootstrap


【解决方案1】:

默认情况下,Bootstrap 的列是浮动的,带有 css float 属性。使用float,我们不能中间对齐列。但是,我们可以使用display: inline-block。我们只需要从列样式中删除float 并将它们更改为inline-blockvertical-align: middle,您将得到您想要的。但不要忘记删除inline-block 附带的额外空间。

这是诀窍。

.vertical-align {
  letter-spacing: -4px;
  font-size: 0;
}

.vertical-align .col-xs-4 {
  vertical-align: middle;
  display: inline-block;
  letter-spacing: 0;
  font-size: 14px;
  float: none;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container-fluid">
  <div class="jumbotron">
    <div class="row vertical-align">
      <div class="col-xs-4">
        <a href="#" title=""><img src="http://www.americancivilwarstory.com/images/Coca-Cola_logo.svg.png" class="img-responsive"></a>
      </div>
    <div class="col-xs-4">
        <a href="#" title=""><img src="http://cdn0.sbnation.com/entry_photo_images/2668470/coca-cola_large_verge_medium_landscape.png" class="img-responsive"></a>
    </div>
    <div class="col-xs-4">
        <a href="#" title=""><img src="http://ichef.bbci.co.uk/images/ic/256x256/p03r5406.jpg" class="img-responsive"></a>
    </div>    
  </div>
</div>
</div>

注意:在父元素上设置font-size: 0; letter-spacing: -4px 并在子元素上应用父元素的font-size: 14px; letter-spacing: 0 将删除inline-block 附带的空白。

【讨论】:

  • 太棒了!这让我越过了终点线。我将选择器更改为.vertical-align [class*='col-'] 以扩大其使用范围。
【解决方案2】:

请试试这个,让我知道这是不是你想要的

 <style>
        img {
        height: auto;
        width: 100%;
    }

    .vertical {
        height: 100vh;
        display: flex;
        align-items: center;
        flex-wrap: wrap;
    }

    .abcd {
        min-width: 5em;
        flex: 1;
    }
    </style>

</head>

<body>
    <div class="container">
        <div class="vertical">
            <div class="abcd">

                <a href="#"><img src="https://images.unsplash.com/photo-1460378150801-e2c95cb65a50?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&s=1b5934b990c027763ff67c4115b6f32c"></a>

            </div>
            <div class="abcd">

                <a href="#"><img src="https://images.unsplash.com/photo-1460378150801-e2c95cb65a50?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&s=1b5934b990c027763ff67c4115b6f32c"></a>

            </div>
            <div class="abcd">

                <a href="#"><img src="https://images.unsplash.com/photo-1460378150801-e2c95cb65a50?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&s=1b5934b990c027763ff67c4115b6f32c"></a>

            </div>
        </div>
    </div>

</body>

【讨论】:

  • 感谢您的阅读。那没有完成。我更新以显示我想要得到的结果。
  • 尝试编辑的代码,如果你想在图像之间添加一些边距,因为我忘了在代码中添加它
  • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
【解决方案3】:

我创建了一个小解决方法。真正的问题是&lt;a&gt; 元素不合作。链接元素不会获得他孩子的宽度/高度,这就是提供的解决方案不起作用的原因。解决方法是使用background-image 属性。给包装器一个固定的高度和宽度,并使用background-size: contain 将图像应用为背景。请参阅下面提供的小提琴。

https://jsfiddle.net/f9ogw26n/21/

.wrapper {
  height: 200px;
  width: 100%;
  background-position: center center;
  background-size: contain;
  background-repeat: no-repeat;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" rel="stylesheet" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<div class="container-fluid">
  <div class="row">
    <div class="col-xs-4">
      <a href="#">
        <div class="wrapper" style="background-image:url('http://www.americancivilwarstory.com/images/Coca-Cola_logo.svg.png');">
        </div>
      </a>
    </div>
    <div class="col-xs-4">
      <a href="#">
        <div class="wrapper" style="background-image:url('http://ichef.bbci.co.uk/images/ic/256x256/p03r5406.jpg');">
        </div>
      </a>
    </div>
    <div class="col-xs-4">
      <a href="#" title="">
        <div class="wrapper" style="background-image:url('http:////cdn0.sbnation.com/entry_photo_images/2668470/coca-cola_large_verge_medium_landscape.png')">
        </div>
      </a>
    </div>
  </div>
</div>

【讨论】:

  • 以后,请把sn-p添加到答案本身,链接可能会变坏。
  • div 应该是span 在内联元素中,例如a
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 2023-03-11
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多