Sekcja treści jest wyśrodkowana. Wyśrodkuj wyrównanie w CSS. Wyśrodkuj element typu string lub string-*


Od autora: Witam Cię ponownie na łamach naszego bloga. W dzisiejszym artykule chciałbym porozmawiać o różnych technikach wyrównywania, które można zastosować zarówno do bloków, jak i ich zawartości. W szczególności, jak wyrównywać bloki w css, a także wyrównywać tekst.

Wyrównanie bloków do środka

W CSS centrowanie bloku jest łatwe. Jest to najbardziej znana technika dla wielu, ale przede wszystkim chciałbym o niej teraz porozmawiać. Oznacza to wyśrodkowane w poziomie wyrównanie względem elementu nadrzędnego. Jak to jest zrobione? Załóżmy, że mamy pojemnik i znajduje się w nim obiekt eksperymentalny:

< div id = "wrapper" >

< div id = "header" > < / div >

< / div >

Załóżmy, że jest to nagłówek witryny. Nie rozciąga się na całą szerokość okna i musimy go wycentrować. Piszemy tak:

#nagłówek(

szerokość/maks. szerokość: 800px;

margines: 0 auto;

Musimy określić dokładną lub maksymalną szerokość, a następnie zapisać kluczową właściwość - margines: 0 auto. Ustawia zewnętrzne marginesy naszego nagłówka, pierwsza wartość określa margines górny i dolny, a druga określa margines prawy i lewy. Wartość auto informuje przeglądarkę, aby automatycznie obliczyła dopełnienie po obu stronach, tak aby element był dokładnie wyśrodkowany względem elementu nadrzędnego. Wygodny!

Wyrównanie tekstu

Jest to również bardzo prosta technika. Aby wyrównać wszystkie elementy śródliniowe, możesz użyć właściwości text-align i jej wartości: left, Right, Center. Ten ostatni centruje tekst, a tego właśnie potrzebujemy. Możesz nawet wyrównać obraz w ten sam sposób, ponieważ domyślnie jest to również element osadzony.

Wyrównaj tekst w pionie

Ale to jest bardziej skomplikowane. Domyślnie nie ma prostej, dobrze znanej właściwości, która pozwalałaby łatwo wyśrodkować tekst w pionie w kontenerze blokowym. Istnieje jednak kilka technik, które projektanci układu wymyślili na przestrzeni lat.

Ustaw wysokość bloku za pomocą dopełnienia. Sposobem nie jest ustawienie jawnej wysokości za pomocą wysokości, ale utworzenie jej sztucznie za pomocą dopełnienia na górze i na dole, które powinny być takie same. Stwórzmy dowolny blok i napiszmy do niego następujące właściwości:

div(tło: #ccc; dopełnienie: 30px 0; )

div(

tło: #ccc;

dopełnienie: 30px 0;

Tło służy jedynie do wizualnego pokazania krawędzi i wypełnienia. Teraz wysokość bloku składa się z tych dwóch wcięć i samej linii i wszystko wygląda tak:

Zdefiniuj wysokość linii dla bloku. Myślę, że jest to bardziej poprawny sposób, jeśli chcesz wyrównać jeden wiersz tekstu. Dzięki niemu możesz zapisać wysokość zgodnie z normą, korzystając z właściwości height. Następnie musi również ustawić wysokość linii, taką samą jak wysokość bloku jako całości.

div(wysokość: 60 pikseli; wysokość linii: 60 pikseli; )

div(

wysokość: 60px;

wysokość linii: 60px;

Wynik będzie podobny do powyższego obrazu. Wszystko będzie działać, nawet jeśli dodasz dopełnienie. Jednak tylko dla jednej linii. Jeśli potrzebujesz więcej tekstu w elemencie, ta metoda nie będzie działać.

Konwertuj blok na komórkę tabeli. Istotą tej metody jest to, że komórka tabeli posiada właściwość Vertical-align: Middle, która centruje element w pionie. Odpowiednio w tym przypadku blok należy ustawić na następującą wartość:

div(wyświetlanie: komórka tabeli; wyrównanie do pionu: środek; )

div(

wyświetlacz: tabela - komórka;

pionowo - wyrównaj: środek;

Ta metoda jest dobra, ponieważ możesz wyrównać dowolną ilość tekstu do środka. Ale lepiej napisać display: table do bloku, w którym zagnieżdżony jest nasz div, w przeciwnym razie może to nie zadziałać.

Cóż, tutaj dochodzimy do ostatniej techniki na dziś - jest to pionowe wyrównanie samych bloków. Trzeba powiedzieć, że znowu nie ma właściwości, która byłaby przeznaczona specjalnie do tego, ale jest kilka sztuczek, o których powinieneś wiedzieć.

Ustaw wcięcia jako procent. Jeśli znasz wysokość elementu nadrzędnego i umieścisz w nim kolejny element blokowy, możesz go wyśrodkować za pomocą procentowego dopełnienia. Na przykład element nadrzędny ma wysokość 600 pikseli. Umieszczasz w nim blok o wysokości 300 pikseli. Jak bardzo musisz cofnąć się na górze i na dole, aby go wyśrodkować? 150 pikseli każdy, co stanowi 25% wysokości rodzica.

Metoda ta pozwala na wyrównanie tylko wtedy, gdy wymiary pozwalają na obliczenia. A jeśli Twój rodzic ma 887 pikseli wzrostu, nie będziesz w stanie niczego dokładnie nagrać, to już jest jasne.

Wstaw element do komórki tabeli. Ponownie, jeśli przekształcimy element nadrzędny w komórkę tabeli, wówczas wstawiony do niego blok zostanie automatycznie wyśrodkowany w pionie. Aby to zrobić, rodzic musi po prostu ustawić Vertical-align: Middle.

A jeśli dodatkowo napiszemy również margines: 0 auto, to element zostanie wyśrodkowany poziomo!

Centrowanie elementów w CSS to jeden z najpopularniejszych powodów narzekania na CSS. " Dlaczego wszystko jest takie trudne?” – są oburzeni. Wydaje mi się, że problem nie polega na tym, że jest to trudne do wykonania, ale na tym, że sposobów na wyrównanie elementów do środka jest wiele i wybór tego właściwego może być dość trudny.

Uporządkujmy wszystkie możliwe rozwiązania na diagramie drzewkowym i miejmy nadzieję, że ułatwi nam to zadanie.

Muszę więc wyśrodkować element...

Wyrównanie poziome

Centrowanie elementów wbudowanych w elemencie nadrzędnym na poziomie bloku jest dość proste:

Wyśrodkuj dzieci ( wyrównanie tekstu: do środka; )

To zadziała dla inline, inline-block, inline-table, inline-flex itp.

Możesz wyśrodkować element blokowy, ustawiając właściwości marginesu lewego i prawego marginesu na auto (musi mieć również ustawioną szerokość, w przeciwnym razie element po prostu zajmie całą szerokość zawartości i nie będzie potrzeby wyrównywania) . Najczęściej robi się to za pomocą skrótowej właściwości, takiej jak ta:

Center-me (margines: 0 auto; )

To zadziała bez względu na szerokość ustawioną na elemencie blokowym lub jego rodzicu.

Pamiętaj, że w ten sposób nie będzie można owinąć elementu wyśrodkowanego. Jednak i na to jest pewien trik.

Wyśrodkowanie wielu elementów blokowych

Jeśli istnieją dwa lub więcej elementów blokowych, które należy wyrównać w poziomie i wyśrodkować w tej samej linii, lepszym rozwiązaniem może być zmiana typu ich wyświetlania. Poniżej znajduje się przykład zmiany typu wyświetlania na inline-block oraz przykład z Flexboxem:

Jeśli te wiele bloków znajduje się w różnych liniach, technika automatycznego wcięcia jest nadal świetna:

Wyrównanie pionowe

Wyrównanie do środka w pionie w CSS jest nieco bardziej skomplikowane.

Wyśrodkuj element typu string lub string-*

Wyrównanie elementu jedną linią

Czasami elementy ciągu/tekstu można wyśrodkować po prostu dlatego, że mają tę samą wartość właściwości padding-top i padding-bottom.

Link ( dopełnienie u góry: 30 pikseli; dopełnienie u dołu: 30 pikseli; )

Jeśli z jakiegoś powodu dopełnienie nie wchodzi w grę, ale próbujesz wyśrodkować jakiś tekst i wiesz na pewno, że nie zostanie on zawinięty przez coś innego, to istnieje mały trik, którego istotą jest ustawienie linii właściwości -height równa wartości wysokości elementu.

Sztuczka z tekstem środkowym ( wysokość: 100 pikseli; wysokość linii: 100 pikseli; biała spacja: nowrap; )

Wyrównywanie elementu wieloliniowego

Równe wypełnienie na górze i na dole może również stworzyć efekt wyśrodkowania w przypadku elementów wieloliniowych, ale jeśli to nie zadziała, możliwe, że element zawierający tekst jest komórką tabeli lub jest jawnie ustawiony tak, aby się tak zachowywał sposób za pomocą CSS. W tym przypadku radzi sobie z tym właściwość Vertical-align, w przeciwieństwie do tego, jak zwykle radzi sobie z wyrównaniem elementów w linii.

Jeśli jest to coś w rodzaju stołu, może warto zastosować Flexbox? Pojedynczy element Flex można łatwo wyśrodkować w pojemniku Flex.

Flex-centrum-pionowo (wyświetlanie: flex; justify-treść: środek; kierunek flex: kolumna; wysokość: 400px;)

Pamiętaj, że ma to znaczenie, gdy kontener ma stałą wysokość (px,% itp.), dlatego też kontener ma tutaj określoną wysokość.

Jeśli nie można zastosować obu powyższych technik, można zastosować technikę „elementu widma”, w której pseudoelement o wysokości 100% jest umieszczany wewnątrz pojemnika i wyrównywany pionowo do jego środka.

Ghost-center ( pozycja: względna; ) .ghost-center::before ( treść: " "; wyświetlacz: blok inline; wysokość: 100%; szerokość: 1%; wyrównanie do pionu: środek; ) .ghost-center p (wyświetlanie: blok wbudowany; wyrównanie do pionu: środek; )

Wyrównaj do środka elementu blokowego

Wyrównaj element o znanej wysokości

Dość często nie możemy poznać wysokości z wielu powodów: jeśli szerokość się zmieni, tekst może zostać sformatowany i zmienić wysokość. Różne style tekstu mogą zmieniać wysokość. Inny rozmiar czcionki może zmienić wysokość. Elementy o stałym współczynniku proporcji, takie jak obrazy, mogą zmieniać wysokość podczas zmiany rozmiaru itp.

Ale jeśli znasz wysokość elementu, możesz wyśrodkować w następujący sposób:

Rodzic ( pozycja: względna; ) .child ( pozycja: bezwzględna; góra: 50%; wysokość: 100 pikseli; górny margines: -50 pikseli; /* uwzględnia dopełnienie i obramowanie, jeśli nie używasz box-sizing: border-box; */ )

Wyrównanie elementu o nieznanej wysokości

Nawet jeśli nie znasz wysokości elementu, nadal możesz przesunąć go do 50% wysokości elementu nadrzędnego, a następnie podnieść do 50% jego własnej wysokości:

Rodzic ( pozycja: względna; ) .child ( pozycja: bezwzględna; góra: 50%; transformacja: tłumaczY(-50%); )

Mała niespodzianka, można to zrobić bardzo łatwo za pomocą Flexbox.

Rodzic (wyświetlanie: flex; kierunek flex: kolumna; justowanie-treść: środek; )

Wyrównanie poziome i pionowe

Możesz łączyć techniki przedstawione powyżej, aby uzyskać idealnie wyśrodkowane elementy. Ale zazwyczaj można je podzielić na 4 grupy:

Wyrównywanie elementu o stałej szerokości i wysokości

Użycie ujemnego maringu równego połowie tej szerokości i wysokości po absolutnym położeniu elementu na poziomie 50%/50% wyśrodkuje element. Ta metoda ma dość dobrą obsługę wielu przeglądarek:

Rodzic ( pozycja: względna; ) .child ( szerokość: 300px; wysokość: 100px; dopełnienie: 20px; pozycja: bezwzględna; góra: 50%; lewa: 50%; margines: -70px 0 0 -170px; )

Wyrównywanie elementu o nieznanej szerokości i wysokości

Jeśli nie znasz szerokości lub wysokości elementu, możesz użyć właściwości transform i ujemnego przełożenia 50% w obu kierunkach (w zależności od bieżącej szerokości/wysokości elementu) na środek:

Rodzic ( pozycja: względna; ) .child ( pozycja: bezwzględna; góra: 50%; lewa: 50%; transformacja: tłumaczenie(-50%, -50%); )

Wyrównywanie elementu za pomocą Flexbox

Aby wyśrodkować element za pomocą Flexbox, musisz użyć dwóch właściwości centrowania:

Rodzic (wyświetlanie: flex; justowanie-treść: środek; wyrównanie elementów: środek; )

Wyrównywanie elementu za pomocą siatki CSS

To tylko mała sztuczka (opublikowana przez Lance'a Janssena), która będzie działać głównie w przypadku pojedynczego elementu:

Treść, HTML ( wysokość: 100%; wyświetlacz: siatka; ) span ( /* element do środka */ margines: auto; )

Wniosek

Teraz możesz wyśrodkować wszystko w CSS.

Dzień dobry subskrybentom i czytelnikom tej publikacji. Dzisiaj chcę zagłębić się w szczegóły i powiedzieć, jak wyśrodkować tekst w CSS. W niektórych poprzednich artykułach pośrednio poruszałem ten temat, więc masz pewną wiedzę w tym obszarze.

Jednak w tej publikacji opowiem o różnych sposobach wyrównywania obiektów, a także wyjaśnię, jak wcinać i podkreślać akapity. Zacznijmy więc uczyć się materiału!

HTML i jego potomstwo
i wyrównaj

Ta metoda prawie nigdy nie jest używana, ponieważ została zastąpiona przez narzędzia kaskadowych arkuszy stylów. Jednak wiedza o istnieniu takiego tagu nie zaszkodzi.

Jeśli chodzi o walidację (termin ten szczegółowo opisano w artykule „”), sama specyfikacja HTML potępia jego użycie < centrum>, ponieważ dla ważności konieczne jest użycie przejścia TYP DOK.>.

Ten typpozwala na przedostanie się zabronionych elementów.

CENTRUM

Przejdźmy teraz do atrybutu wyrównywać. Ustawia poziome wyrównanie obiektów i dopasowuje się po deklaracji znacznika. Zazwyczaj można go użyć do wyrównania treści do lewej ( lewy), wzdłuż prawej krawędzi ( Prawidłowy), wyśrodkowany ( Centrum) i szerokość tekstu ( uzasadniać).

Poniżej podam przykład, w którym umieściłem obrazek i akapit na środku.

wyrównywać

Ta treść będzie wyśrodkowana.

Należy pamiętać, że dla obrazu analizowany przez nas atrybut ma nieco inne znaczenie.

W przykładzie, którego użyłem wyrównaj="środek". Dzięki temu obraz został wyrównany tak, aby zdanie znajdowało się wyraźnie pośrodku obrazu.

Narzędzia do centrowania w CSS

Znacznie częściej wykorzystywane są właściwości CSS służące do wyrównywania bloków, treści tekstowych i graficznych. Wynika to przede wszystkim z wygody i elastyczności wdrażania stylów.

Zacznijmy więc od pierwszej właściwości centrowania tekstu - to jest tekst-wyrównywać.

Działa w taki sam sposób, jak wyrównanie w . Spośród słów kluczowych możesz wybrać jedno z ogólnej listy lub odziedziczyć cechy przodka ( dziedziczyć).

Chciałbym zauważyć, że w css3 możesz ustawić jeszcze 2 parametry: początek– w zależności od zasad pisania tekstu (od prawej do lewej lub odwrotnie), ustawia wyrównanie do lewej lub prawej strony (podobnie jak w przypadku pracy w lewo lub w prawo) oraz koniec– przeciwieństwo startu (przy pisaniu tekstu od lewej do prawej zachowuje się jak prawy, przy pisaniu od prawej do lewej – lewy).

wyrównanie tekstu

Zdanie po prawej stronie

Zdanie używające końca

Opowiem Ci o małej sztuczce. Podczas wybierania wartości uzasadniać ostatnia linka może nieestetycznie zwisać z dołu. Aby np. ustawić go w centrum, można skorzystać z nieruchomości wyrównanie tekstu jako ostatnie.

Aby wyrównać zawartość witryny lub komórki tabeli w pionie, użyj właściwości wyrównanie w pionie. Poniżej opisałem główne słowa kluczowe danego elementu.

Słowo kluczowe Zamiar
linia bazowa Określa wyrównanie do linii nadrzędnej, zwanej linią bazową. Jeśli obiekt-przodek nie ma takiej linii, wyrównanie następuje wzdłuż dolnej granicy.
środek Środek zmutowanego obiektu jest wyrównywany do linii bazowej, do której dodawana jest wysokość podłogi elementu nadrzędnego.
spód Dół zaznaczonej zawartości dopasowuje się do dołu obiektu znajdującego się pod nią.
szczyt Podobnie jak dół, ale z górną częścią obiektu.
Super Tworzy indeks górny znaku.
pod Tworzy indeks dolny elementu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 wyrównanie w pionie
C W mi TODO

wyrównanie w pionie

C W mi TODO

Wcięcia

I w końcu dochodzimy do wcięć akapitowych. Język CSS wykorzystuje specjalną właściwość zwaną wcięcie tekstu.

Za jego pomocą możesz wykonać zarówno czerwoną linię, jak i występ (należy podać wartość ujemną).

wcięcie tekstu

Aby utworzyć czerwoną linię wystarczy znać tylko jeden parametr.

Jest to prosta właściwość wcięcia tekstu.

Myślę, że wielu z Was, którzy mieli do czynienia z układem, spotkało się z koniecznością wyrównywania elementów w pionie i zna trudności, jakie pojawiają się przy wyrównywaniu elementu do środka.

Tak, w CSS dostępna jest specjalna wielowartościowa właściwość Vertical-align służąca do wyrównywania w pionie. Jednak w praktyce wcale nie działa to tak, jak oczekiwano. Spróbujmy to rozgryźć.


Porównajmy następujące podejścia. Wyrównaj za pomocą:

  • stoły,
  • wcięcie,
  • Wysokość linii
  • rozciąganie,
  • marża ujemna,
  • przekształcać
  • pseudoelement
  • Flexbox.
Aby to zilustrować, rozważmy następujący przykład.

Istnieją dwa elementy div, z których jeden jest zagnieżdżony w drugim. Nadajmy im odpowiednie klasy – zewnętrzną i wewnętrzną.


Wyzwanie polega na dopasowaniu elementu wewnętrznego do środka elementu zewnętrznego.

Najpierw rozważmy przypadek, gdy wymiary bloków zewnętrznych i wewnętrznych znany. Dodajmy regułę display: inline-block do elementu wewnętrznego oraz Text-align: center i Vertical-align: Middle do elementu zewnętrznego.

Pamiętaj, że wyrównanie dotyczy tylko elementów, które mają tryb wyświetlania inline lub inline-block.

Ustawmy rozmiary bloków, a także kolory tła, abyśmy mogli zobaczyć ich granice.

Zewnętrzny ( szerokość: 200 pikseli; wysokość: 200 pikseli; wyrównanie tekstu: środek; wyrównanie w pionie: środek; kolor tła: #ffc; ) .inner ( wyświetlacz: blok inline; szerokość: 100 pikseli; wysokość: 100 pikseli; kolor tła : #fcc; )
Po zastosowaniu stylów zobaczymy, że wewnętrzny blok jest wyrównany poziomo, ale nie pionowo:
http://jsfiddle.net/c1bgfffq/

Dlaczego to się stało? Rzecz w tym, że właściwość Vertical-align wpływa na wyrównanie sam element, a nie jego zawartość(z wyjątkiem sytuacji, gdy jest stosowany do komórek tabeli). Dlatego zastosowanie tej właściwości do elementu zewnętrznego niczego nie dało. Co więcej, zastosowanie tej właściwości do elementu wewnętrznego również nic nie da, ponieważ bloki inline są wyrównane pionowo względem sąsiednich bloków, a w naszym przypadku mamy jeden blok inline.

Istnieje kilka technik rozwiązania tego problemu. Poniżej przyjrzymy się bliżej każdemu z nich.

Wyrównanie za pomocą tabeli

Pierwsze rozwiązanie, które przychodzi na myśl, to zastąpienie zewnętrznego bloku tabelą zawierającą jedną komórkę. W takim przypadku wyrównanie zostanie zastosowane do zawartości komórki, czyli do wewnętrznego bloku.


http://jsfiddle.net/c1bgfffq/1/

Oczywistą wadą tego rozwiązania jest to, że z semantycznego punktu widzenia niewłaściwe jest używanie tabel do wyrównania. Drugą wadą jest to, że utworzenie tabeli wymaga dodania kolejnego elementu wokół zewnętrznego bloku.

Pierwszy minus można częściowo usunąć zastępując tagi table i td tagami div i ustawiając tryb wyświetlania tabeli w CSS.


.outer-wrapper ( display: table; ) .outer ( display: table-cell; )
Jednak zewnętrzny blok nadal pozostanie stołem ze wszystkimi wynikającymi z tego konsekwencjami.

Wyrównanie za pomocą wcięć

Jeżeli znane są wysokości bloku wewnętrznego i zewnętrznego, to ustawienie można ustalić za pomocą wcięć pionowych bloku wewnętrznego, korzystając ze wzoru: (H zewn. – H wewn.) / 2.

Zewnętrzna ( wysokość: 200px; ) .wewnętrzna ( wysokość: 100px; margines: 50px 0; )
http://jsfiddle.net/c1bgfffq/6/

Wadą rozwiązania jest to, że ma ono zastosowanie jedynie w ograniczonej liczbie przypadków, gdy znane są wysokości obu bloków.

Wyrównanie za pomocą wysokości linii

Jeśli wiesz, że wewnętrzny blok powinien zajmować nie więcej niż jedną linię tekstu, możesz skorzystać z właściwości line-height i ustawić ją na wartość równą wysokości zewnętrznego bloku. Ponieważ zawartość wewnętrznego bloku nie powinna zawijać się do drugiej linii, zaleca się dodać również białe znaki: nowrap i overflow: ukryte reguły.

Zewnętrzna ( wysokość: 200 pikseli; wysokość linii: 200 pikseli; ) .inner ( biała spacja: nowrap; przepełnienie: ukryte; )
http://jsfiddle.net/c1bgfffq/12/

Tej techniki można również użyć do wyrównywania tekstu wielowierszowego, jeśli ponownie zdefiniujesz wartość wysokości linii dla bloku wewnętrznego, a także dodasz reguły display: inline-block i Vertical-align: środkowy.

Zewnętrzna ( wysokość: 200 pikseli; wysokość linii: 200 pikseli; ) .inner ( wysokość linii: normalna; wyświetlacz: blok inline; wyrównanie do pionu: środek; )
http://jsfiddle.net/c1bgfffq/15/

Wadą tej metody jest konieczność znajomości wysokości bloku zewnętrznego.

Wyrównanie za pomocą „rozciągnięcia”

Tę metodę można zastosować, gdy nie jest znana wysokość bloku zewnętrznego, ale znana jest wysokość bloku wewnętrznego.

Aby to zrobić, potrzebujesz:

  1. ustawić pozycjonowanie względne do bloku zewnętrznego i pozycjonowanie absolutne do bloku wewnętrznego;
  2. dodaj reguły top: 0 i Bottom: 0 do wewnętrznego bloku, w wyniku czego rozciągnie się on na całą wysokość zewnętrznego bloku;
  3. ustaw pionowe dopełnienie wewnętrznego bloku na auto.
.outer ( pozycja: względna; ) .inner ( wysokość: 100px; pozycja: bezwzględna; góra: 0; dół: 0; margines: auto 0; )
http://jsfiddle.net/c1bgfffq/4/

Ideą tej techniki jest to, że ustawienie wysokości rozciągniętego i ustawionego absolutnie bloku powoduje, że przeglądarka oblicza wypełnienie pionowe w równym stosunku, jeśli jest ustawiona na auto.

Wyrównanie z ujemnym marginesem u góry

Metoda ta stała się powszechnie znana i stosowana bardzo często. Podobnie jak poprzedni, stosuje się go, gdy nie jest znana wysokość bloku zewnętrznego, ale znana jest wysokość bloku wewnętrznego.

Należy ustawić blok zewnętrzny na pozycjonowanie względne, a blok wewnętrzny na pozycjonowanie absolutne. Następnie należy przesunąć blok wewnętrzny w dół o połowę wysokości bloku zewnętrznego top: 50% i podnieść go o połowę własnej wysokości margines-top: -H internal / 2.

Zewnętrzna ( pozycja: względna; ) .wewnętrzna ( wysokość: 100 pikseli; pozycja: bezwzględna; góra: 50%; margines-góra: -50 pikseli; )
http://jsfiddle.net/c1bgfffq/13/

Wadą tej metody jest konieczność znajomości wysokości jednostki wewnętrznej.

Wyrównanie z transformacją

Ta metoda jest podobna do poprzedniej, ale można ją zastosować, gdy nieznana jest wysokość jednostki wewnętrznej. W takim przypadku zamiast ustawiać ujemne dopełnienie pikseli, możesz użyć właściwości transform i przesunąć wewnętrzny blok w górę za pomocą funkcji translacjiY i wartości -50% .

Zewnętrzna ( pozycja: względna; ) .inner ( pozycja: absolutna; góra: 50%; transformacja: translacjaY(-50%); )
http://jsfiddle.net/c1bgfffq/9/

Dlaczego w poprzedniej metodzie nie można było ustawić wartości procentowej? Ponieważ procentowe wartości marginesów są obliczane w stosunku do elementu nadrzędnego, wartość 50% będzie stanowić połowę wysokości pudełka zewnętrznego i musielibyśmy podnieść pudełko wewnętrzne do połowy jego własnej wysokości. Właściwość transform jest do tego idealna.

Wadą tej metody jest to, że nie można jej zastosować, jeśli jednostka wewnętrzna ma pozycjonowanie bezwzględne.

Wyrównanie za pomocą Flexbox

Najnowocześniejszym sposobem wyrównania w pionie jest użycie elastycznego układu pudełka (popularnie zwanego Flexbox). Moduł ten pozwala elastycznie kontrolować rozmieszczenie elementów na stronie, rozmieszczając je niemal w dowolnym miejscu. Wyśrodkowanie dla Flexboxa jest bardzo prostym zadaniem.

Blok zewnętrzny musi być ustawiony na wyświetlanie: flex, a blok wewnętrzny na margines: auto. I to wszystko! piękne, nieprawdaż?

Zewnętrzny (wyświetlacz: flex; szerokość: 200px; wysokość: 200px; ) .inner ( szerokość: 100px; margines: auto; )
http://jsfiddle.net/c1bgfffq/14/

Wadą tej metody jest to, że Flexbox jest obsługiwany tylko przez nowoczesne przeglądarki.

Którą metodę wybrać?

Musisz zacząć od opisu problemu:
  • Aby wyrównać tekst w pionie, lepiej jest użyć wcięć pionowych lub właściwości line-height.
  • W przypadku elementów pozycjonowanych bezwzględnie o znanej wysokości (np. ikon) idealna jest metoda z ujemną właściwością marginesu górnego.
  • W bardziej złożonych przypadkach, gdy wysokość bloku nie jest znana, należy użyć pseudoelementu lub właściwości transform.
  • Cóż, jeśli masz tyle szczęścia, że ​​​​nie musisz obsługiwać starszych wersji przeglądarki IE, to oczywiście lepiej skorzystać z Flexboksa.

Analizujemy wyrównanie elementów blokowych w CCS. Umieszczamy kilka na środku DZIAŁ Lub LI elementy. W większości przypadków oferuję kilka moich opcji.

Celem tego artykułu nie jest wypisanie wszystkich opcji wyrównania i przepisanie tego, co już gdzieś istnieje. Nie pamiętam dlaczego, ale często nie byłem zadowolony z oferowanych opcji. Albo były stałe bloki, albo wszystko się rozpadło podczas adaptacyjnego układu, albo jakieś inne niedociągnięcia.

Czasami, aby wyrównać do środka, wystarczy dodać kilka atrybutów i nie potrzeba nic skomplikowanego. Na przykład ja też.

Poniżej znajduje się kilka opcji układu adaptacyjnego w celu wyrównywania bloków pośrodku, które I używam na swoich stronach internetowych. A jeśli ta pierwsza jest dość powszechna, to być może niektóre inne metody nie zostaną nawet opisane w Internecie dokładnie w ten sposób.

opcja 1

Proste wyrównanie wszystkich bloków do środka strony.

Wyśrodkujmy Zawartość UL z 4 elementów LI, które znajdują się w bloku DZIAŁ z klasą pojemnik.






W tym przypadku wystarczą następujące reguły CSS:

Pojemnik (
szerokość: 100%;
}

Kontener ul (
wyrównanie tekstu: do środka;
styl listy: brak;
}

Kontener Li (
wyświetlacz: blok inline;
}

Otrzymujemy następujący widok: W środku znajdują się 4 elementy LI. Po zmniejszeniu rozmiaru ekranu elementy, które nie mieszczą się, są przesuwane w dół.

Jeśli bloki LI z tymi właściwościami nie są zainstalowane w środku, co oznacza, że ​​przeszkadza im jakaś inna nieruchomość. Może to być na przykład nieruchomość pływak: w lewo Lub wyświetlacz: stół; lub jakiś inny.

Możesz teraz dodać inne style do górnej struktury (do podstawowej struktury wyrównywania CSS). Na przykład utwórz bloki o stałym rozmiarze i wcinaj się nawzajem:

Kontener Li (
wyświetlacz: blok inline;
margines: 5px;
szerokość: 100px;
}

Otrzymujemy co następuje:

Ale ta opcja ma jedną wadę. Bloki znajdują się w centrum, ale są ogromne odległości na lewo i prawo. Można je zmniejszyć zmieniając szerokość.

Lub możesz zrobić pojemniki tego samego rozmiaru, aby wcięcia były tylko między pojemnikami, a nie było ich po lewej i prawej stronie.

Potem usuniemy margines i dodaj szerokość tego szerokość tak, aby całkowicie zakrył obszar.

Kontener Li (
wyrównanie w pionie: góra;
wyświetlacz: blok inline;
szerokość: 32,899%;
}

Pomiędzy blokami będzie niewielki obszar pustej przestrzeni. Aby uczynić go jeszcze większym, możesz wycofać się do środka za pomocą parametru wyściółka.

W blokach celowo nie dodaję niczego dodatkowego, aby pozostawić dokładnie te style, które bezpośrednio wpływają na wyrównanie. Ale jeśli zrobisz to samo, nie dostaniesz takich bloków. Choćby dlatego, że po pierwsze trzeba dodać kolor do bloku, a po drugie, jeśli jest pusty, umieścić wysokość: 100px;. Inne atrybuty są według twoich upodobań.

Ostatnia opcja to:

Na powyższym zrzucie ekranu pozostawiłem inne obszary witryny, aby było jasne, gdzie są granice bloków, ponieważ jeśli przylegają do krawędzi, to sama krawędź nie jest już widoczna. A na zdjęciu białe krawędzie po lewej i prawej stronie to inne ustawienie, które nie ma nic wspólnego z omawianym przykładem. Powtarzam, same bloki przylegają do krawędzi, które są niewidoczne, ponieważ bloki całkowicie je zakrywają.

Opcja 2

Istnieje wiele sposobów centrowania bloków. Ale jeśli chcesz, aby wyrównanie było mądrzejsze, musisz się nieźle nagimnastykować. Na szczęście wymyśliłem interesującą metodę do następujących celów:

Jak wyśrodkować wszystkie elementy div, aby blok w następnej linii był wyrównany do lewej strony?

Mamy następującą strukturę:



Blok 1


Blok 2


Blok 3


Blok 4


Blok 5

Piszemy dla nich zajęcia:


szerokość: 90%;
margines: 0 auto;
}

Artykuł archiwalny (
wyświetlacz: blok inline;
wyrównanie w pionie: góra;

Szerokość: oblicz (33,3333% - (0,666666666667 * 36px));
margines: 0 10px 0 11px;
}

Należy pamiętać, że w przypadku zmiany rozmiaru oblicz, następnie musisz eksperymentalnie dostosować wymiary margines. W przeciwnym razie bloki nie zostaną wyśrodkowane.

To ustawienie należy wykonać na oko. Ale jeśli w nowej linii jest mniej bloków niż w linii powyżej, ten samotny blok będzie lewa strona. I wygląda to dużo ładniej niż wtedy, gdy w następnej linii znajduje się pojedynczy blok w centrum.

Stosując powyższą technikę, otrzymamy układ adaptacyjny, z równymi wszystkimi krawędziami, który nie ulegnie pogorszeniu przy zmianie rozmiaru ekranu.

A jeśli chcemy, żeby wersja mobilna miała nie 3 bloki, a 2, to w CC dla rozdzielczości 768 pikseli podzielimy bloki inaczej:

Ekran @media i (maksymalna szerokość: 768 pikseli) (
.archiwum-artykuł (
szerokość: oblicz (47,3333% - (0,666666666667 * 25px));
margines: 0 10 pikseli 0 20 pikseli;
}
}

Zdobądźmy te same bloki w wersji mobilnej, ale z dwoma blokami w linii:

Opcja 3

Teraz wyrównamy za pomocą przewód. Może się to wydawać idealnym sposobem na wyrównanie poziomu, ponieważ w rzeczywistości działa bardzo prosto. Jednak FLEX nie radzi sobie z zadaniem opisanym w opcji 2. Przynajmniej mi nie udało się osiągnąć takich rezultatów.

Do następnej sekcji:

Dodawanie stylów:

#cssmenu (
margines: 20px automatyczny;
}

#cssmenu ul (
styl listy: brak;
wyświetlacz: elastyczny;
owinięcie elastyczne: owinięcie;
justify-content: środek;
}

#cssmenu > ul > li (
margines: 1px;
}

Otrzymujemy:

W podanym przykładzie:

owinięcie elastyczne: owinięcie;

Przenosi bloki do następnej linii, jeśli zapełniają pojemnik. W przeciwnym razie wyjdą dalej poza okno przeglądarki.

justify-content: środek;

Wyrównujemy zawartość bloków do środka.

Opcja 4

Kolejna opcja wyrównania wykorzystująca technologię flex.

Mamy kontener, w którym znajdują się dwa bloki. Potrzebujemy tych 2 bloków, aby podzielić szerokość na dwa równe boki.


Blok 1

Blok 2

Aby to zrobić, napiszemy w stylach następujące właściwości:

Pojemnik (
wyświetlacz: elastyczny;
}

Blok (
podstawa elastyczna: 100%;
}

Opcja 5

Istnieje inna opcja centrowania bloków, jeśli ich liczba jest ściśle równa. Na przykład: jest 9 bloków, po 3 w każdej linii. I wiesz, że tak zawsze pozostanie. Przykładowo tworzysz stronę docelową i wiesz na pewno, że pomiędzy tymi blokami na stronie nie zostanie dodane nic niepotrzebnego.

Mamy więc 9 bloków następującego typu (nie powieliłem linii 9 razy, ale pamiętaj, że jest 9 bloków):



Blok 1


Blok 2


Blok 3

Zastosuj dla nich style:

Kontener-archiwum-artykułów (
szerokość: 100%;
wyrównanie tekstu: do środka;
}

Artykuł archiwalny (
szerokość: 25%;
wyrównanie w pionie: góra;
wyświetlacz: blok inline;
wyrównanie tekstu: do lewej;
}

Artykuł w archiwum:nth-child(1),
.archive-article:nth-child(4),
.archive-article:nth-child(7) (
margines: 20px 0 30px 40px;
}

Artykuł w archiwum:nth-child(2),
.archive-article:nth-child(5),
.archive-article:nth-child(8) (
margines: 20px 40px 30px;
}

Artykuł w archiwum:nth-child(3),
.archive-article:nth-child(6),
.archive-article:nth-child(9) (
margines: 20px 40px 30px 0;
}

Otrzymamy także układ adaptacyjny. Po zmniejszeniu ekranu blok, który nie pasuje, przejdzie na środek dolnego rogu

Zaletą tego typu centrowania jest to, że można wyraźnie i wyraźnie wykonać wcięcia pomiędzy blokami.

Główną wadą jest to, że wewnątrz bloków nie można niczego umieścić. Dowolny element:

albo div Lub P lub coś innego, będzie uważane za element wewnętrzny n-te dziecko. W rezultacie zostaną na niego nałożone style CSS, a wszelkie wcięcia wykonane przy użyciu marginesu spowodują przesunięcie bloków inaczej niż pierwotnie zamierzono.