Dlaczego nie vertical-align: middle
zadziała? A jednak vertical-align: top
robi pracę.
span{
vertical-align: middle;
}
<div>
<img src="http://lorempixel.com/30/30/" alt="small img" />
<span>Doesn't work.</span>
</div>
Dlaczego nie vertical-align: middle
zadziała? A jednak vertical-align: top
robi pracę.
span{
vertical-align: middle;
}
<div>
<img src="http://lorempixel.com/30/30/" alt="small img" />
<span>Doesn't work.</span>
</div>
vertical-align
Odpowiedzi:
Właściwie w tym przypadku jest to dość proste: zastosuj wyrównanie pionowe do obrazu. Ponieważ wszystko jest w jednym wierszu, naprawdę jest to obraz, który chcesz wyrównać, a nie tekst.
Testowane w FF3.
Teraz możesz używać Flexboksa dla tego typu układu.
źródło
span
rozmiar czcionki. Zobacz moją odpowiedź .width:16px;height:16px
), zobaczysz, że obraz będzie zbyt niski ...Oto kilka prostych technik wyrównywania w pionie:
Jednoliniowe wyrównanie w pionie: środek
Ten jest łatwy: ustaw wysokość linii elementu tekstowego na równą wysokości kontenera
Wiele linii w pionie: do dołu
Absolutnie umieść wewnętrzny div względem jego kontenera
Wiele linii: wyrównanie w pionie: środek
Jeśli musisz obsługiwać starsze wersje IE <= 7
Aby wszystko działało poprawnie, musisz nieco zhakować CSS. Na szczęście istnieje błąd IE, który działa na naszą korzyść. Ustawiając
top:50%
pojemnik itop:-50%
wewnętrzny div, możesz osiągnąć ten sam rezultat. Możemy połączyć te dwa elementy za pomocą innej funkcji, której IE nie obsługuje: zaawansowanych selektorów CSS.Zmienna wysokość pojemnika w pionie: w środku
To rozwiązanie wymaga nieco bardziej nowoczesnej przeglądarki niż inne rozwiązania, ponieważ korzysta z
transform: translateY
właściwości. ( http://caniuse.com/#feat=transforms2d )Zastosowanie następujących 3 wierszy CSS do elementu spowoduje jego wyśrodkowanie w pionie w obrębie jego elementu nadrzędnego, niezależnie od wysokości elementu nadrzędnego:
źródło
display:table
Idisplay:table-cell
selektorów CSS działają świetnie, z wyjątkiem, oczywiście, w IE7 i poniżej. Po oderwaniu włosów przez kilka godzin zdecydowałem, że tak naprawdę nie muszę kontaktować się z nikim, kto nadal używa IE7-.display:table
ma pewne ograniczenia w różnych przeglądarkach (w IE11max-height
nie działa, jeśli element znajduje się w komórce tabeli), więc w niektórych przypadkach krawędzi nie jest dobrym pomysłem wyrównywanie w pionie za pomocą komórek tabeli.Zmień swój
div
kontener na elastyczny:Teraz są dwie metody wyśrodkowania linii trasowania dla całej zawartości:
Metoda 1:
PRÓBNY
Metoda 2:
PRÓBNY
Wypróbuj różne wartości szerokości i wysokości
img
i różne wartości rozmiaru czcionki na,span
a zobaczysz, że zawsze pozostają na środku pojemnika.źródło
justify-content: center;
i odstępy (bez użycia <br/> znaczników) możesz również dorzucićpadding: 1em;
. Świetna aktualizacja dla nas współczesnych twórców przeglądarek.Musisz zastosować
vertical-align: middle
oba elementy, aby były idealnie wyśrodkowane.Odpowiedź Zaakceptowany robi Centre ikonę około połowie x wysokość tekstu obok niej (jak określono w specyfikacji CSS ). Co może być wystarczająco dobre, ale może wyglądać nieco nieprzyzwoicie, jeśli tekst ma wznoszenia lub zstępujące elementy wyróżniające się na górze lub na dole:
Po lewej tekst nie jest wyrównany, po prawej jest jak pokazano powyżej. Demo na żywo można znaleźć w tym artykule na temat wyrównania pionowego .
Czy ktoś mówił o tym, dlaczego
vertical-align: top
działa w tym scenariuszu? Obraz w pytaniu jest prawdopodobnie wyższy niż tekst i tym samym określa górną krawędź pola linii.vertical-align: top
na elemencie rozpiętości, a następnie po prostu umieszcza go na górze pola linii.Główna różnica w zachowaniu między
vertical-align: middle
itop
polega na tym, że pierwsze ruchy elementów odnoszą się do linii bazowej ramki (która jest umieszczana wszędzie tam, gdzie jest to konieczne, aby spełnić wszystkie pionowe wyrównania i dlatego wydaje się raczej nieprzewidywalna ), a druga względem zewnętrznych granic ramki liniowej (która jest bardziej namacalne).źródło
Technika zastosowana w zaakceptowanej odpowiedzi działa tylko w przypadku tekstu jednowierszowego ( demo ), ale nie tekstu wielowierszowego ( demo ) - jak tam wspomniano.
Jeśli ktoś chce wyśrodkować tekst wielowierszowy w pionie na obrazie, oto kilka sposobów (Metody 1 i 2 zainspirowane tym artykułem CSS-Tricks )
Metoda nr 1: Tabele CSS ( FIDDLE ) (IE8 + ( caniuse ))
CSS:
Metoda nr 2: Pseudoelement na kontenerze ( FIDDLE ) (IE8 +)
CSS:
Metoda nr 3: Flexbox ( FIDDLE ) ( caniuse )
CSS (powyższe skrzypce zawiera prefiksy dostawcy):
źródło
Ten kod działa zarówno w IE, jak i FF:
źródło
Ponieważ musisz ustawić
line-height
wysokość div, aby to zadziałałoźródło
Zasadniczo musisz przejść do CSS3.
źródło
Dla przypomnienia, wyrównanie „poleceń” nie powinien pracować na rozpiętości, ponieważ jest to w linii tag, a nie na poziomie bloków tag. Rzeczy takie jak wyrównanie, margines, dopełnianie itp. Nie będą działać na znaczniku wbudowanym, ponieważ punktem wstawiania nie jest zakłócanie przepływu tekstu.
CSS dzieli tagi HTML na dwie grupy: liniową i blokową. Wyszukaj „css block vs inline”, a pojawi się świetny artykuł ...
http://www.webdesignfromscratch.com/html-css/css-block-and-inline/
(Zrozumienie podstawowych zasad CSS jest kluczem do tego, aby nie było tak denerwujące)
źródło
text-align
ivertical-align
(z wyjątkiem jego stosowania natd
elementy dla celów starszych) są w szczególności przeznaczone doinline
iinline-block
elementy (span
,img
itp).Użyj
line-height:30px
dla zakresu, aby tekst był wyrównany z obrazem:źródło
Inną rzeczą, którą możesz zrobić, to ustawić tekst
line-height
na rozmiar obrazów w<div>
. Następnie ustaw obrazy navertical-align: middle;
To naprawdę najłatwiejszy sposób.
źródło
Nie spotkałem jeszcze rozwiązania z
margin
żadną z tych odpowiedzi, więc oto moje rozwiązanie tego problemu.To rozwiązanie działa tylko wtedy, gdy znasz szerokość swojego obrazu.
HTML
CSS
źródło
Ogólnie używam 3px zamiast
top
. Zwiększając / zmniejszając tę wartość, obraz można zmienić na wymaganą wysokość.źródło
Napisz te właściwości zakresu
Użyj
display:inline-block;
Kiedy korzystasz zvertical-align
właściwości. Są to właściwości powiązaneźródło
Możesz ustawić obraz jako
inline element
korzystający zdisplay
właściwościźródło
Na przykład na przycisku w jQuery mobile możesz go nieco ulepszyć, stosując ten styl do obrazu:
źródło
Rozwiązanie wielowierszowe:
http://jsfiddle.net/zH58L/6/
Działa we wszystkich przeglądarkach i ie9 +
źródło
Zgadzam się, że może to być mylące. Spróbuj wykorzystać funkcje tabeli. Używam tej prostej sztuczki CSS do pozycjonowania modów na środku strony. Ma duże wsparcie przeglądarki:
i część CSS:
Pamiętaj, że musisz stylizować i dopasować rozmiar obrazu i kontenera tabeli, aby działał tak, jak chcesz. Cieszyć się.
źródło
Po pierwsze, wbudowany CSS wcale nie jest zalecany, to naprawdę psuje twój HTML.
Aby wyrównać obraz i zakres, możesz po prostu zrobić
vertical-align:middle
.źródło
Nie jestem pewien, dlaczego nie wyświetla się w przeglądarce nawigacji, ale zwykle używam takiego fragmentu, gdy próbuję wyświetlić nagłówek z obrazem i wyśrodkowanym tekstem, mam nadzieję, że to pomoże!
https://output.jsbin.com/jeqorahupo
źródło
Prawdopodobnie chcesz tego:
Jak sugerują inni, spróbuj
vertical-align
na obrazku:CSS nie jest denerwujący. Po prostu nie czytasz dokumentacji . ; P
źródło