2016-11-15 44 views
-1

我一直負責轉換的一些佈局利用了以下佈局(請參閱圖像)。我想知道使用CSS的最佳方式是如何渲染圖像列表。我不想將這些物品分成不同的行容器,只是爲了使事情合適。我確定有一種方法可以創建這個列表。CSS需要提示圖庫佈局

我有與合適的邊緣呈現的圖像的最大問題在兩者之間,並且具有與所述佈局容器的邊緣處的遠右圖像排隊(橙色線)

enter image description here

在理想情況下,我想維護的HTML如下所示:

<ul class="gallery-list"> 
    <li class="gallery-list-item"> 
     <img src="..." alt="..." /> 
    </li> 
    <li class="gallery-list-item"> 
     <img src="..." alt="..." /> 
    </li> 
</ul> 

感謝您的時間,如果有更好的解決方案,我很樂意關閉它並鏈接到解決方案。

+2

它應該是響應?圖像是否爲固定尺寸?它會一直是每行4張圖片嗎? –

+0

請閱讀[問]。重要短語:「搜索和研究」和「解釋......阻止你自己解決它的任何困難」。 –

+0

@ kodos-johnson是迴應。我想桌面視圖會每行4個,但在較小的窗口中會變成較低的數量。 –

回答

1

這可能是一個解決方案,它可能不會。它做出了一些假設,例如每行總是有四個圖像,但使它們響應。

的要點是:

  • 我們設定的圖像容器寬度父容器的百分比來控制每行的圖像的數量。
  • 我們使用ul上的右側負邊距來抵消應用於li圖像間距的右側邊距。
  • 我們使用calc減去我們用於間距的邊距,所以所有元素都適合在一條線上,而不是開始重排。

我已經使用了幾個媒體查詢來顯示如何更改較小屏幕的行數以使網格響應。

還有一些填充和邊框應用於.container以證明圖像佔用了容器的整個寬度。

這只是一種做事的方法。

body { 
 
    margin: 0; 
 
} 
 
ul, 
 
li { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style: none; 
 
} 
 
.container { 
 
    width: 80%; 
 
    margin: 50px auto; 
 
    /* following adding for demo purposes */ 
 
    padding: 50px 0; 
 
    border-left: 1px solid #CCC; 
 
    border-right: 1px solid #CCC; 
 
    overflow: hidden; 
 
} 
 
ul { 
 
    margin-right: -5px; 
 
} 
 
li { 
 
    float: left; 
 
    margin: 0 5px 5px 0; 
 
    width: calc(50% - 5px); 
 
} 
 
img { 
 
    display: block; 
 
    width: 100%; /* or max-width: 100%; */ 
 
    height: auto; 
 
} 
 
@media(min-width: 550px) { 
 
    li { 
 
    width: calc(33.333% - 5px); 
 
    } 
 
} 
 
@media(min-width: 750px) { 
 
    li { 
 
    width: calc(25% - 5px); 
 
    } 
 
}
<div class="container"> 
 
    <ul> 
 
    <li> 
 
     <img src="http://placehold.it/200x200/fc0/&text=1"> 
 
    </li> 
 
    <li> 
 
     <img src="http://placehold.it/200x200/ccc/&text=2"> 
 
    </li> 
 
    <li> 
 
     <img src="http://placehold.it/200x200/fc0/&text=3"> 
 
    </li> 
 
    <li> 
 
     <img src="http://placehold.it/200x200/ccc/&text=4"> 
 
    </li> 
 
    <li> 
 
     <img src="http://placehold.it/200x200/fc0/&text=5"> 
 
    </li> 
 
    <li> 
 
     <img src="http://placehold.it/200x200/ccc/&text=6"> 
 
    </li> 
 
    <li> 
 
     <img src="http://placehold.it/200x200/fc0/&text=7"> 
 
    </li> 
 
    <li> 
 
     <img src="http://placehold.it/200x200/ccc/&text=8"> 
 
    </li> 
 
    </ul> 
 
</div>

+0

謝謝! @hungerstar這正是我正在尋找的!我想我需要再看一下'calc()'。 –

+0

沒問題。只要你不需要支持IE8或更高版本,你應該很好,[我可以使用](http://caniuse.com/#search=calc)。 – hungerstar

0

有很多方法可以解決這個問題。我偏愛flexbox - 這個例子顯示了它在畫廊上的固定寬度,但你也可以使用流暢的寬度。我建議做關於Flexbox的一些閱讀,但這裏有一個起點:

.gallery { 
 
    display: flex; 
 
    flex-wrap: wrap; 
 
    width: 440px; 
 
    margin: auto; 
 
    padding: 0; 
 
    list-style: none; 
 
} 
 

 

 
.gallery img { 
 
    margin-right: 10px; 
 
    margin-bottom: 10px; 
 
}
<ul class="gallery"> 
 
    <li> 
 
    <img src="//placehold.it/100x100" alt="Artwork"> 
 
    </li> 
 
    <li> 
 
    <img src="//placehold.it/100x100" alt="Artwork"> 
 
    </li> 
 

 
    <li> 
 
    <img src="//placehold.it/100x100" alt="Artwork"> 
 
    </li> 
 

 
    <li> 
 
    <img src="//placehold.it/100x100" alt="Artwork"> 
 
    </li> 
 

 
    <li> 
 
    <img src="//placehold.it/100x100" alt="Artwork"> 
 
    </li> 
 

 
    <li> 
 
    <img src="//placehold.it/100x100" alt="Artwork"> 
 
    </li> 
 

 
    <li> 
 
    <img src="//placehold.it/100x100" alt="Artwork"> 
 
    </li> 
 

 
    <li> 
 
    <img src="//placehold.it/100x100" alt="Artwork"> 
 
    </li> 
 

 
    <li> 
 
    <img src="//placehold.it/100x100" alt="Artwork"> 
 
    </li> 
 

 
    <li> 
 
    <img src="//placehold.it/100x100" alt="Artwork"> 
 
    </li> 
 

 
</ul>

+0

你在'.gallery'的右側有額外的空間,OP可能想要騎上。 – hungerstar

0

您還可以使用顯示:彎曲和柔性包裝這個

我從UL李對股利和IMG的標記改變,我已經讓每一個最後圖像排成長和適應容器

檢查這個片段

.gallery-list-item { 
 
    display: flex; 
 
    width: 100%; 
 
    margin-top: 10px; 
 
} 
 
div img:not(:first-child) { 
 
    margin-left: 10px; 
 
} 
 
div.gallery-list-item img:last-child { 
 
    flex: 1; 
 
} 
 
div.gallery-list { 
 
    display: flex; 
 
    flex-wrap: wrap; 
 
    justify-content: flex-start; 
 
    width: 450px; 
 
    border: 1px solid black; 
 
    padding: 0; 
 
}
<div class="gallery-list"> 
 
    <div class="gallery-list-item"> 
 
    <img src="http://shushi168.com/data/out/123/36699123-images.png" alt="..." height=100 width=100/> 
 

 

 
    <img src="http://i164.photobucket.com/albums/u8/hemi1hemi/COLOR/COL9-6.jpg" alt="..." height=100 width=100/> 
 

 
    <img src="http://shushi168.com/data/out/123/36699123-images.png" alt="..." height=100 width=100/> 
 

 
    <img src="http://i164.photobucket.com/albums/u8/hemi1hemi/COLOR/COL9-6.jpg" alt="..." height=100 width=100/> 
 
    </div> 
 
    <div class="gallery-list-item"> 
 
    <img src="http://i164.photobucket.com/albums/u8/hemi1hemi/COLOR/COL9-6.jpg" alt="..." height=100 width=100/> 
 

 
    <img src="http://i164.photobucket.com/albums/u8/hemi1hemi/COLOR/COL9-6.jpg" alt="..." height=100 width=100/> 
 

 
    <img src="http://i164.photobucket.com/albums/u8/hemi1hemi/COLOR/COL9-6.jpg" alt="..." height=100 width=100/> 
 

 
    <img src="http://i164.photobucket.com/albums/u8/hemi1hemi/COLOR/COL9-6.jpg" alt="..." height=100 width=100/> 
 
    </div> 
 

 
</div>

希望它可以幫助