同等间隔的图库图像缩略图

时间:2017-11-12 14:11:06

标签: html css image gallery thumbnails

我正在尝试创建一个图库页面,我必须在其中放置可变数量的图像。例如,假设我以这种方式放置了6张图像:

<link href="/stylesheets/gallery_gen.css" media="screen" rel="stylesheet" type="text/css">

<div class="my-gallery-contain" itemscope itemtype="http://schema.org/ImageGallery">

    <div class="my-gallery">
        <figure class="my-gallery-fig" classitemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
            <a href="/img/gallery/matera/4.jpg" itemprop="contentUrl" data-size="600x400">
                <img src="/img/thumbs/matera/4.jpg" itemprop="thumbnail" alt="Image description" />
            </a>
            <!--<figcaption itemprop="caption description"><p class="galleryCap">Image caption</p></    figcaption>-->
        </figure>
        <figure class="my-gallery-fig" itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
            <a href="/img/gallery/matera/5.jpg" itemprop="contentUrl" data-size="600x400">
                <img src="/img/thumbs/matera/5.jpg" itemprop="thumbnail" alt="Image description" />
            </a>
        </figure>
        <figure class="my-gallery-fig" itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
            <a href="/img/gallery/matera/6.jpg" itemprop="contentUrl" data-size="600x400">
                <img src="/img/thumbs/matera/6.jpg" itemprop="thumbnail" alt="Image description" />
            </a>
        </figure>
        <figure class="my-gallery-fig" itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
            <a href="/img/gallery/matera/7.jpg" itemprop="contentUrl" data-size="600x400">
                <img src="/img/thumbs/matera/7.jpg" itemprop="thumbnail" alt="Image description" />
            </a>
        </figure>
        <figure class="my-gallery-fig" itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
            <a href="/img/gallery/matera/8.jpg" itemprop="contentUrl" data-size="600x400">
                <img src="/img/thumbs/matera/8.jpg" itemprop="thumbnail" alt="Image description" />
            </a>
        </figure>
        <figure class="my-gallery-fig" itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
            <a href="/img/gallery/matera/28.jpg" itemprop="contentUrl" data-size="600x400">
                <img src="/img/thumbs/matera/28.jpg" itemprop="thumbnail" alt="Image description" />
            </a>
        </figure>
    </div>

</div>

CSS:

.my-gallery-contain {
    margin: -20px 0px -20px;
}

.my-gallery img {
    width: 300px;
    margin: 0;
    padding: 0;

}

.my-gallery-fig {
    margin: 2px;

    height: 200px;
    overflow: hidden;
    display: inline-block;

}

但是,只有第一行的间距相等。我得到的结果是这一个: https://i.imgur.com/XS6cerM.jpg

如果我有另一行,只有前两行的间距相等。最后一行总是不等间隔的那一行。

我该如何解决这个问题?

另一个问题:如果我想在图像和旁边的图像之间有2px的固定边距,我怎样才能让拇指自动调整大小以适应div? (在我发布的碎片中,第二行有正确的边距,但是图像应该自动调整大小以适合外部div,这样右边图像的左边距与右边距相同左边的图片)

1 个答案:

答案 0 :(得分:1)

我不知道为什么图像之间没有4px的整体余量。可能是由于全局应用的css设置或仅仅是容器,我需要更多的代码才能知道究竟是什么问题。

您可以采取哪些措施来解决这个问题,以及为了方便以后添加图片,可以使用带有弹性箱后备的CSS网格,用于尚不支持网格布局的浏览器。

这两种方法都具有更高的响应性以及将来可调节性更高的特性。

CSS网格:

@supports (display: grid) {
    figure {
        padding: 0;
        margin: 0;
    }
    .my-gallery {
        display: grid;
        /* space between containers */
        grid-gap: 2px;
    }
    .my-gallery {
        grid-template-columns: repeat(3, 300px);
        grid-template-rows: 200px 200px;
        grid-template-areas: "img1   img2   img3" "img4   img5   img6";
    }
    /* positions */
    .my-gallery-fig:nth-child(1) { grid-area: img1; }
    .my-gallery-fig:nth-child(2) { grid-area: img2; }
    .my-gallery-fig:nth-child(3) { grid-area: img3; }
    .my-gallery-fig:nth-child(3) { grid-area: img4; }
    .my-gallery-fig:nth-child(3) { grid-area: img5; }
    .my-gallery-fig:nth-child(3) { grid-area: img6; }
    /* end of positions */
    .my-gallery-fig a {
        display: inline-block;
        width: 100%;
        height: 100%;
    }
    .my-gallery-fig img {
        display: block;
        width: auto;
        height: 100%;
        margin: auto;
    }
}


Flexbox后备:

@supports not (display: grid) {
    figure {
        padding: 0;
        margin: 0;
    }
    /* width accounts for image size and margins */
    .my-gallery {
        display: flex;
        width: 904px;
        flex-flow: row wrap;
    }
    .my-gallery-fig {
        flex: 0 1 300px;
        height: 200px;
        margin: 0 2px 2px 0;
    }
    /* last image of every row has no right margin */
    .my-gallery-fig:nth-child(3n) {
        margin-right: 0;
    }
}

我根据您给定的维度进行了编码。您应该能够调整尺寸以适应您的需求。

一些额外资源:
MDN on CSS Grid
MDN on "flex"

我希望这有帮助!

P.S:你可以试试这个:https://codepen.io/iamdeja/pen/zPwwXO