Propriedades de CSS relacionadas ao layout
Este artigo explica as propriedades de CSS relacionadas ao layout.
Você pode aprender sobre o uso e como escrever as propriedades display e position.
YouTube Video
HTML para Visualização
css-layout.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>CSS Properties Example</title>
7 <link rel="stylesheet" href="css-base.css">
8 <link rel="stylesheet" href="css-layout.css">
9</head>
10<body>
11 <!-- Header -->
12 <header>
13 <h1>CSS Properties For Layout</h1>
14 </header>
15
16 <!-- Main content -->
17 <main>
18 <header>
19 <h2>Layout Related Properties</h2>
20 </header>
21 <article>
22 <h3>display: block</h3>
23 <section>
24 <header><h4>CSS</h4></header>
25<pre class="sample">
26.block-element {
27 display: block;
28 width: 400px;
29 background-color: lightblue;
30 padding: 10px;
31 margin-bottom: 10px;
32}
33</pre>
34 <header><h4>HTML</h4></header>
35 <pre><div class="block-element">This is a block element.</div></pre>
36 <header><h4>HTML+CSS</h4></header>
37 <section class="sample-view">
38 <div class="block-element">This is a block element.</div>
39 </section>
40 </section>
41 </article>
42 <article>
43 <h3>display: inline</h3>
44 <section>
45 <header><h4>CSS</h4></header>
46<pre class="sample">
47span.inline-element {
48 background-color: lightgray;
49 padding: 10px;
50}
51
52div.inline-element {
53 display: inline;
54 background-color: lightblue;
55 padding: 10px;
56}
57</pre>
58 <header><h4>HTML</h4></header>
59<pre>
60<span class="inline-element">This is an inline element.</span>
61<div class="inline-element">div tag with "display: inline"</div>
62</pre>
63 <header><h4>HTML+CSS</h4></header>
64 <section class="sample-view">
65 <span class="inline-element">This is an inline element.</span>
66 <div class="inline-element">div tag with "display: inline"</div>
67 </section>
68 </section>
69 </article>
70 <article>
71 <h3>display: inline-block</h3>
72 <section>
73 <header><h4>CSS</h4></header>
74<pre class="sample">
75.inline-block-element {
76 display: inline-block;
77 width: 200px;
78 background-color: lightblue;
79 padding: 10px;
80}
81</pre>
82 <header><h4>HTML</h4></header>
83<pre>
84<span class="inline-element">This is an inline element.</span>
85<div class="inline-block-element">This is an inline-block element.</div>
86<span class="inline-element">Another inline element.</span>
87</pre>
88 <header><h4>HTML+CSS</h4></header>
89 <section class="sample-view">
90 <span class="inline-element">This is an inline element.</span>
91 <div class="inline-block-element">This is an inline-block element.</div>
92 <span class="inline-element">Another inline element.</span>
93 </section>
94 </section>
95 </article>
96 <article>
97 <h3>display: none</h3>
98 <section>
99 <header><h4>CSS</h4></header>
100<pre class="sample">
101div.none-element {
102 display: none;
103 background-color: lightblue;
104 padding: 10px;
105}
106</pre>
107 <header><h4>HTML</h4></header>
108 <pre><div class="none-element">This is a none element.</div></pre>
109 <header><h4>HTML+CSS</h4></header>
110 <section class="sample-view">
111 <div class="none-element">This is a none element.</div>
112 </section>
113 </section>
114 </article>
115 <article>
116 <h3>display: flex</h3>
117 <section>
118 <header><h4>CSS</h4></header>
119<pre class="sample">
120.flex-container {
121 display: flex;
122 justify-content: space-between;
123 background-color: lightgray;
124 padding: 10px;
125}
126
127.flex-container div {
128 width: 120px;
129 background-color: lightblue;
130}
131</pre>
132 <header><h4>HTML</h4></header>
133<pre>
134<div class="flex-container">
135 <div>Item 1</div>
136 <div>Item 2</div>
137</div>
138</pre>
139 <header><h4>HTML+CSS</h4></header>
140 <section class="sample-view">
141 <div class="flex-container">
142 <div>Flex item 1</div>
143 <div>Flex item 2</div>
144 </div>
145 </section>
146 </section>
147 </article>
148 <article>
149 <h3>display: inline-flex</h3>
150 <section>
151 <header><h4>CSS</h4></header>
152<pre class="sample">
153.inline-flex-container {
154 display: inline-flex;
155 width: 250px;
156 justify-content: space-between;
157 background-color: lightgray;
158 padding: 10px;
159}
160
161.inline-flex-container div {
162 width: 100px;
163 background-color: lightblue;
164}
165</pre>
166 <header><h4>HTML</h4></header>
167<pre>
168<span class="inline-element">Inline element</span>
169<div class="inline-flex-container">
170 <div>Inline Flex item 1</div>
171 <div>Inline Flex item 2</div>
172</div>
173</pre>
174 <header><h4>HTML+CSS</h4></header>
175 <section class="sample-view">
176 <span class="inline-element">Inline element</span>
177 <div class="inline-flex-container">
178 <div>Inline Flex item 1</div>
179 <div>Inline Flex item 2</div>
180 </div>
181 </section>
182 </section>
183 </article>
184 <article>
185 <h3>display: grid</h3>
186 <section>
187 <header><h4>CSS</h4></header>
188<pre class="sample">
189.grid-container {
190 display: grid;
191 grid-template-columns: repeat(2, 1fr);
192 gap: 10px;
193 background-color: #f3f3f3;
194 padding: 10px;
195 height: 200px;
196}
197.grid-container div {
198 background-color: lightblue;
199 border: 1px solid #aaa;
200 padding: 5px;
201 text-align: center;
202 width: 100px;
203}
204</pre>
205 <header><h4>HTML</h4></header>
206<pre>
207<div class="grid-container">
208 <div>Item 1</div>
209 <div>Item 2</div>
210 <div>Item 3</div>
211 <div>Item 4</div>
212</div>
213</pre>
214 <header><h4>HTML+CSS</h4></header>
215 <section class="sample-view">
216 <div class="grid-container">
217 <div>Item 1</div>
218 <div>Item 2</div>
219 <div>Item 3</div>
220 <div>Item 4</div>
221 </div>
222 </section>
223 </section>
224 </article>
225 <article>
226 <h3>display: inline-grid</h3>
227 <section>
228 <header><h4>CSS</h4></header>
229<pre class="sample">
230.inline-grid-element {
231 display: inline-grid;
232 grid-template-columns: 1fr 1fr;
233 gap: 5px;
234 background-color: lightblue;
235 padding: 5px;
236 width: 200px;
237 height: 150px;
238}
239.inline-grid-element div {
240 background-color: lightskyblue;
241 padding: 5px;
242 text-align: center;
243 border: 1px solid #ccc;
244 width: 80px;
245 height: 25px;
246}
247</pre>
248 <header><h4>HTML</h4></header>
249<pre>
250<span class="inline-element">This is an inline element.</span>
251<div class="inline-grid-element">
252 <div>Item 1</div>
253 <div>Item 2</div>
254 <div>Item 3</div>
255 <div>Item 4</div>
256</div>
257<span class="inline-element">Another inline element.</span>
258</pre>
259 <header><h4>HTML+CSS</h4></header>
260 <section class="sample-view">
261 <span class="inline-element">This is an inline element.</span>
262 <div class="inline-grid-element">
263 <div>Item 1</div>
264 <div>Item 2</div>
265 <div>Item 3</div>
266 <div>Item 4</div>
267 </div>
268 <span class="inline-element">Another inline element.</span>
269 </section>
270 </section>
271 </article>
272 <article>
273 <h3>display: table</h3>
274 <section>
275 <header><h4>CSS</h4></header>
276<pre class="sample">
277.table-container {
278 display: table;
279 border-collapse: collapse;
280 width: 100%;
281 height: 100%;
282}
283
284.table-row {
285 display: table-row;
286}
287
288.table-cell {
289 display: table-cell;
290 border: 1px solid #999;
291 padding: 8px;
292 text-align: center;
293 vertical-align: middle;
294 background-color: lightblue;
295}
296
297.header-row .table-cell {
298 font-weight: bold;
299 background-color: lightskyblue;
300}
301</pre>
302 <header><h4>HTML</h4></header>
303<pre>
304<section>
305 <div class="table-container">
306 <div class="table-row header-row">
307 <div class="table-cell">Header 1</div>
308 <div class="table-cell">Header 2</div>
309 </div>
310 <div class="table-row">
311 <div class="table-cell">Row 1, Cell 1</div>
312 <div class="table-cell">Row 1, Cell 2</div>
313 </div>
314 <div class="table-row">
315 <div class="table-cell">Row 2, Cell 1</div>
316 <div class="table-cell">Row 2, Cell 2</div>
317 </div>
318 </div>
319</section>
320</pre>
321 <header><h4>HTML+CSS</h4></header>
322 <section class="sample-view">
323 <div class="table-container">
324 <div class="table-row header-row">
325 <div class="table-cell">Header 1</div>
326 <div class="table-cell">Header 2</div>
327 </div>
328 <div class="table-row">
329 <div class="table-cell">Row 1, Cell 1</div>
330 <div class="table-cell">Row 1, Cell 2</div>
331 </div>
332 <div class="table-row">
333 <div class="table-cell">Row 2, Cell 1</div>
334 <div class="table-cell">Row 2, Cell 2</div>
335 </div>
336 </div>
337 </section>
338 </section>
339 </article>
340 <article>
341 <h3>display: list-item</h3>
342 <section>
343 <header><h4>CSS</h4></header>
344<pre class="sample">
345.list-item-element {
346 display: list-item;
347 list-style-position: inside;
348 list-style-type: disc;
349 margin-left: 20px;
350 background-color: lightblue;
351 padding: 10px;
352 height: min-content;
353}
354</pre>
355 <header><h4>HTML</h4></header>
356<pre>
357<div class="list-item-element">This is a list item element.</div>
358<div class="list-item-element">Another list item element.</div>
359<div class="list-item-element">Yet another list item element.</div>
360</pre>
361 <header><h4>HTML+CSS</h4></header>
362 <section class="sample-view">
363 <div class="list-item-element">This is a list item element.</div>
364 <div class="list-item-element">Another list item element.</div>
365 <div class="list-item-element">Yet another list item element.</div>
366 </section>
367 </section>
368 </article>
369 <article>
370 <h3>position</h3>
371 <section style="height: auto;">
372 <header><h4>position: static</h4></header>
373 <section class="sample-view">
374 <div class="static-element">This is a static element.</div>
375 </section>
376 <header><h4>position: relative; top: 10px; left: 20px;</h4></header>
377 <section class="sample-view">
378 <div class="relative-element">This is a relative element.</div>
379 </section>
380 <header><h4>position: absolute; top: 10px; left: 20px;</h4></header>
381 <section class="sample-view">
382 <div class="absolute-container">
383 <div class="absolute-element">This is an absolute element.</div>
384 </div>
385 </section>
386 <header><h4>position: fixed; bottom: 10px; right: 10px;</h4></header>
387 <section class="sample-view">
388 <div class="fixed-element">This is a fixed element.</div>
389 </section>
390 <header><h4>position: sticky; top: 0;</h4></header>
391 <section class="sample-view">
392 <div class="sticky-container">
393 <div style="width: 20px; height: 400px; background: linear-gradient(to top, red, blue);"></div>
394 <div class="sticky-element">This is a sticky element. Scroll down!</div>
395 </div>
396 </section>
397 </section>
398 </article>
399 </main>
400</body>
401</html>{^ i18n 配置・レイアウト ^}
Propriedade display
A propriedade display é uma propriedade CSS que define como o elemento é exibido. Ela determina em que formato o elemento é renderizado, como block, inline, flex, grid ou hidden.
Valores da propriedade display
block
1.block-element {
2 display: block;
3 width: 400px;
4 background-color: lightblue;
5 padding: 10px;
6 margin-bottom: 10px;
7}- Ao especificar
block, o elemento é exibido como um elemento de nível de bloco. - Elementos de bloco são exibidos em uma nova linha na página, movendo outros elementos para a próxima linha.
- Elementos de bloco típicos incluem
<div>,<p>,<h1>,<section>,<article>, etc.
inline
1span.inline-element {
2 background-color: lightgray;
3 padding: 10px;
4}
5
6div.inline-element {
7 display: inline;
8 background-color: lightblue;
9 padding: 10px;
10}- Ao especificar
inline, o elemento é exibido como um elemento inline. - Elementos inline são exibidos na mesma linha que os elementos vizinhos e são alinhados horizontalmente.
- Elementos inline típicos incluem
<span>,<a>,<strong>, etc. - Elementos inline são colocados na mesma linha que outros elementos inline e são exibidos continuamente na horizontal, diferente de elementos de bloco.
inline-block
1.inline-block-element {
2 display: inline-block;
3 width: 200px;
4 background-color: lightblue;
5 padding: 10px;
6}- Especificar
inline-blockexibe o elemento como um elemento inline, mas ele também possui características de elementos de bloco. - Elementos inline-block são exibidos na mesma linha que outros elementos inline, mas você pode definir altura e largura como elementos de bloco.
- Os elementos
<img>,<button>e<canvas>comportam-se comoinline-blockpor padrão.
none
1div.none-element {
2 display: none;
3 background-color: lightblue;
4 padding: 10px;
5}- Ao especificar
none, o elemento não é exibido. - O elemento se torna completamente invisível e é excluído tanto da tela quanto do layout.
flex
1.flex-container {
2 display: flex;
3 justify-content: space-between;
4 background-color: lightgray;
5 padding: 10px;
6}
7
8.flex-container div {
9 width: 120px;
10 background-color: lightblue;
11}- Especificar
flexexibe o elemento como um contêiner flexbox. - Ele é usado para organizar e alinhar elementos filhos (itens flex) de forma flexível.
- Usar flexbox permite que elementos filhos sejam exibidos inline, com margens e alinhamento ajustados automaticamente.
inline-flex
1.inline-flex-container {
2 display: inline-flex;
3 width: 250px;
4 justify-content: space-between;
5 background-color: lightgray;
6 padding: 10px;
7}
8
9.inline-flex-container div {
10 width: 100px;
11 background-color: lightblue;
12}- Especificar
inline-flexexibe o elemento como um contêiner flexbox em linha. - Embora possua características de flexbox, é tratado como um elemento em linha e exibido na mesma linha que outros elementos.
grid
1.grid-container {
2 display: grid;
3 grid-template-columns: repeat(2, 1fr);
4 gap: 10px;
5 background-color: #f3f3f3;
6 padding: 10px;
7 height: 200px;
8}
9
10.grid-container div {
11 background-color: lightblue;
12 border: 1px solid #aaa;
13 padding: 5px;
14 text-align: center;
15 width: 100px;
16}- Especificar
gridexibe o elemento como um contêiner de grade. - Um layout de grade pode ser aplicado para alinhar elementos filhos em linhas e colunas.
- Os elementos filhos dentro do contêiner de grade são organizados de forma ordenada em colunas e linhas.
inline-grid
1.inline-grid-element {
2 display: inline-grid;
3 grid-template-columns: 1fr 1fr;
4 gap: 5px;
5 background-color: lightblue;
6 padding: 5px;
7 width: 200px;
8 height: 150px;
9}
10.inline-grid-element div {
11 background-color: lightskyblue;
12 padding: 5px;
13 text-align: center;
14 border: 1px solid #ccc;
15 width: 80px;
16 height: 25px;
17}- Especificar
inline-gridexibe o elemento como um contêiner de grade em linha. - Ele utiliza o sistema de layout de grade e é tratado como um elemento em linha.
table
1.table-container {
2 display: table;
3 border-collapse: collapse;
4 width: 100%;
5 height: 100%;
6}
7
8.table-row {
9 display: table-row;
10}
11
12.table-cell {
13 display: table-cell;
14 border: 1px solid #999;
15 padding: 8px;
16 text-align: center;
17 vertical-align: middle;
18 background-color: lightblue;
19}
20
21.header-row .table-cell {
22 font-weight: bold;
23 background-color: lightskyblue;
24}- Especificar
tableexibe o elemento como uma tabela. Ele possui um layout semelhante ao<table>do HTML, e seus elementos filhos são tratados como células de tabela. - Como neste exemplo, defina a propriedade
displaydos elementos filhos comotable-rowoutable-cell.- Quando
table-rowé especificado, o elemento se comporta como uma linha de tabela (<tr>). - Quando
table-cellé especificado, o elemento se comporta como uma célula de tabela (<td>).
- Quando
list-item
1.list-item-element {
2 display: list-item;
3 list-style-position: inside;
4 list-style-type: disc;
5 margin-left: 20px;
6 background-color: lightblue;
7 padding: 10px;
8 height: min-content;
9}- Especificar
list-itemexibe o elemento como um item de lista. É aplicado a elementos<li>tipicamente usados dentro de<ul>ou<ol>.
Propriedade position
1.static-element {
2 position: static;
3 background-color: lightblue;
4 padding: 10px;
5 margin-bottom: 20px;
6}
7
8.relative-element {
9 position: relative;
10 background-color: lightblue;
11 top: 10px;
12 left: 20px;
13 padding: 10px;
14 margin-bottom: 20px;
15}
16
17.absolute-container {
18 position: relative;
19 width: 500px;
20 height: 150px;
21 background-color: lightgray;
22 margin-bottom: 20px;
23}
24
25.absolute-element {
26 position: absolute;
27 top: 10px;
28 left: 20px;
29 background-color: lightblue;
30 padding: 10px;
31}
32
33.fixed-element {
34 position: fixed;
35 bottom: 10px;
36 right: 10px;
37 background-color: lightblue;
38 padding: 10px;
39}
40
41.sticky-container {
42 overflow: scroll;
43 height: 150px;
44 width: 500px;
45}
46
47.sticky-element {
48 position: sticky;
49 top: 0;
50 background-color: lightblue;
51 padding: 10px;
52}position é uma propriedade que controla como os elementos são posicionados no CSS. Essa propriedade pode ser usada para posicionar elementos de forma relativa ou absoluta em relação ao elemento pai ou a outros elementos, ou para fixá-los em uma posição.
Valores da propriedade position
static
1.static-element {
2 position: static;
3}- Na classe
static-element,positioné especificado comostatic. O elemento é posicionado no fluxo normal. staticé o valor padrão. Sepositionnão for especificado,staticserá aplicado.- O elemento é posicionado de acordo com o fluxo normal do documento. As propriedades
top,right,bottom,leftnão podem ser usadas.
relative
1.relative-element {
2 position: relative;
3 top: 10px;
4 left: 20px;
5}- Na classe
relative-element,positioné configurado comorelative. O elemento se move em relação à sua posição normal. Neste exemplo, ele está posicionado 10px abaixo e 20px à direita. - Especificar
relativeposiciona o elemento de forma relativa. O elemento se move de sua posição original para a posição especificada pelas propriedadestop,right,bottom,left, seguindo o fluxo normal do documento. - Um elemento configurado com posicionamento relativo deixa espaço em sua posição original mesmo após se mover.
- Neste exemplo, o elemento se move 10 pixels para baixo e 20 pixels para a direita de sua posição original, mas o fluxo do documento é processado com base na posição original.
absolute
1.absolute-element {
2 position: absolute;
3 top: 10px;
4 left: 20px;
5}- Na classe
absolute-element,positioné configurado comoabsolute. Neste exemplo, o elemento está posicionado 10 pixels abaixo e 20 pixels à direita do canto superior esquerdo de seu elemento pai (ou da janela de visualização). - Quando
absoluteé especificado, o elemento é posicionado de forma absoluta em relação ao seu elemento pai. Se apositiondo elemento pai estiver configurada comorelative,absoluteoufixed, o elemento se move com base nesse pai usando as propriedadestop,right,bottom,left. Se nenhum elemento pai for encontrado, ele será posicionado em relação à página inteira (viewport). - Um elemento configurado com posicionamento absoluto é removido do fluxo normal do documento e não afeta outros elementos.
fixed
1.fixed-element {
2 position: fixed;
3 top: 0;
4 right: 0;
5}- Na classe
fixed-element,positioné configurado comofixed. Especificarfixedposiciona o elemento em um local fixo. O elemento está fixo no viewport e não se move com a rolagem. - Por exemplo, é usado para manter um cabeçalho de página ou barra de navegação sempre visível.
- Neste exemplo, o elemento está fixado no canto inferior direito da tela e permanece lá, mesmo quando a página é rolada.
sticky
1.sticky-element {
2 position: sticky;
3 top: 0;
4}- Na classe
sticky-element,positioné configurado comosticky. - Quando
stickyé especificado, o elemento é posicionado dinamicamente de acordo com a rolagem. Ele segue o fluxo normal do documento, mas, quando a página é rolada, o elemento fica "preso" em uma posição específica com base nos valores especificados detop,right,bottomeleft. stickyse comporta como um elemento fixo dentro de um determinado alcance.- Neste exemplo, o elemento é exibido em sua posição normal, mas, quando a página é rolada até a posição
topespecificada, ele fica preso nessa posição e segue a rolagem.
Propriedades top, left, bottom, right
top, left, bottom e right são propriedades para controlar as posições dos elementos no CSS. Essas propriedades são usadas junto com a propriedade position para especificar quanto mover um elemento em uma determinada direção em relação à sua posição.
No entanto, essas propriedades só se aplicam quando position está configurada como relative, absolute, fixed ou sticky. No valor padrão static, essas propriedades não têm efeito.
Como usar top, left, bottom, right
top
1.relative-element {
2 position: relative;
3 top: 20px; /* Positioned 20px from the top */
4}- A propriedade
topespecifica a distância que um elemento deve ficar deslocado do topo.- Neste exemplo, o elemento se desloca 20px para baixo de sua posição normal.
left
1.absolute-element {
2 position: absolute;
3 left: 50px; /* Positioned 50px from the left */
4}- A propriedade
leftespecifica a distância que um elemento deve ficar deslocado da esquerda.- Neste exemplo, o elemento se desloca 50px para a direita a partir da esquerda.
bottom
1.fixed-element {
2 position: fixed;
3 bottom: 10px; /* Positioned 10px from the bottom */
4}- A propriedade
bottomespecifica a distância que um elemento deve ficar deslocado da parte inferior.- Neste exemplo, o elemento fica fixo 10px acima da parte inferior da tela. Ele permanece nessa posição mesmo ao rolar a página.
right
1.sticky-element {
2 position: sticky;
3 right: 20px; /* Positioned 20px from the right */
4}- A propriedade
rightespecifica a distância que um elemento deve ficar deslocado da direita.- Neste exemplo, ao rolar a página, o elemento se desloca 20px para a esquerda a partir da direita e fica fixo nessa posição.
Relação com a propriedade position
relative: Move o elemento pelos valores especificados detop,left,bottom,rightem relação à sua posição normal.absolute: Move o elemento para a localização especificada portop,left,bottom,rightem relação ao ancestral mais próximo compositionconfigurado comorelative,absoluteoufixed.fixed: Fixa o elemento na posição especificada em relação à janela de visualização (toda a tela). Ele permanece nessa posição mesmo ao rolar a página.sticky: O elemento permanece em sua posição normal até alcançar uma posição especificada durante o deslocamento, momento em que ele "gruda" nessa posição.
Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.