图像网格的CSS掩码

时间:2015-12-13 17:43:06

标签: html css css3 mask grid-layout

如何创建一个图像网格,图像很好地排列在相同高度的行和相同宽度的列中,这样我们可以在CSS的响应式设计中获得不同宽高比的图片?

让我们把这个带有网格的示例页面,它是不言自明的: http://destadesign.com/test/capricorn/test.html 第二行中的图像伸出网格。

响应式设计需要我们使用百分比(%)值而不是固定像素值,并且仅用于宽度,以便自动计算高度,在这种情况下会使事情变得复杂。

我想到一个剪贴蒙版(?)来实现图像(相同大小的div,持有不同大小的图像),但是我缺乏创建这种复杂CSS的技能。任何具体的帮助都将受到高度赞赏,但一些一般性的想法和指导方针也会派上用场。

HTML div-imgage box有这样的(相当自然的?)结构:

<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 -->

具有非必要悬停和文本居中效果的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 个答案:

答案 0 :(得分:2)

不使用CSS掩码,an example

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>

答案 1 :(得分: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