Reputation: 3772
I'm trying to create a <div>
with a series of photos which are horizontally scrollable only.
It should look something like this LINK;
However the above is only achieved by specifying a width for the <div>
which contains the photos (so they don't 'word-wrap'). If I don't put a width - it looks like this;LINK
What can I do using CSS to prevent putting in a fixed width as the images may vary.
Thanks
Upvotes: 65
Views: 291573
Reputation: 3399
Here's a solution with flexbox for images with variable width and height:
.container {
display: flex;
flex-wrap: no-wrap;
overflow-x: auto;
margin: 20px;
}
img {
flex: 0 0 auto;
width: auto;
height: 100px;
max-width: 100%;
margin-right: 10px;
}
<div class="container">
<img src="https://via.placeholder.com/100x100" />
<img src="https://via.placeholder.com/50x50" />
<img src="https://via.placeholder.com/5x50" />
<img src="https://via.placeholder.com/100x50" />
<img src="https://via.placeholder.com/50x100" />
<img src="https://via.placeholder.com/20x50" />
<img src="https://via.placeholder.com/50x30" />
<img src="https://via.placeholder.com/50x150" />
<img src="https://via.placeholder.com/250x50" />
<img src="https://via.placeholder.com/150x350" />
<img src="https://via.placeholder.com/50x350" />
<img src="https://via.placeholder.com/100x100" />
<img src="https://via.placeholder.com/50x50" />
<img src="https://via.placeholder.com/5x50" />
<img src="https://via.placeholder.com/100x50" />
<img src="https://via.placeholder.com/50x100" />
<img src="https://via.placeholder.com/20x50" />
<img src="https://via.placeholder.com/50x30" />
<img src="https://via.placeholder.com/50x150" />
<img src="https://via.placeholder.com/250x50" />
<img src="https://via.placeholder.com/150x350" />
<img src="https://via.placeholder.com/50x350" />
</div>
Upvotes: 16
Reputation: 92853
You can use display:inline-block
with white-space:nowrap
. Write like this:
.scrolls {
overflow-x: scroll;
overflow-y: hidden;
height: 80px;
white-space:nowrap;
}
.imageDiv img {
box-shadow: 1px 1px 10px #999;
margin: 2px;
max-height: 50px;
cursor: pointer;
display:inline-block;
*display:inline;/* For IE7*/
*zoom:1;/* For IE7*/
vertical-align:top;
}
Check this http://jsfiddle.net/YbrX3/
Upvotes: 131
Reputation: 1689
try using table structure, it's more back compatible. Check this outHorizontal Scrolling using Tables
Upvotes: 0
Reputation: 9
Use this code to generate horizontal scrolling blocks contents. I got this from here http://www.htmlexplorer.com/2014/02/horizontal-scrolling-webpage-content.html
<html>
<title>HTMLExplorer Demo: Horizontal Scrolling Content</title>
<head>
<style type="text/css">
#outer_wrapper {
overflow: scroll;
width:100%;
}
#outer_wrapper #inner_wrapper {
width:6000px; /* If you have more elements, increase the width accordingly */
}
#outer_wrapper #inner_wrapper div.box { /* Define the properties of inner block */
width: 250px;
height:300px;
float: left;
margin: 0 4px 0 0;
border:1px grey solid;
}
</style>
</head>
<body>
<div id="outer_wrapper">
<div id="inner_wrapper">
<div class="box">
<!-- Add desired content here -->
HTMLExplorer.com - Explores HTML, CSS, Jquery, XML, PHP, JSON, Javascript
</div>
<div class="box">
<!-- Add desired content here -->
HTMLExplorer.com - Explores HTML, CSS, Jquery, XML, PHP, JSON, Javascript
</div>
<div class="box">
<!-- Add desired content here -->
HTMLExplorer.com - Explores HTML, CSS, Jquery, XML, PHP, JSON, Javascript
</div>
<div class="box">
<!-- Add desired content here -->
HTMLExplorer.com - Explores HTML, CSS, Jquery, XML, PHP, JSON, Javascript
</div>
<div class="box">
<!-- Add desired content here -->
HTMLExplorer.com - Explores HTML, CSS, Jquery, XML, PHP, JSON, Javascript
</div>
<div class="box">
<!-- Add desired content here -->
HTMLExplorer.com - Explores HTML, CSS, Jquery, XML, PHP, JSON, Javascript
</div>
<!-- more boxes here -->
</div>
</div>
</body>
</html>
Upvotes: 0