Flexbox zachowuje się tak, że rozciąga obrazy do ich naturalnej wysokości. Innymi słowy, jeśli mam kontener typu flexbox z obrazem podrzędnym i zmieniam szerokość tego obrazu, wysokość w ogóle się nie zmienia, a obraz zostaje rozciągnięty.
div {
display: flex;
flex-wrap: wrap;
}
img{
width: 50%
}
<div>
<img src="https://loremflickr.com/400/300" >
<h4>Appify</h4>
<p> some text </p>
</div>
Co to powoduje?
Dodałem ten CodePen, aby zademonstrować, co mam na myśli.
align-self:flex-start
pomocą obrazu. Nie wiem dlaczego, może domyślną wartością w chrome jest stretch.align-items: stretch
/align-self: stretch
. Jeśli dodasz obramowanie wokół każdego elementu i usuniesz gowrap
, zauważysz, że wszystkie elementy rozciągają się we wszystkich przeglądarkach: codepen.io/anon/pen/oLXBVx?editors=1100Odpowiedzi:
Rozciąga się, ponieważ
align-self
wartość domyślna tostretch
. Ustawalign-self
nacenter
.Zobacz dokumentację tutaj: align-self
źródło
align-self: start;
może to być silniejsza odpowiedź, ponieważ obrazy powinny być wyrównane pionowo do góry ich kontenerów (nie do środka), jak każdy obraz bez stylów (bez CSS). Tak czy inaczej, obie odpowiedzi naprawiają rozciąganie. Zależy to oczywiście od tego, czego chce OP - po prostu nie uzyskałem tego „wyśrodkowanego w pionie” wrażenia z postu OP.align-self: [flex-start, center...others]
zapobiegnie zajęciu przez obraz 100% szerokości kontenerów elastycznych.align-self:center
naprawia to oczywiście, ale jeśli chcesz, aby twój obraz zaczynał się od początku lub końca użycia konteneraalign-items: flex-start or flex-end
align-items: center
(lub dowolne dopasowanie, które odpowiada Twoim potrzebom) na rodzica.Kluczowym atrybutem jest
align-self: center
:źródło
Napotkałem ten sam problem z menu podstawowym.
align-self: center;
nie działa dla mnie.Moim rozwiązaniem było owinięcie obrazu plikiem
<div style="display: inline-table;">...</div>
źródło
Dodawanie w
margin
celu wyrównania obrazów:Ponieważ chcieliśmy,
image
aby taki byłleft-aligned
, dodaliśmy:Podobnie
image
by byćright-aligned
, możemy dodaćmargin-right: auto;
. Fragment pokazuje demo dla obu typów wyrównania.Powodzenia...
źródło
Jest to rozciąganie, ponieważ domyślną wartością align-self jest stretch. istnieją dwa rozwiązania dla tego przypadku: 1. set img align-self: center LUB 2. set parent align-items: center
LUB
źródło