CSS图片网格的遮罩效果

4
如何在响应式设计中使用CSS创建一个图像网格,使得不同宽高比的图片能够在相同高度行和相同宽度列中整齐排列?以下是一个带有网格的示例页面:http://destadesign.com/test/capricorn/test.html。第二行的图像超出了网格范围。
响应式设计要求我们使用百分比(%)值而非固定像素值,只针对宽度,这样高度就会自动计算,这在这种情况下会使事情变得复杂。
我认为可以使用图像的剪切蒙版(?)来实现这一点(相同大小的div容器,包含不同大小的图像),但我缺乏创建这种复杂CSS的技能。任何具体的帮助都将不胜感激,但一些一般性的想法和指导也将非常有用。
HTML div-imgage框具有这样的(相当自然的)结构:
<div id="1" class="figure">
  <a href="#" class="link1">        
    <img src="images/pic_mountain.jpg" alt="TARGI W PARYŻU">
    <div class="figcaption">
      <h4>test 1</h4>  
    </div>
  </a>
</div><!-- /end .figure -->

使用非必要的hover和文本居中效果的CSS:

.figure {
    position: relative;
    float: left;
    width: 10%;
    margin-right: 1%;
    left:20px;
   }
     .figure a{
      display:block;
     width:100%;
     height:100%;
     position:relative;
     z-index:2;
   }
    .figure a img{
    width:100%;
    display:block;
    }
.figcaption {
    font-size: 0.8em;
    letter-spacing: 0.1em;
    text-align: center;
    position: absolute;
    top: 0;
    left:0;
    width:100%;
    z-index: 2;
    height:100%;
    background-color:rgba(0,0,0,.4);
    transition:all 0.4s ease;

}
.figcaption h4{
  position:absolute;
  top:50%;
  left:50%;
  padding:0;
  margin:0;
  -moz-transform:translate(-50%, -50%);
  -webkit-transform:translate(-50%, -50%);
  transform:translate(-50%, -50%);
}
.figure a:hover .figcaption {
  opacity:0;
}

请使用这个CodePen以方便操作: http://codepen.io/anon/pen/GopQPZ
2个回答

2

不使用CSS遮罩的情况下,一个例子

body {
  background-color: black;
  text-align: center;
}

.figure {
  display: inline-block;
  margin: 2vw;
}

a {
  border: 2px solid grey;
  border-radius: 5px;
  display: inline-block;
  height: 10vw;
  overflow: hidden;
  position: relative;
  width: 10vw;
}
a img {
  height: 150%;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
}
<div id="figure1" class="figure">
  <a href="http://static.comicvine.com/uploads/scale_super/8/82727/1525513-the_moutain____by_vincentfavre.jpg" class="link1" target="_blank">
    <img src="http://static.comicvine.com/uploads/scale_super/8/82727/1525513-the_moutain____by_vincentfavre.jpg" alt="TARGI W PARYŻU">
    <div class="figcaption">
      <h4>test 1</h4>  
    </div>
  </a>
</div>
<div id="figure2" class="figure">
  <a href="http://www.britishairways.com/cms/global/assets/images/content/760x350_beach_Pod-3.jpg" class="link2" target="_blank">
    <img src="http://www.britishairways.com/cms/global/assets/images/content/760x350_beach_Pod-3.jpg" alt="TARGI W PARYŻU">
    <div class="figcaption">
      <h4>test 2</h4>  
    </div>
  </a>
</div>
<div id="figure3" class="figure">
  <a href="http://www.barnesandnoble.com/blog/barnesy/wp-content/uploads/2013/08/country_western.jpg" class="link3" target="_blank">        
    <img src="http://www.barnesandnoble.com/blog/barnesy/wp-content/uploads/2013/08/country_western.jpg">
    <div class="figcaption">
      <h4>test 3</h4>  
    </div>
  </a>
</div>
<div id="figure4" class="figure">
  <a href="http://junebugweddings.com/img/photobug/January2013/beautiful-landscape-wedding-portrait-by-julian-kanz.jpg" class="link4" target="_blank">        
    <img src="http://junebugweddings.com/img/photobug/January2013/beautiful-landscape-wedding-portrait-by-julian-kanz.jpg">
    <div class="figcaption">
      <h4>test 4</h4>  
    </div>
  </a>
</div>


谢谢,干得好。我必须承认,我从未见过像你提出的“剪贴蒙版”CSS解决方案类似的东西。唯一的缺陷是那些“vw”单位与站点上的“%”并不真正很搭配,因为它们涉及视口的宽度,而“%”涉及父容器,在深层容器链中的行为与“vw”有很大不同。另一件事是图像“蒙版”显示在图像的顶部。我认为理想的解决方案应该显示中间。如果这是可能的,这样的东西应该发布在网络上,作为非常珍贵的CSS代码位。 - Jan Desta
你将不得不像往常一样处理单位 :) 在这里,视口单位允许高度和宽度具有相同的尺寸。至于定位,这确实是一个限制。 - sodawillow
我已经将此与绝对居中定位相结合,因此拇指现在显示图像的中心 :) - sodawillow

1
这是一个非常好的CSS网格,完全响应式。它可以接受任何尺寸的图像,并且您可以选择列数和图像之间的间隔。使用媒体查询,您还可以使列数根据设备大小而变化。

https://goo.gl/5SFndB

这里要感谢Chris Coyier。我已经无数次使用了他的网格系统,非常好用。

此外,这篇文章中还有一个很棒的示例,非常漂亮!

#photos {
   /* Prevent vertical gaps */
   line-height: 0;

   -webkit-column-count: 5;
   -webkit-column-gap:   0px;
   -moz-column-count:    5;
   -moz-column-gap:      0px;
   column-count:         5;
   column-gap:           0px;
}

http://codepen.io/team/css-tricks/pen/pvamyK


谢谢。响应速度很快。然而我不会称之为“网格”,而是“瀑布流”;这样图片看起来很混乱,使用“剪切蒙版”解决方案可以在网格中保留漂亮的水平和垂直线条结构。 - Jan Desta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接