Powiedz, że mam następujący kod CSS i HTML:
#header {
height: 150px;
}
<div id="header">
<h1>Header title</h1>
Header content (one or multiple lines)
</div>
Sekcja nagłówka ma stałą wysokość, ale treść nagłówka może ulec zmianie.
Chciałbym, aby zawartość nagłówka była wyrównana pionowo do dolnej części sekcji nagłówka, więc ostatni wiersz tekstu „przykleja się” do dolnej części sekcji nagłówka.
Więc jeśli jest tylko jedna linia tekstu, wyglądałoby to tak:
----------------------------- | Tytuł nagłówka | | | | treść nagłówka (wynik w jednym wierszu) -----------------------------
A jeśli byłyby trzy linie:
----------------------------- | Tytuł nagłówka | | treść nagłówka (tak jest | wiele rzeczy, które idealnie | obejmuje trzy linie) -----------------------------
Jak można to zrobić w CSS?
źródło
p
elementem, a przynajmniejspan
display: table-cell
lubtable-row
, lubtable
. Już nigdy więcej nie będziesz musiał używać tabel dla czystego układu.Użyj pozycjonowania CSS:
Jak zauważył Cletus , musisz zidentyfikować zawartość nagłówka, aby to zadziałało.
źródło
width = '100%'
na treści nagłówka<span>
elementy majądisplay: inline;
domyślnie, co nie zajmuje pełnej szerokości kontenera. Najbardziej odpowiednią poprawką byłaby zmiana zakresu na<div>
domyślnie element blokowy.Jeśli nie martwisz się o starsze przeglądarki, użyj Flexboksa.
Element nadrzędny musi ustawić typ wyświetlania ustawiony na wygięcie
Następnie ustaw element wyrównania elementu potomnego na flex-end.
Oto zasób, którego się nauczyłem: http://css-tricks.com/snippets/css/a-guide-to-flexbox/
źródło
Korzystam z tych właściwości i działa!
źródło
table-cell
psuje wiele rzeczy. Podobnie jak system siatki Bootstrap.col-md-12
nie da Ci już dywidendy o szerokości 100%.Po pewnym czasie zmagania się z tym samym problemem, w końcu wymyśliłem rozwiązanie, które spełnia wszystkie moje wymagania:
Rozwiązanie wymaga tylko jednego
<div>
, który nazywam „alignerem”:CSS
HTML
Ta sztuczka polega na utworzeniu wysokiego, chudego diva, który wypycha linię bazową tekstu na spód kontenera.
Oto kompletny przykład, w którym osiągnięto to, o co prosił PO. Zrobiłem „bottom_aligner” grubym i czerwonym tylko dla celów demonstracyjnych.
CSS:
HTML:
źródło
::before
regule, która eliminuje potrzebę dodatkowego elementu. Na końcu zastosowaliśmy flex, ale jest to przydatne, gdy nie możesz.height
pudełko / pojemnik i jego rodzice (na px lub% lub cokolwiek innego).Nowoczesnym sposobem na to byłoby użycie Flexbox . Zobacz przykład poniżej. Nie musisz nawet zawijać
Some text...
w żaden znacznik HTML, ponieważ tekst bezpośrednio zawarty w kontenerze flex jest zawijany w anonimowy element flex.Jeśli jest tylko trochę tekstu i chcesz wyrównać w pionie do dolnej części kontenera.
źródło
position:absolute;
. To rozwiązanie działało idealnie w moim przypadku!Elementy śródliniowe lub śródliniowe można wyrównać do dolnej części elementów poziomu bloków, jeśli wysokość linii elementu macierzystego / blokowego jest większa niż wysokość elementu śródliniowego. *
narzut:
css:
* Upewnij się, że jesteś w trybie standardów
źródło
źródło
<h1>
jest w<p>
lub<div>
chciałbym użyćjustify-content: space-between
.Możesz po prostu osiągnąć flex
źródło
Jeśli masz wiele dynamicznych elementów wysokości, użyj wartości wyświetlanych CSS tabeli i komórki tabeli:
HTML
CSS
Stworzyłem tutaj demo JSBin: http://jsbin.com/INOnAkuF/2/edit
Demo zawiera również przykład wyśrodkowania w pionie przy użyciu tej samej techniki.
źródło
Oto inne rozwiązanie wykorzystujące flexbox, ale bez korzystania z flex-end do wyrównania do dołu. Chodzi o to, aby zestaw
margin-bottom
na h1 do automatycznego przesuwania pozostałą zawartość do dołu:Możemy również zrobić to samo z
margin-top:auto
tekstem, ale w tym przypadku musimy zawinąć go w adiv
lubspan
:źródło
Nie potrzebujesz do tego absolutnego + krewnego. Bardzo możliwe jest użycie względnej pozycji zarówno dla kontenera, jak i danych. Tak to się robi.
Załóż, że wysokość Twoich danych będzie
x
. Twój kontener jest względny, a stopka również względna. Wszystko, co musisz zrobić, to dodać do swoich danychTwoje dane zawsze będą na dole twojego kontenera. Działa, nawet jeśli masz pojemnik z dynamiczną wysokością.
HTML będzie taki
CSS będzie taki
Przykład na żywo tutaj
Mam nadzieję że to pomoże.
źródło
bottom: -webkit-calc(-100% + x);
się dzieje?Oto elastyczny sposób na zrobienie tego. Oczywiście nie jest obsługiwany przez IE8, ponieważ użytkownik potrzebował 7 lat temu. W zależności od tego, co musisz wesprzeć, niektóre z nich można usunąć.
Byłoby jednak miło, gdyby istniał sposób na zrobienie tego bez zewnętrznego pojemnika, wystarczy po prostu wyrównać tekst w sobie.
źródło
bardzo prostym, jednowierszowym rozwiązaniem jest dodanie wysokości wiersza do div, pamiętając, że cały tekst div spadnie na dół.
CSS:
HTML:
pamiętaj, że jest to praktyczne i szybkie rozwiązanie, gdy chcesz, aby tekst w div działał w dół, jeśli potrzebujesz połączyć obrazy i inne rzeczy, musisz napisać nieco bardziej złożony i responsywny CSS
źródło
jeśli możesz ustawić wysokość zawijanego div treści (# nagłówek-treść, jak pokazano w odpowiedzi innych), zamiast całego #header, może możesz również spróbować tego podejścia:
HTML
CSS
pokaż na codepen
źródło
Wydaje się działać:
HTML: Jestem na dole
css:
źródło
Wszystkie te odpowiedzi i żadna nie działała dla mnie ... Nie jestem ekspertem od Flexboksa, ale było to dość łatwe do zrozumienia, jest proste i łatwe do zrozumienia i użycia. Aby oddzielić coś od reszty treści, wstaw pusty div i pozwól mu urosnąć, aby wypełnić przestrzeń.
https://jsfiddle.net/8sfeLmgd/1/
To reaguje zgodnie z oczekiwaniami, gdy dolna zawartość nie ma ustalonego rozmiaru, także gdy pojemnik nie ma ustalonego rozmiaru.
źródło
Opracowałem sposób, który jest o wiele prostszy niż to, o czym wspomniano.
Ustaw wysokość div nagłówka. Następnie w tym stylu, stylizuj swój
H1
tag w następujący sposób:Pracuję na stronie dla klienta, a projekt wymaga, aby tekst był na dole pewnego div. Osiągnąłem wynik przy użyciu tych dwóch linii i działa dobrze. Ponadto, jeśli tekst się rozszerzy, dopełnianie pozostanie takie samo.
źródło
Znalazłem to rozwiązanie w oparciu o domyślny szablon startowy
źródło
źródło
Spróbuj z:
spróbuj zmienić%, aby to naprawić. Przykład: 120% lub 90% ... itd.
źródło
Witryna, którą właśnie utworzyłem dla klienta, zażądała, aby tekst stopki był wysokim polem, z tekstem na dole, który osiągnąłem przez proste wypełnienie, powinien działać dla wszystkich przeglądarek.
źródło
padding: 0 30px
jest nieco zbędna, równie dobrze możesz umieścićpadding: 30px
inne 2 deklaracje.padding: 60px 30px 8px;
,padding: 60px 30px 8px 30px;
cztery wyraźnepadding-
zasady, a nawet sugestia @ TheWaxMann są lepsze - i jestem skłonny i mogę się z tym kłócić ;-)Idealnym przykładem dla różnych przeglądarek jest prawdopodobnie ten tutaj:
http://www.csszengarden.com/?cssfile=/213/213.css&page=0
Chodzi o to, aby wyświetlić div na dole, a także sprawić, aby się tam trzymał. Często proste podejście sprawi, że lepki div przewinie w górę z główną zawartością.
Poniżej znajduje się w pełni działający minimalny przykład. Zauważ, że nie wymaga żadnych sztuczek osadzania div. Wiele BR ma tylko wymusić pojawienie się paska przewijania:
Jeśli zastanawiasz się, czy Twój kod może nie działać w przeglądarce IE, pamiętaj o dodaniu znacznika DOCTYPE u góry. Bardzo ważne jest, aby działało to w IE. Powinien to być także pierwszy tag i nad nim nic nie powinno się pojawiać.
źródło
<br />
tagi ...content-type
nagłówkiem spowodowałoby wyświetlenie przez przeglądarkę błędu analizy XML.Wydaje się działać:
Używanie mniej sprawia, że rozwiązywanie zagadek CSS jest bardziej jak kodowanie niż jak ... Po prostu uwielbiam CSS. To prawdziwa przyjemność, gdy możesz zmienić cały układ (bez jego łamania :) po prostu zmieniając jeden parametr.
źródło
Rozwiązanie z 2015 r
http://codepen.io/anon/pen/qERMdx
proszę bardzo
źródło