CSS

Sobre o CSS

CSS, em inglês Cascading Style Sheets, é uma linguagem de estilização usada para ajustar o HTML. Ela é composta de seletores e propriedades(regras) e a sintaxe geral é:

seletor {
    propriedade: valor;
}
/*
Comentário
*/

Como integrar o CSS e o HTML

Existem 3 formas de colocar o CSS para estilizar o HTML:

  • Como atributo no elemento

Exemplo

<body>
    <p style="font-size: 12px; color: red;">Um parágrafo de exemplo</p>
</body>
  • Dentro do elemento Style

Exemplo

  • Em outro arquivo

No arquivo HTML:

Em um arquivo .css:

circle-info
circle-info

Seletores

Existem alguns tipos de seletores: por tag HTML, por classe e por id.

Tag Selector

As regras dentro desse seletor se aplicam a todas as tags HTML desse tipo. Exemplos:

Class Selector

As regras dentro desse seletor se aplicam a todas as tags HTML que tenham a classe seletora. Se coloca um "." antes da palavra, para indicar que é uma classe.

Id Selector

As regras dentro desse seletor somente se aplicarão à tag que tem o id igual ao id seletor. Se coloca um "#" antes da palavram, para indicar que é um id.

Combinando Seletores

É possível combinar mais de um seletor ou especificar seletores para alcançar mais elementos ou elementos mais específicos.

Multiplos Seletores

Pode-se colocar múltiplos seletores para as mesmas regras. As regras serão aplicadas para todos as tags selecionadas.

Seletores Específicos

Para a tag ser estilizada, ela precisa participar dos dois ou mais grupos de seletores. Pode ser uma tag e uma classe, ou duas classes ou mais.

Seletores Descedentes

Uma relação de descendência entre os seletores. A sintaxe é

Onde o seletor1 representa o "elemento pai" do seletor2.

Exemplo: arquivo HTML

Exemplo: arquivo CSS

Caso especial: Descendente direto

Coloca-se ">" para que só se peguem os descendentes diretos do "elemento pai".

Exemplo usando o exemplo HTML acima:

Seletor de tudo(*)

Para selecionar todas as tags HTML é possível usar o "*". A aplicação seria para pegar todas as "crianças" diretas de um elemento pai:

Precedência

Quando existem regras conflitantes entre si, por exemplo 2 regras mudando a cor de um texto, existe uma ordem de precedência que o CSS obedece ao estilizar o HTML:

  1. A regra mais específica

  2. Seletor de Id

  3. Seletor de Classe

  4. Regras que vierem depois de outras que estão antes no arquivo

circle-info

Propriedades

São as regras que serão passadas aos elementos selecionados pelos seletores. Antes de falarmos das propriedades, falaremos de algumas unidades utilizadas nessas regras.

Unidades

No HTML e CSS existem várias unidades que serão utilizadas para definir o espaço no site. Entre elas, temos:

  • Pixel(px)

  • rem

  • vw e vh

  • %

Pixel

É a unidade mais comum de medição. Representa um pixel na tela(depende da tela utilizada).

Exemplo

Relação pixels

Rem

É uma unidade relativa ao tamanho da fonte do elemento raiz(html, body), ou seja, é bem útil para padronizar o site. Na maioria dos browsers dos computadores, 1rem equivale a 16px.

Vw e Vh

São unidades relativas à proporção da tela que o usuário está usando. Vw significa viewport width, ou seja, está relacionada a uma porcentagem da largura da tela. Já Vh é a viewport height, está relacionada a uma porcentagem da altura da tela.

%

Como o símbolo já sugere, ele representa uma porcentagem do "elemento pai".

Propriedades relativas a texto

Font-size

É o tamanho da fonte do texto. Para o exemplo utilizado na explicação sobre o pixel, foi utilizada essa propriedade para definir o tamanho do texto. Os valores possíveis são as unidades previamente explicadas ou valores padrão: small, medium, large, ...etc.

Line-height

É o espaço entre as linhas do texto. Ela será multiplicada pelo tamanho da fonte(font-size). São utilizadas as unidades de medida.

Text-align

Alinhamento do texto. Pode ter os valores de: left, right, center, justify e justify-all.

Text-decoration

Decoração do texto, pode ser underline, overline, line-through ou none.

Font-weight

É quão negrito o texto deve ficar. São utilizadas medidas de 100 a 900, valores padrão: normal(400), bold(700) ou ainda valores relativos como bolder(mais negrito) e lighter(menos negrito).

Font-family

É o fonte do texto. Podem ser colocados vários valores em sequência(font-family: "value1", "value2", ..., value;) para caso alguma das fontes não seja encontrada a seguinte ser implementada no texto. Tem alguns valores padrão como serif, sans-serif, monospace, cursive e fantasy; porém é possivel adicionar uma fonte externa utilizando o seguinte código no css:

Para isso, é preciso ter a fonte em um arquivo do tipo fonte(.tff) e que ele esteja adicionado no projeto. Assim, o "name" seria o nome dado à fonte(que será utilizado para definir essa fonte nos outros textos) e o 'url' seria o caminho relativo do arquivo do tipo fonte no projeto.

Outra forma é utilizando fontes externas, é só importá-las utilizando a tag <link/> do html. Um exemplo de fácil uso é o google fonts:

Para esse exemplo em específico, podemos usar a fonte importada normalmente no css:

circle-info

Color

É a cor do texto. Pode ser:

  • Um dos valores padrão como "blue" e "transparent";

  • rgb(significa red green blue, uso: rgb(valor1, valor2, valor3), onde o valor varia de 0 a 255);

  • rgba(o mesmo que rgb só que o "a" significa a transparência, uso: rgba(valor1, valor2, valor3, valor4), onde o valor varia de 0 a 255)

  • hexadecimal(uso: #valor, onde o valor é em hexadecimal)

Propriedades de containers

Background-color

Cor do fundo do container. Os valores são os mesmo aplicados a propriedade "color".

Background-image

Propriedade utilizada para colocar uma imagem no fundo no container. Propriedades relacionadas:

  • Background-repeat: repeat/repeat-x/repeat-y/no-repeat; É usado para definir o que fazer caso a imagem não seja do tamanho do container.

  • Background-size: contain/cover/width/height; É usado para definir como a imagem vai cobrir o container

  • Background-position: center/x/y; É usado para definir a posição da imagem no fundo

Border

É um conjunto de 3 outras propriedades relacionadas à borda do elemento:

  • border-width: usa as unidades de medida para definir qual é o tamanho da borda

  • border-style: tem alguns valores padrão: none, hidden, solid, dotted, dashed, groove, ridge, inset e outset

  • border-color: tem os mesmos valores que "color".

circle-info
circle-info

Margin

É uma propriedade que define quanto de espaço o elemento irá "empurrar" os elementos adjacentes. Usam-se as unidades de medida. Podem ser aplicadas as regras da OBS2 da Border para definir para um dos 4 cantos.

Padding

É a propriedade que define quanto de espaço entre o elemento e a borda tem que existir. Usam-se as unidades de medida. Podem ser aplicadas as regras da OBS2 da Border para definir para um dos 4 cantos.

Width e Height

São duas propriedades que definem qual será o tamanho do elemento. Quando se coloca apenas uma delas, a outra é calculada automaticamente. Os valores podem ser:

  • Valores de unidade de medida

  • Valores padrão como max-content, min-content e fit-content

circle-info

The Box Model

As 4 últimas propriedades fazem parte do Box Model: Box Model

Propriedade Box-sizing

Define se as propriedades de height e width vão considerar apenas o conteúdo da caixa e padding e border são "adicionais"(content-box) ou vão considerar a padding e a border também, sendo o tamanho total considerado para o cálculo dessas propriedades(border-box).

Propriedades de Overflow

Às vezes os elementos são grandes demais para a tela, e para essa e outras razões existe a propriedade de overflow, que pode deixar que os elementos passem do container que estão de alguma forma, que depende do valor passado. Valores possíveis:

  • auto: se necessário, será adicionado um scroll

  • hidden: a parte que está além dos limites do elemento será escondida

  • visible: o overflow fica visível

  • scroll: adiciona um scroll, mesmo que não seja necessário

circle-info

Propriedade Display

Essa propriedade define como o elemento será disposto na tela. Existem 2 tipos principais de elemento no HTML:

  • Elementos de bloco(block): esses por padrão ocupam o espaço de tal forma que não é possível nenhum elemento ficar à sua esquerda ou direita sem o uso de outras propriedades. Eles respeitam as propriedades de width e height.

  • Elemento do tipo linha(inline): esses se ajustam de forma que eles podem ficar na mesma linha que outros elementos inline ou inline-block, como veremos depois. Eles não respeitam as propriedades de width e height.

Dessa forma, motivado a colocar um width ou height em um elemento inline, foi-se criado o tipo "inline-block", que tem as mesmas características do tipo block, porém pode ficar ao lado de outros elementos.

Outra valor possível para a propriedade Display é o "none", que basicamente retira o elemento da página. Ele pode ser útil para fazer um site responsivo, pois quando a tela é muito pequena é possível retirar alguns elementos e adicionar outros mais adequados.

Display flex

Por último, um valor para o display pode ser "flex", que define o elemento como um container(a flexbox) e os seus "elementos filhos"(flex-itens) serão organizados de alguma forma inteligente, dependendo do valor de algumas propriedades relacionadas.

Entre essas propriedades temos:

  • flex-flow: é uma propriedade da flexbox que engloba outras 2(flex-flow: flex-direction flex-wrap):

    • flex-direction: define a direção em que os itens dentro da flexbox vão ser colocados (pode ser row, row-reverse, column, column-reverse)

    • flex-wrap: define se os elementos ficarão em só uma fila ou em mais de uma(tem os valores wrap, wrap-reverse, nowrap).

    Exemplo: flex-flow: row wrap;

  • flex: é uma propriedade de flex-item que engloba outras 3(flex: flex-grow flex-shrink flex-basis;) :

    • flex-grow: determina quanto esse flex-item crescerá em relação ao seus "elementos irmãos" com menores valores dessa propriedade(valores são 0,1,2,3,4, ...)

    • flex-shrink: o contrário do que o flex-grow faz(faz o elemento diminuir com base nos "elementos irmãos" com menores valores)

    • flex-basis: dependendo se a flex-direction é row(ou row-reverse)/column(ou column-reverse), vai governar o width/height do flex-item

circle-info
  • justify-content/align-items: essas 2 propriedades de flexbox ajudam a ajustar o elemento no container, para auxiliar a colocá-los da forma que desejamos. Elas vão depender da flex-direction. Valores para justify-content(flex-direction da esquerda é row e o da direita é column):

    Flexbox justify-content row
    Flexbox justify-content column

    Valores para align-items(flex-direction da esquerda é row e o da direita é column):

    Flexbox align-items row
    Flexbox align-items column
  • align-content: como as linhas(no caso de justify-content row) ou colunas(no caso de justify-content column) serão organizadas.

  • align-self: valores do align-items; propriedade de flex-item, alinha apenas um item

  • order: valores de 1,2,3, ...etc. propriedade de flex-item, ordena os items da forma em que o primeiro é o 1, o segundo é o 2, ...etc.

Display Grid

Mais um valor possível para a propriedade display é grid(ou inline-grid), que forma um container(grid-container) com elementos em grade(grid-itens). Dessa forma, os elementos ficam organizados em linhas e colunas.

Propriedades relacionadas

Algumas propriedades são utilizadas para ajustar a grid. Algumas delas são:

  • Gap: é o conjunto de 2 outras propriedades, row-gap e column-gap, define o espaço entre as colunas e entre as fileiras. É uma propriedade para o container grid.

  • Grid-template: uma propriedade para container, que é um shortcut para outras 3 propriedades:

    • Grid-template-rows: define o tamanho das linhas e quantas linhas serão formadas. Exemplo: grid-template-rows: auto auto auto significa que terão 3 linhas e o tamanho calculado das linhas será automático.

    • Grid-template-columns: define o tamanho das colunas e quantas colunas serão formadas. Exemplo: grid-template-rows: 20% 20% 20% significa que terão 3 colunas e o tamanho de cada linha será 20% do elemento.

    • Grid-template-areas: é uma propriedade que depende da nomeação de uma àrea usando uma propriedade no grid item, grid-area. Dessa forma, é possível definir um espaço mais(tanto para fileira quanto para coluna) para esse grid item ou vários definidos com o grid-area. Exemplo: grid-template-areas: 'myArea myArea . . .' 'myArea myArea . . .'; significa que o grid item(definido dessa forma: grid-area: myArea) ocupará as primeiras 2 colunas e 2 fileiras.

  • Grid-column/Grid-row/Grid-area: grid-area é a propriedade definida na anterior, porém ela pode ser usada como a junção entre grid-row e grid-column, os quais por sua vez representam 2 outras propriedades: grid-row-start/grid-column-start e grid-row-end/grid-column-end. Assim, essas propriedades, todas colocadas em grid-itens, determinam onde um elemento vai começar e onde vai terminar no grid, de forma que ele ocupe um espaço personalizado no grid.

Propriedade Position

Essa propriedade determina como o elemento será disposto na tela em geral. Os valores possíveis são:

  • static: é o valor padrão, significa um elemento não-posicionado, ou seja, ele será posto na forma padrão.

  • fixed: o elemento não "descerá" com o resto da página.

  • relative: o elemento fica normalmente na página, mas respeita algumas propriedades de posicionamento.

  • absolute: o elemento é posicionado de acordo com algum elemento "pai" ou "avô" que seja posicionado(fixed, relative ou absolute).

  • sticky: o elemento se comporta normalmente até o elemento ancestral mais próximo que tiver um scroll rolar até onde ele sairia da tela. Em vez disso, o elemento "gruda" no topo e continua sendo mostrado.

Propriedades de posicionamento

São 4 propriedades(left, right, top, bottom) que governam onde os elementos posicionados(fixed, relative ou absolute) ficarão. Os valores possíveis são as unidades de medida, que determinam o "espaço" que o elemento vai ter desse lado. Por exemplo: left: 10px significa que o elemento ficará à 10 pixels da parte esquerda(seja da tela na position:relative e na position:fixed ou de algum container que seja posicionado e ancestral à esse elemento na position:absolute)

Propriedade do z-index

Ela determina o grau de sobreposição entre elementos posicionados. Valores de 0,1,2,...etc que quanto maior o valor, mais em cima será colocado o elemento.

Pseudo-classes

São classes que são definidas pelo próprio navegador e auxiliam a criar certas funcionalidades. A sintaxe é:

Algumas propriedades são:

  • visited: serve para tags a(links), significa que o estilo será aplicado quando o link já estiver sido clicado anteriormente.

  • hover: muda o estilo quando o mouse estiver sobre o elemento.

  • active: muda o estilo quando o mouse clicar no elemento.

  • nth-child: uma pseudo-classe para listas(é preciso selecionar os list itens). As opções são odd/even/3n/4n/...etc. Isso selecionará de acordo com a opção somente os itens nesse padrão e aplicará o estilo.

    Exemplo:

    nth-child even

Last updated

Was this helpful?