- Vimos a ferramenta do desenvolvedor do Google Chrome
- Usamos para investigar erros e experimentar propriedades
- Podemos enxergar o HTML da página como uma "árvore" de elementos
<iframe width="100%" height="300" src="//jsfiddle.net/fegemo/gqgacz36/embedded/result,html,css/" allowfullscreen="allowfullscreen" frameborder="0" class="push-right"></iframe>
- CSS foi criada por Håkon Wium Lie em 1994
- Entendemos o que é a cascata no CSS:
- Algumas propriedades são herdadas dos elementos ancestrais (e.g., cor do texto), outras não (e.g., a borda)
- Além de selecionar por tag, id ou classe, há diversos outros seletores:
descend./filho
~ p strong
: todo <strong>
descendente de <p>
(filho, neto etc.)
~ p > strong
: todo <strong>
filho direto de <p>
atributo
~ img[alt]
: toda <img>
que tem atributo alt="..."
~ a[href$=".html"]
: todo <a>
apontando para um .html
etc.
estado do link
~ a:link
, a:visited
, a:hover
, a:active
negação
~ img:not([alt])
: <img>
sem o atributo alt
- Agrupando para estilizar
- O elemento
<div>...</div>
- O elemento
<span>...</span>
- E se quisermos estilizar de forma que o título e subtítulo ficassem com o mesmo fundo...
- ...a partir do HTML acima?
- Basta colocar o mesmo fundo tanto no
<h1>
quanto no<h2>
!
h1, h2 {
background: url(coelho.png) #ff6d6d;
background-repeat: no-repeat;
background-position: right top;
}
- Acontece que, como são elementos diferentes, cada um tem seu próprio fundo
- Colocamos os títulos dentro de outro elemento e o estilizamos
- Uma
<div>...</div>
pode ser usada para agrupar elementos
<body>
<div id="topo-da-pagina">
<h1>Coelhos Vampiros</h1>
<h2>De onde vêm, onde vivem ...</h2>
</div>
<p>Sexta-feira, no Globo Repórter</p>
</body>
#topo-da-pagina {
background: url(coelho.png) #ff6d6d;
background-repeat: no-repeat;
background-position: right top;
}
Div (na MDN)
<div></div>
serve para agrupar outros elementos- Não representa nada por si só (não tem semântica)
- Um
<p>
é um parágrafo (i.e., conteúdo) - Uma
<img>
é uma imagem (i.e., conteúdo) - Uma
<div>
é um agrupamento de elementos
- Um
- É um elemento
block
É um mecanismo genérico que nos permite criar uma estrutura ou agrupamento de elementos quando não há outro elemento HTML mais apropriado, e ela pode ser estilizada usando CSS ou manipulada com JavaScript Containers genéricos na W3C
html
<div id="topo-da-pagina"> <h1>Título do site</h1> <h2>Subtítulo</h2> </div>
css
#topo-da-pagina { background-color: #4400ac; color: #fffff; }
-
<body> ➡️ <div id="conteudo"> <h1>Tesouros</h1> <table><!-- ... --></table> <p>Ajude Barba-Ruiva ...</p> ➡️ </div> </body>
body { background: url(ilha.png) } #conteudo { background: white; }
Span (na MDN)
<span></span>
tem exatamente a mesma função quediv
, poréminline
::: figure .figure-slides.no-margin.flex-align-center.invert-colors-dark-mode
:::
- Como estilizar o nome e o preço do produto?
- Se usarmos
<div>
, vai quebrar linha (ele éblock
) - Então, usamos o
<span>
, que éinline
!O preço da <span class="produto">camisa adornada</span> é de <span class="preco">R$ 29,90</span>.
- Se usarmos
-
<p> O <span class="artista">Chimbinha</span> é rei, mas <span class="artista">Joelma</span> é diva intergalática. </p>
::: result O Chimbinha é rei, mas Joelma é diva intergalática. :::.artista { background: url(imgs/musica.png) no-repeat left; padding-left: 20px; color: #ff3399; /* rosa choque */ }
- Componentes da caixa
width
eheight
- Alterando o box-model
Box Model (na MDN)
O navegador enxerga todo elemento de conteúdo como uma "caixa"
- A "caixa" é formada por:
- Espaço do conteúdo
- Espaço de preenchimento (
padding
) - Bordas (
border
) - Espaço externo (
margin
)
- Quando definimos a largura (
width
) ou altura (height
) de um elemento, estamos definindo o tamanho do conteúdo da caixa, e não da caixa inteira
::: figure .figure-slides.flex-align-center.clean.invert-colors-dark-mode
:::
::: did-you-know .push-right width: 320px; margin-right: 6px;
Elementos inline
ignoram os valores de:
-
width
,height
-
margin-top
-
margin-bottom
::: -
Se sabemos a dimensão total de um elemento, que também contém
padding
e/ouborder
, como calcular seus (width
,height
)? ::: figure .figure-slides.push-right.invert-colors-dark-mode:::
-
Contudo, fazer essa conta "nós mesmos" pode resultar em erros...
- É possível mudar isso!
- É possível alterar o significado da
width
eheight
de um elemento usando a propriedadebox-sizing
:box-sizing: content-box
(valor padrão)width
= largura do conteúdo
box-sizing: border-box
width
= conteúdo + padding + border- Esta forma é mais intuitiva 👍 👍 👍
::: did-you-know .push-right width: 284px; margin-left: 6px; padding-right: 0.5em As margens do elemento formam um espaçamento externo e não usam espaço dentro da caixa. :::
::: figure .clean.span-columns.figure-slides.max-width.centered.invert-colors-dark-mode margin:0 auto; width: calc(100% - 290px); clear: both;
:::
Para voar, basta errar o chão. Douglas Adams no Guia do Mochileiro das Galáxias
![]()
- Relembrando o fluxo estático
inline
eblock
- Relembrando o float
- Possíveis "problemas":
- Interrompendo o float
- Remoção do fluxo
-
::: figure .figure-slides.push-right
::: Flutuando o parágrafo à direita: ```css p#amazing { width: 200px; float: right; } ``` -
Quem flutua é removido do fluxo
- i.e., não ocupa mais espaço
-
Elementos depois do flutuante:
- Os
block
: passam a ignorar o elemento flutuante - Os
inline
: respeitam o flutuante
- Os
<iframe width="100%" height="460" src="//jsfiddle.net/fegemo/7cofhyLc/embedded/result,html,css/dark/" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
- Repare os parágrafos (
block
) e o texto dentro deles (inline
)...
- É possível que um elemento interrompa uma flutuação
- Para isso, usamos a propriedade
clear
no elemento interruptor
- Para isso, usamos a propriedade
<iframe width="100%" height="460" src="//jsfiddle.net/fegemo/vxb79m2c/embedded/result,html,css/dark/" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
- A propriedade
clear
pode ser:left
ouright
: interrompe apenas as flutuações à esquerda ou à direitaboth
: interrompe ambos ladosnone
: não interrompe (valor padrão)
- Neste exemplo:
#proximo-assunto { clear: right; }
- Queremos colocar os preços à direita
::: figure .figure-slides.no-margin
:::
- 1ª tentativa:
::: figure .figure-slides.no-margin
.preco { float: right; }
:::.preco { float: right; } .item { float: left; }
::: figure .figure-slides.no-margin
:::
- Corrigindo:
.preco { float: right; } .item { float: left; } .comida{ clear: both; }
- Atividade em grupo
- O professor projetará uma pergunta/desafio
- Cada grupo deverá responder no papel a pergunta/desafio
- O professor corrigirá e pontuará os grupos que acertarem
- O grupo que conseguir maior pontuação será o vencedor
- Capítulos 9 (parcial), 10 e 11 (parcial) do livro
- Mozilla Developer Network (MDN)