Elementy liniowe i blokowe oraz właściwość display

W poprzednich rozdziałach poznaliście dwa generyczne tagi HTML: <div> oraz <span>. Zapewne udało się Wam już użyć ich w swoim kodzie. Skąd wzięła się potrzeba wprowadzania aż dwóch rodzajów domyślnych znaczników? Zostało to już krótko wspomniane: <div> odnosi się do elementów, które mają być wyświetlane jako blokowe, natomiast <span> zwykle jest używany dla elementów liniowych.

Elementy blokowe

Elementy blokowe to elementy, które mają być wyświetlane jako bloki.

  • Jeśli nie określimy jego szerokości wprost, każdy blok domyślnie będzie zajmował 100% szerokości swojego rodzica.

  • Możemy określić jego marginesy oraz wypełnienie (padding).

  • Każdy element blokowy umieszczany jest pod poprzedzającym elementem, a element następny w kolejności również umieszczany jest pod spodem. Przypomina to złamanie linii w tekście.

<div class="container">
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
</div>
.block {
  width: 200px;
  height: 100px;
  margin: 10px;
  padding: 5px;
  background: salmon;
}

Edytuj na CodePenarrow-up-right

Przykładami elementów HTML, które przez przeglądarkę są domyślnie wyświetlane jako blokowe, to wspomniany już <div>, ale też <p>, <header>, <section>, <nav>, <footer>, <article>, <form>, <ul>, <ol> oraz nagłówki, np. <h1>.

Elementy liniowe

Elementy liniowe to takie, które zachowują się jak linie tekstu, czyli innymi słowy "płyną" razem z tekstem.

  • Nie można określić im wymiarów za pomocą właściwości width i height.

  • Nie można nadwać im górnych (margin-top), ani dolnych (margin-bottom) marginesów. Nadanie margin-left lub margin-right oraz wypełnień jednak w ich przypadku zadziała.

  • Biorąc pod uwagę, że elementy liniowe zachowują się podobnie, jak linie tekstu, można określać ich wyrównanie w pionie za pomocą właściwości vertical-align. Zachowanie vertical-alignarrow-up-right zostało bardzo przejrzyście wytłumaczone w artykule na BitsOfCo.dearrow-up-right.

Hipster cornhole celiac kickstarter asymmetrical cred meggings. Retro pitchfork semiotics you probably haven't heard of them, thundercats occupy raw denim DIY.

Edytuj na CodePenarrow-up-right

Przykładowe elementy liniowe, które już udało nam się poznać to <span> oraz <a>.

Warto w tym momencie wspomnieć, że istnieją elementy, których domyślne zachowanie nieco różni się od blokowych i liniowych. Można powiedzieć, że łączą w sobie ich wybrane cechy. Są to tzw. replaced elementsarrow-up-right. Należą do nich m.in. <img>, <input> oraz <select>. Można określać ich wymiary za pomocą właściwości CSS, jednak w przeciwieństwie do elementów blokowych za żadnym z nich nie następuje złamanie linii. Zauważyliście to z pewnością podczas tworzenia formularzy w czystym HTML.

Określamy zachowanie elementów za pomocą właściwości display

Każdy z elementów HTML posiada swój domyślny rodzaj zachowania, jednak można w bardzo łatwy sposób go zmienić i sprawić, żeby np. <div> zaczął zachowywać się jak element liniowy.

Jak to zrobić? Poznajmy właściwość display, która odpowiada za określanie rodzaju sposobu wyświetlania elementu na stronie. Wartości właściwości display jest bardzo dużoarrow-up-right i sporo z nich brzmi tajemniczo nawet dla całkiem zaawansowanych deweloperów CSS.

Poznajmy cztery używane zdecydowanie najczęściej:

  • display: none – za pomocą którego możemy ukryć nasz element.

  • display: inline – sprawia, że element będzie wyświetlany jako element liniowy.

  • display: block – element zostanie wyświetlony jako element blokowy.

  • display: inline-block – łączy cechy elementów liniowych i blokowych. Za jego pomocą możemy sprawić, że będzie możliwe nadanie naszemu elementowi wymiarów i wszystkich marginesów, a także nie nastąpi po nim przejście do kolejnej linii.

Edytuj na CodePenarrow-up-right

Poniżej podsumowujemy w tabeli cechy elementów liniowych, blokowych oraz liniowo-blokowych:

Prawe i lewe marginesy

Górne i dolne marginesy

Możliwość ustawienia width i height

Wymuszenie złamania linii za elementem

vertical-align

inline

block

inline-block

Last updated

Was this helpful?