Daher möchte ich mehrere Divs nebeneinander ausrichten (horizontal zentriert). Wenn es mehr als n Divs gibt, sollte der Container, in dem sich die Divs befinden, wie eine einfache Bildlaufleiste in x-Richtung scrollbar sein, um Folgendes zu erhalten:
Hinweis : Wäre jemand so freundlich, das (!)
vor den Bildern hinzuzufügen?
Allerdings - ich konnte es mit diesem Code bisher nicht zum Laufen bringen:
#container {
position: relative;
width: 80%;
height: 40%;
overflow-x: scroll;
background: gray;
}
.item {
position: absolute;
width: 10%;
height: 80%;
background-image: url("http://www.icemeltmanufacturers.com/wp-content/uploads/2016/09/head-icon-png-5.png");
background-repeat: no-repeat;
background-position: 50% 50%;
margin: auto;
top: 0;
bottom: 0;
background-size: contain;
}
#bigContainer {
position: absolute;
width: 100%;
height: 50%;
background: white;
bottom: 0%;
border-radius: 15px 15px 0px 0px
}
<div id="bigContainer">
<div id="container">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</div>
Hinweis : Es scheint, dass Stackoverflow derzeit für mich kaputt ist, daher gibt es die Geige zum Testen des Codes: https://jsfiddle.net/nfdgyx73/13/
Hinweis : Es wäre cool, eine Lösung bereitzustellen, bei der ich keine massiven Änderungen an den Containern vornehmen muss (insbesondere, um deren Positionsattribute nicht zu ändern).
Jede Hilfe wäre sehr dankbar, danke eine Million im Voraus!
3 Antworten
Suchen Sie so etwas? Ich habe auch fiddle aktualisiert: https://jsfiddle.net/nfdgyx73/40/
Sie müssen nur die Elemente inline anzeigen (display: inline-block
) und sicherstellen, dass Sie Ihren Container nicht einwickeln, da er ein% zur Berechnung der Breite verwendet (white-space: nowrap
) und keinen Überlauf für den eingeschalteten Container sicherstellt y-Achse (overflow-y: hidden
)
Gemäß Ihrem Kommentar habe ich der Container-ID auch text-align: center
hinzugefügt. Wenn also weniger Elemente vorhanden sind, für die kein Bildlauf erforderlich ist, werden sie zentriert.
#container {
position: relative;
width: 80%;
height: 40%;
overflow-x: scroll;
background: gray;
overflow-y: hidden;
white-space: nowrap;
text-align: center;
}
.item {
display: inline-block;
width: 10%;
height: 80%;
background-image: url("http://www.icemeltmanufacturers.com/wp-content/uploads/2016/09/head-icon-png-5.png");
background-repeat: no-repeat;
background-position: 50% 50%;
margin: 4px;
top: 0;
bottom: 0;
background-size: contain;
}
#bigContainer {
position: absolute;
width: 100%;
height: 50%;
background: white;
bottom: 0%;
border-radius: 15px 15px 0px 0px
}
<div id="bigContainer">
<div id="container">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</div>
Wenn position: absolute;
nicht erforderlich ist, kann dies mit Flexboxen erfolgen
#container {
display: flex;
justify-content: center;
width: -webkit-fit-available;
padding: 20px;
background: gray;
}
#container .item {
margin-right: 10px;
}
#container .item:last-child {
margin-right: 0;
}
.item {
width: 25px;
height: 25px;
background-image: url("http://www.icemeltmanufacturers.com/wp-content/uploads/2016/09/head-icon-png-5.png");
background-repeat: no-repeat;
background-position: 50% 50%;
background-size: contain;
}
#bigContainer {
display: flex;
width: 80%;
background: white;
overflow-x: auto;
border-radius: 15px 15px 0px 0px;
margin-bottom: 20px; /* This is just to help differentiate the two bigContainers */
}
<div id="bigContainer">
<div id="container">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</div>
<div id="bigContainer">
<div id="container">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</div>
Meine Lösung verwendet eine Flexbox, um alle Elemente wie gewünscht auszurichten. Wenn mehr Elemente vorhanden sind als Platz vorhanden ist, wird eine Bildlaufleiste hinzugefügt (kommentieren Sie die zusätzlichen Divs aus, um sie in Aktion zu sehen).
https://jsfiddle.net/nfdgyx73/58/
#container {
position: relative;
width: 80%;
height: 40%;
overflow-x: scroll;
background: gray;
display: inline-flex;
flex-direction: row;
align-items: center;
}
#container::before, #container::after {
content: '';
margin: auto;
}
.item {
width: 10%;
height: 80%;
background: url("http://www.icemeltmanufacturers.com/wp-content/uploads/2016/09/head-icon-png-5.png");
background-repeat: no-repeat;
background-position: 50% 50%;
background-size: contain;
margin: 0 5px;
flex-shrink: 0;
}
#bigContainer {
position: absolute;
width: 100%;
height: 50%;
background: white;
bottom: 0%;
border-radius: 15px 15px 0px 0px
}
<div id="bigContainer">
<div id="container">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<!-- <div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div> -->
</div>
</div>