Mam element div (#wrapper) zawierający 2 elementy div stojące obok siebie.
Chciałbym, aby prawy element div był wyrównany w pionie. Próbowałem wyrównać w pionie: do środka na moim głównym opakowaniu, ale to nie działa. Doprowadza mnie do szału!
Mam nadzieję, że ktoś może pomóc.
HTML:
<div id="wrapper">
<div id="left-div">
<ul>
<li>One</li>
<li>Two</li>
</ul>
</div>
<div id="right-div">
Here some text...
</div>
</div>
CSS:
#wrapper{
width:400px;
float:left;
height:auto;
border:1px solid purple;}
#left-div{
width:40px;
border:1px solid blue;
float:left;}
#right-div{
width:350px;
border:1px solid red;
float:left;}
ul{
list-style-type: none;
padding:0;
margin:0;}
inline-block
sprawia, że zachowuje się jak inlineimg
zalign
ustawionym atrybutem)Możesz to zrobić dość łatwo za pomocą wyświetlania tabeli i wyświetlania tabeli-komórki.
#wrapper { width: 400px; float: left; height: auto; display: table; border: 1px solid green; } #right-div { width: 356px; border: 1px solid red; display: table-cell; vertical-align: middle; }
EDYCJA: Właściwie szybko pomieszałem w CSS Desk - http://cssdesk.com/RXghg
KOLEJNA EDYCJA: Użyj Flexbox. To zadziała, ale jest dość przestarzałe - http://www.cssdesk.com/davf5
#wrapper { display: flex; align-items: center; border:1px solid green; } #left-div { border:1px solid blue; } #right-div { border:1px solid red; }
źródło
Zdaję sobie sprawę, że to odwieczne pytanie, ale pomyślałem, że przydatne byłoby opublikowanie rozwiązania problemu z pionowym wyrównaniem pływaka.
Tworząc otokę wokół treści, która ma być umieszczona w dowolnym miejscu, możesz użyć pseudoselektorów :: after lub :: before, aby wyrównać zawartość w pionie. Możesz dowolnie dostosowywać rozmiar tej zawartości bez wpływu na wyrównanie. Jedynym haczykiem jest to, że owijka musi wypełniać 100% wysokości swojego pojemnika.
http://jsfiddle.net/jmdrury/J53SJ/
HTML
<div class="container"> <span class="floater"> <span class="centered">floated</span> </span> <h1>some text</h1> </div>
CSS
div { border:1px solid red; height:100px; width:100%; vertical-align:middle; display:inline-block; box-sizing: border-box; } .floater { float:right; display:inline-block; height:100%; box-sizing: border-box; } .centered { border:1px solid blue; height: 30px; vertical-align:middle; display:inline-block; box-sizing: border-box; } h1 { margin:0; vertical-align:middle; display:inline-block; box-sizing: border-box; } .container:after, .floater:after, .centered:after, h1:after { height:100%; content:''; font-size:0; vertical-align:middle; display:inline-block; box-sizing: border-box; }
źródło
centered
klasy i oczyszczeniu wielu zbędnych rzeczy z tego CSS nadal wyrównuje w pionie, z tylko (przepraszam za utratę formatowania! ...):div { border:1px solid red; height:100px; } .floater { float:right; height:100%; } h1 { vertical-align:middle; } .container:after, .floater:after, .centered:after { height:100%; content:''; font-size:0; vertical-align:middle; display:inline-block; }
Możliwym rozwiązaniem jest utworzenie opakowania
div
flex
z elementami wyrównanymicenter
zgodnie z opisem https://spin.atomicobject.com/2016/06/18/vertically-center-floated-elements-flexbox/ .źródło
Staram się unikać używania pływaków ... ale - w razie potrzeby wyrównuję pionowo do środka za pomocą następujących linii:
position: relative; top: 50%; transform: translateY(-50%);
źródło
Jedynym minusem moich modyfikacji jest to, że masz ustawioną wysokość div ... Nie wiem, czy to dla ciebie problem, czy nie.
http://cssdesk.com/kyPhC
źródło