Miałem mózg nad tworzeniem pionowego wyrównania w css, używając następującego
.base{
background-color:green;
width:200px;
height:200px;
overflow:auto;
position:relative;
}
.vert-align{
padding-top:50%;
height:50%;
}
<!-- and used the following div structure. -->
<div class="base">
<div class="vert-align">
Content Here
</div>
</div>
Chociaż zdawało się, że to działa w tym przypadku, byłem zaskoczony, że kiedy zwiększyłem lub zmniejszyłem szerokość mojego podstawowego div, pionowe wyrównanie zaskoczy. Spodziewałem się, że kiedy ustawię właściwość padding-top, potrwa to wypełnienie jako procent wysokości pojemnika nadrzędnego, który w naszym przypadku jest podstawą, ale powyższa wartość 50 procent jest obliczana jako procent szerokość. :(
Czy istnieje sposób na ustawienie marginesu i / lub marginesu jako procent wysokości bez konieczności korzystania z JavaScript?
źródło
top
działa świetnie do zmiany rozmiaru na podstawie wysokości przeglądarki / okna. Co powiesz na posiadanie div pod tym div? Jak możeszclear
2. dywizji być pod dywanem, który jest przesunięty w dół otop:50%
??top: 50%
nie jest bardzo przydatne, jeśli chcesz wyrównać zawartość według własnego centrum.Odpowiedź na nieco innym pytaniem: Można użyć
vh
jednostki do elementów pad do środka wziernika :źródło
vh
jest prawie takie samo jak procenty ... w niektórych przypadkach nawet gorsze. Ta odpowiedź nie ma znaczenia dla pytaniaOto dwie opcje naśladowania potrzebnego zachowania. Nie jest to ogólne rozwiązanie, ale może pomóc w niektórych przypadkach. Odstępy pionowe są tutaj obliczane na podstawie rozmiaru elementu zewnętrznego, a nie jego elementu nadrzędnego, ale sam ten rozmiar może być względny względem elementu nadrzędnego, w ten sposób odstępy również będą względne.
Pierwsza opcja: użyj pseudoelementów, tutaj odstępy pionowe i poziome odnoszą się do zewnętrznego. Próbny
Przesunięcie poziomego odstępu do elementu zewnętrznego powoduje, że jest on względem rodzica elementu zewnętrznego. Próbny
Druga opcja: użyj bezwzględnego pozycjonowania. Próbny
źródło
Aby element potomny był pozycjonowany absolutnie na podstawie elementu macierzystego, musisz ustawić pozycję względną na elemencie macierzystym ORAZ pozycję bezwzględną na elemencie potomnym.
Następnie na elemencie potomnym „góra” odnosi się do wysokości elementu nadrzędnego. Musisz więc „przetłumaczyć” dziecku 50% jego własnego wzrostu.
Istnieje inne rozwiązanie wykorzystujące Flex Box.
Znajdziesz zalety / wady dla obu.
źródło
Można to osiągnąć za pomocą
writing-mode
nieruchomości. Jeśli ustawisz element nawriting-mode
tryb zapisu pionowego, taki jakvertical-lr
procentowe wartości jego potomków dla wypełnienia i marginesu, w obu wymiarach, staną się względne względem wysokości zamiast szerokości.Ze specyfikacji :
Definicja rozmiaru wbudowanego :
Przykład z elementem o zmiennym rozmiarze, w którym poziome marginesy odnoszą się do szerokości, a pionowe marginesy odnoszą się do wysokości.
Korzystanie z trybu zapisu pionowego może być szczególnie przydatne w sytuacjach, w których chcesz, aby proporcje elementu pozostały stałe, ale chcesz, aby jego rozmiar był skalowany w zależności od jego wysokości zamiast szerokości.
źródło
-webkit-
prefiksu, ale zgodnie z caniuse nie wymagał prefiksu od Safari 11. Czy wypróbowałeś go w przeglądarce, w której nie działał?Innym sposobem wyśrodkowania tekstu w jednej linii jest:
Lub tylko
źródło
Wypełnienie w 50% nie wyśrodkuje twojego dziecka, umieści je poniżej środka. Myślę, że naprawdę chcesz mieć wyściółkę z 25%. Może po prostu kończy Ci się miejsce, gdy Twoje treści stają się wyższe? Czy próbowałeś również ustawić margines górny zamiast padding-top?
EDYCJA: Nevermind, mówi strona w3schools
Więc może zawsze używa szerokości? Nigdy nie zauważyłem.
To, co robisz, można osiągnąć za pomocą display: table (przynajmniej dla nowoczesnych przeglądarek). Technika jest wyjaśniona tutaj .
źródło
line-height
, tzn. Czy wysokość linii to 200 pikseli?To bardzo interesujący błąd. (Moim zdaniem i tak jest to błąd) Niezłe znalezisko!
Jeśli chodzi o to, jak to ustawić, poleciłbym odpowiedź Camilo Martina. Ale dlaczego? Chciałbym to trochę wyjaśnić, jeśli nie macie nic przeciwko.
W specyfikacjach CSS znalazłem:
… Co jest dziwne, ale w porządku.
Tak więc z rodzicem
width: 210px
i dzieckiempadding-top: 50%
otrzymuję obliczoną / obliczoną wartośćpadding-top: 96.5px
- która nie jest oczekiwana105px
.Jest tak, ponieważ w systemie Windows (nie jestem pewien co do innych systemów operacyjnych) rozmiar wspólnych pasków przewijania jest domyślnie
17px × 100%
(lub w100% × 17px
przypadku poziomych pasków). Ci17px
są odjąć przed obliczenia50%
, stąd50% of 193px = 96.5px
.źródło