Próbuję uzyskać niebieski pojemnik w środku różowego, ale wydaje vertical-align: middle;
się, że w tym przypadku nie działa.
<div style="display: block; position: absolute; left: 50px; top: 50px;">
<div style="text-align: left; position: absolute;height: 56px;vertical-align: middle;background-color: pink;">
<div style="background-color: lightblue;">test</div>
</div>
</div>
Wynik:
Oczekiwanie:
Proszę zasugerować, jak mogę to osiągnąć.
html
css
vertical-alignment
absolute
Vladimirs
źródło
źródło
position: absolute
wszędzie?vertical-align: middle;
współpracuje zdisplay: inline-block
lub układ tabelimargin-top: calc((56px - 16px) / 2)
, gdzie56px - parent height
,16px - element height/font-size
- JSFiddleOdpowiedzi:
Przede wszystkim zauważ to
vertical-align
ma zastosowanie tylko do komórek tabeli i elementów wbudowanych.Istnieje kilka sposobów uzyskania wyrównania w pionie, które mogą, ale nie muszą spełniać Twoich potrzeb. Jednak pokażę ci dwie metody z moich ulubionych:
1. Używanie
transform
itop
Kluczową kwestią jest to, że wartość procentowa
top
jest określana względemheight
bloku zawierającego; Natomiast wartość procentowa natransform
s zależy od rozmiaru samego prostokąta (obwiedni).Jeśli wystąpią problemy z renderowaniem czcionek (rozmyta czcionka), rozwiązaniem jest dodanie
perspective(1px)
dotransform
deklaracji, aby wyglądała następująco:Warto zauważyć, że CSS
transform
jest obsługiwany w IE9 + .2. Korzystanie
inline-block
(pseudo) elementówW tej metodzie mamy dwa
inline-block
elementy siostrzane , które są wyrównane pionowo w środku przezvertical-align: middle
deklarację.Jeden z nich ma
height
od100%
swojego rodzica, a drugi to nasz pożądany pierwiastek, którego chcieliśmy wyrównać go w środku.Na koniec powinniśmy użyć jednej z dostępnych metod, aby usunąć lukę między elementami na poziomie liniowym .
źródło
valign
element metody powinien byćdisplay: block
transform: translateY(-50%);
Nigdy wcześniej tego nie widziałem, ale działa bez zarzutu. Wygaszacz prawdziwego życia.Użyj tego :
odnieś ten link: https://www.smashingmagazine.com/2013/08/absolute-horizontal-vertical-centering-css/
źródło
height
właściwość musi być zdefiniowana (w px, em itp.), Aby to zadziałało.Użyj flex blox w niedopasowanym elemencie div, aby wyśrodkować jego zawartość.
Zobacz przykład https://plnkr.co/edit/wJIX2NpbNhO34X68ZyoY?p=preview
źródło
Wyśrodkuj w pionie i poziomie:
źródło
Możesz użyć
display:table
/table-cell;
źródło
.b
brakuje go,position: absolute;
co jest ważne, aby uzyskać inną właściwość wyświetlaną rzeczy, której nie uwzględniłem, aby kod był bardziej przejrzysty. Wiem, że nie ma sensu mający table-cell pozycjonowany bezwzględnie, ale być może jest inne podejście, które pozwoli utrzymaćposition: absolute;
w obu.a
i.b
klas?Oto prosty sposób użycia obiektu Top.
np .: Jeśli bezwzględny rozmiar elementu to 60 pikseli.
źródło
calc
jest pomocne, chociaż powinno byćtop: calc(50% - 30px)
rzeczywiście wyśrodkowane.Dodatkowe proste rozwiązanie
HTML:
CSS:
źródło
Sprawdź tę odpowiedź na podobny problem.
To zdecydowanie najłatwiejszy sposób, jaki znalazłem.
https://stackoverflow.com/a/26079837/4593442
UWAGA. Użyłem wyświetlacza: -webkit-flex; zamiast wyświetlacza: flex;do testowania w safari.
NOTATKA. Jestem tylko nowicjuszem, dzielę się pomocą od kogoś, kto jest wyraźnie doświadczony.
źródło
Możesz to zrobić, używając
display:table;
w div parent idisplay: table-cell; vertical-align: middle;
child divźródło