I am trying to display photo’s obtained from a flickr image search API, and the display the images in a grid, so that they all fill the screen.
I have tried many different CSS layouts, such as this:
https://travishorn.com/responsive-grid-in-2-minutes-with-css-grid-layout-4842a41420fe
and this https://www.youtube.com/watch?v=wmeJMOxyD-w&list=LL&index=2&ab_channel=Programster
However, the images always appear in a single file column.
How could I edit the below code, so that the images are displayed in a grid?
JavaScript
x
<!DOCTYPE html >
<html lang="en">
<head>
<title>MVP</title>
</head>
<body>
<?php
//FLICKR IMPLEMENTATION
$tag = "southampton";
$url = 'https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=499ff1d1566f49b580c2a5e9289f9e9d&tags='.$tag.'&sort=interestingness-desc&format=json&nojsoncallback=1';
$data = json_decode(file_get_contents($url));
$photos = $data->photos->photo;
foreach ($photos as $photo){
$url = 'http://farm'.$photo->farm.'.staticflickr.com/'.$photo->server.'/'.$photo->id.'_'.$photo->secret.'.jpg';
echo '<div class = "grid-boxes">';
echo '<div class ="grid-box"><img src="'.$url.'"/></div></div>'; }}
?>
</body>
</html>
Advertisement
Answer
Add the following styles first
JavaScript
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: Arial;
}
.header {
text-align: center;
padding: 32px;
}
.row {
display: -ms-flexbox; /* IE10 */
display: flex;
-ms-flex-wrap: wrap; /* IE10 */
flex-wrap: wrap;
padding: 0 4px;
}
.column {
-ms-flex: 25%; /* IE10 */
flex: 25%;
max-width: 25%;
padding: 0 4px;
}
.column img {
margin-top: 8px;
vertical-align: middle;
width: 100%;
}
@media screen and (max-width: 800px) {
.column {
-ms-flex: 50%;
flex: 50%;
max-width: 50%;
}
}
@media screen and (max-width: 600px) {
.column {
-ms-flex: 100%;
flex: 100%;
max-width: 100%;
}
}
Here is the the modified Code for you
JavaScript
<?php
//FLICKR IMPLEMENTATION
$tag = "southampton";
$url = 'https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=499ff1d1566f49b580c2a5e9289f9e9d&tags='.$tag.'&sort=interestingness-desc&format=json&nojsoncallback=1';
$data = json_decode(file_get_contents($url));
$photos = $data->photos->photo;
$count = 1;
echo '<div class="row">';
foreach ($photos as $photo){
$url = 'http://farm'.$photo->farm.'.staticflickr.com/'.$photo->server.'/'.$photo->id.'_'.$photo->secret.'.jpg';
if($count % 4 == 1){
echo '<div class="column">';
}
echo '<img src="'.$url.' style="width:100%"/>';
if($count % 4 == 0){
echo "</div>";
}
$count++;
}
echo "</div>";
?>