O QUE É CSS?

Cascading Style Sheet

É de comer?

COMO POSSO USAR?

Inline Style

<p style="color: red; background-color: blue;">
NO! NO! NO!
</p>

Internal Style

<style>
    a {
        font-size: 20px;
        color: yellow;
    }
</style>

INCLUSÃO

ENTÃO USO VIA FUMAÇA?

EXTERNAL STYLE

<!-- HTML file -->
<link rel="stylesheet" href="css/style.css">
/* CSS file */
h1 {
    font-size: 24px;
    border: 1px red solid;
}
p {
    padding: 20px 0;
    line-height: 20px;
    color: #fff;
    background-color: blue;
}

E AÍ, O QUE SÃO ESSES CÓDIGOS LOUCOS?

SINTAXE

p {
    background-color: blue;
}

propriedade

valor

seletor

SELETORES

  • ID

#contact {
    padding: 50px 10px;
    background-color: #ff0000;
}
  • Class

.contact {
    padding: 50px 10px;
    color: blue;
}

SELETORES

Nomeie os seletores pela semântica do conteúdo e não pelo visual.

Código Ruim

Código Bom

.box-green {
    padding: 10px;
    background-color: green;
    color: #ffffff;
.box-success {
    padding: 10px;
    background-color: green;
    color: #ffffff;

ORDEM DE DECLARAÇÃO

.declaration-order {
  /* Positioning */
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 100;

  /* Box-model */
  display: block;
  float: right;
  width: 100px;
  height: 100px;

  /* Typography */
  font: normal 13px "Helvetica Neue", sans-serif;
  line-height: 1.5;
  color: #333;
  text-align: center;

  /* Visual */
  background-color: #f5f5f5;
  border: 1px solid #e5e5e5;
  border-radius: 3px;

  /* Misc */
  opacity: 1;
}

http://i.imgur.com/yjMv7cg.png

http://dontpad.com/pablo/treinamento/css

ESTRUTURA HTML

RESULTADO

TIPOGRAFIA

FONT-PROPERTIES

font: italic 18px small-caps "Open Sans", sans-serif;
  • font: Declarar todas as propriedades de uma vez
font-family: "Open Sans", sans-serif;
  • font-family: Especifica a família da fonte
font-size: 62.5%;
  • font-size: Especifica o tamanho da fonte
font-style: italic;
  • font-style: Especifica o estilo da fonte
font-weight: 800;
  • font-weight: Define o quão negrito será a fonte
@font-face {
    font-family: "NomedaFonte"; src: url("http://site/Fonte.ttf"); }
  • @font-face: Utilizar fontes fora do padrão do sistema

TEXT-PROPERTIES

text-align: center;
  • text-align: Especifica o alinhamento horizontal do texto
text-transform: uppercase;
  • text-transform: Define a capitalização do texto
text-decoration: none;
  • text-decoration: Especifica a decoração do texto
vertical-align: super;
  • vertical-align: Especifica o alinhamento vertical do texto
word-spacing: 20px;
  • word-spacing: Especifica o espaço entre as palavras
line-height: 20px;
  • line-height: Define a altura da linha

UNIDADES DE MEDIDA

Absolutas

Relativas

  • em
  • ex
  • %

Referenciada a outra medida

Não está referenciada a outra medida

  • pt
  • px
  • in
  • cm
  • rem
  • vw
  • vh
  • mm
  • pc

BOX MODEL 

BOX-MODEL

Content

Padding

Border

Margin

O que será exibido

Distância entre conteúdo e a borda

O que envolve o box

Separa um box de outro

BOX-SIZING: BORDER BOX

  • altura e largura incluem padding e border

Content

Padding

Border

Margin

PADDING

MARGIN

AND

Espaçamento interno

Espaçamento externo

Distância entre conteúdo de um elemento e sua borda

Distância de um elemento para outro

Ex.: recuar texto dentro de um conteúdo 

Ex.: Afastar um post de uma imagem

/* four values -> top, right, bottom, left*/
padding: 25px 50px 75px 100px;
/* three values -> top, right AND left, bottom */
padding: 25px 50px 75px;
/* two values -> top AND bottom, right AND left */
padding: 25px 50px;
/* one value -> all paddings */
padding: 25px;
/* individual */
margin-top: 50px;

DISPLAY

  • Define a maneira que o elemento será renderizado na página
  • display: block
  • display: inline
  • display: none

BLOCK

INLINE

X

Renderizado em bloco e ocupam toda a largura do documento

Renderizado em linha e ocupam o necessário para a exibição

display: block;

display: inline;

Valor padrão

DISPLAY: NONE

  • Faz com que o elemento e seu espaço não seja exibido

DISPLAY

VISIBILITY

AND

display: none;

visibility: hidden;

Não é a mesma coisa? Esconder o elemento?

NÃO

Oculta o elemento na página, mas o espaço usado por ele continua sendo usado

Oculta o elemento na página e além disso o espaço usado por ele

OVERFLOW

  • Especifica quando o conteúdo de um elemento deve ser exibido, cortado ou transborda do elemento
/* Valor padrão */
overflow: visible;
/* O conteúdo será cortado e não será exibido scroll */
overflow: hidden;
/* Scrolls são exibidos mesmo quando não necessário */
/* Pode ser útil com conteúdos dinâmicos */
overflow: scroll;
/* É exibido o scroll apenas quando necessário */
overflow: auto;

BORDER-PROPERTIES

border-color: blue;
border-style: dotted;
border-width: 3px;
/* ou tudo junto */
border: 3px dotted blue;
  • Pode ser definido de forma separara ou tudo junto
  • Por default, a cor da borda não é exibida pois o border-style é none
border-radius: 50%;
  • Bordas arredondadas

RESET

Por que usar?

Por padrão, os elementos HTML possuem um estilo incorporado, e isso varia em cada browser

Padronizar a visualização das páginas

CSS RESET

NORMALIZE

X

  • Apaga todas as propriedades predefinidas
  • Normaliza as propriedades entre os browsers
  • Deve criar tudo de novo
  • Os browsers possuem propriedades diferentes
*,
*::after,
*::before {
  margin: 0;
  padding: 0;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

POSICIONAMENTO

POSICIONAMENTO

  • top, right, bottom e left são propriedades usadas para posicionamento, mas dependem de outra propriedade para funcionar, a position
  • position: static;
  • position: relative;
  • position: absolute;
  • position: fixed;

POSITION: STATIC

  • Valor padrão de todos os elementos
  • Se for passado propriedades de coordenadas, elas não serão respeitadas (top, left....)
  • Permanece sempre em seu local original.

POSITION: RELATIVE

  • Por padrão é renderizado da mesma forma que static
  • Se for passado propriedades de coordenadas, elas serão aceitas (top, left....)
  • O seu tamanho é levado em conta na hora de calcular o tamanho do elemento pai, mas não levaria em conta o posicionamento

POSITION: ABSOLUTE

  • É obrigatório posicionamento vertical e/ou horizontal
  • O elemento é renderizado na posição indicada, mas relativa ao primeiro elemento pai diferente de position static
  • Caso não exista um elemento pai diferente de static, será relativo a página
  • Seu tamanho não conta para calcular o tamanho do elemento pai

POSITION: FIXED

  • É obrigatório posicionamento vertical e/ou horizontal
  • O elemento é renderizado na posição indicada e ficará fixo mesmo com rolagem de página
  • Seu tamanho não conta para calcular o tamanho do elemento pai
.static, .relative1, .relative2, .absolute {
  margin: 20px;
  padding: 20px;
}
.static {
  position: static;
  border: 2px solid red;
}

.relative1 {
  position: relative;
  border: 2px solid blue;
}
.relative2 {
  position: relative;
  top: -30px;
  border: 2px solid green;
}

.absolute {
  position: absolute;
  border: 2px solid yellow;
  top:0;
  left: 300px;
}

.relative1

.relative2

FLOAT

  • Faz o elemento flutuar/deslocar-se em relação ao conteúdo
.floatLeft {
    width: 50%;
    float:left;
}
  • Mais usados com left, right e none

CLEAR

  • Usado para controlar o comportamento de elementos que se seguem ao float.
/* O elemento não será movido para limpar o float */
clear: none;
/* O elemento será movido para limpar float left */
clear: left;
/* O elemento será movido para limpar float right */
clear: right;
/* O elemento será movido para limpar float left e right */
clear: both;
  • Por padrão, o elemento subsequente a um float, ocupa o espaço livre ao lado do elemento flutuado
  • Valores mais utilizados são:
.class {
    clear: left;
}

CLEARFIX

  • .clearfix é uma classe usada para que um elemento tenha, ele próprio, a propriedade clear, sem que seja usado código extra
.clearfix::before, .clearfix::after {
    content: "";
    display: table;
}
.clearfix::after {
    clear: both;
}
  • Dessa forma, todo elemento que possui elementos flutuantes, deve ter essa classe

Z-INDEX

  • CSS usa espaço 3D
  • altura
  • largura
  • profundidade
  • Usado para colocar elementos em camadas, sobrepondo um ao outro
/*Valores maiores sobrepõem elementos com valores menores */
z-index: 2;

VISUAL

BACKGROUND-PROPERTIES

background-color: red; 
background-color: #ff0ff;
background-color: rgb(255, 255, 255);
background-color: rgba(255, 100, 20, .5);
  • background-color
background-image: url(img/bg.png);
background-image: none;
  • background-image
background-position: top, bottom, left, right, center;
background-position: 25% 50%;
background-position: 0px 0px center;
  • background-position

IMAGE-PROPERTIES

  • filter: Aplicar filtros em imagens
filter: blur(5px);
  • filter: blur()
filter: brightness(2);
  • filter: brightness()
filter: contrast(4);
  • filter: contrast()
filter: grayscale(1);
  • filter: grayscale()
filter: sepia(1);
  • filter: sepia()
filter: invert(.3);
  • filter: invert()
filter: opacity(.5);
  • filter: opacity()

SHADOW PROPERTIES

Text Shadow

p {
    /* text-shadow: h-shadow v-shadow blur color */
    /* Sombra sólida */
    text-shadow: 5px 2px blue;
    /* Sombra com blur */
    text-shadow: 5px 2px 5px blue;
}

Box Shadow

p {
    /* Sombra sólida */
    text-shadow: 5px 2px blue;
    /* Sombra com blur */
    text-shadow: 5px 2px 5px blue;
}

Caso queira sombra interna, usar inset antes dos valores

SELETOR UNIVERSAL

UNIVERSAL

  • Aplica as regras recebidas para todos os elementos da página
* {
    color: red;
    font-size: 16px;
}

PSEUDO-CLASS

PSEUDO-CLASS

  • Usado para referenciar o estado ou posição de um elemento em uma coleção
  • :focus
  • :hover
  • :checked
  • :first-child
  • :last-child
  • :nth-child()

:HOVER

  • Altera o elemento ao passar o mouse por cima
a:hover {
    color: pink;    
}

Doge Lindão

Doge Lindão

:FOCUS

  • Altera o elemento ao ganhar foco
input[type=text]:focus {
  color: pink;
}
  • Exemplificando, ao clicar em um campo de texto, o elemento está ganhando foco 

Text

:CHECKED

  • Altera o elemento quando ele está marcado
input:checked {
    height: 50px;
    width: 50px;
}

:FIRST-CHILD

  • Altera o primeiro filho de um elemento
ul li:first-child {
    font-weight: bold;
    font-style: italic;
}

Doge Lindão

Doge Lindão

Doge Lindão

Doge Lindão

Doge Lindão

Doge Lindão

:LAST-CHILD

  • Altera o último filho de um elemento
li:last-child {
    font-weight: bold;
    font-style: italic;
}

Doge Lindão

Doge Lindão

Doge Lindão

Doge Lindão

Doge Lindão

Doge Lindão

:NTH-CHILD()

  • Altera o índice n de um elemento
li:nth-child(2n+1) {
    font-weight: bold;
    font-style: italic;
}

Doge Lindão

Doge Lindão

Doge Lindão

Doge Lindão

Doge Lindão

Doge Lindão

  • Também pode ser passado expressões aritméticas

PSEUDO-ELEMENT

PSEUDO-ELEMENT

  • Permite acessar conteúdo inacessível e a possibilidade de referenciar conteúdo que não existe
  • Quero colocar todas as primeiras letras do meu texto igual de jornal
  • ::first-letter
  • ::after
  • ::before

::FIRST-LETTER

  • Permite estilizar apenas a primeira letra da primeira palavra de um texto
p::first-letter {
    font-size: 200%;
}

H

aaaablo!

::BEFORE

  • Permite inserir elemento no início de outro elemento
li::before {
    content: "> "
}

> Samurai Jack

> Samurai Jack 2

> Samurai Jack 3

::AFTER

  • Insere elemento no final de um elemento
a::after {
    content: " (" attr(href) ") ";
}

Googgle (www.google.com)

EJCM (www.ejcm.com.br)

...

PSEUDOCLASS

PSEUDOELEMENT

X

  • Selecionar elementos que são expressados através de classes, ids....
  • Selecionar elementos "imaginários" e emular como reais
  • Ex: Alterar primeiro ou último elemento
  • Ex: Inserir conteúdo antes de um elemento

COMBINATORS

COMBINATORS

  • Seletores que possuem a combinação de dois elementos
  • a ~ b
  • a + b
  • a > b

A ~ B

/* CSS */
h1 ~ p {
    font-style: italic;
    color: fuchsia;
}
  • Seletor de Irmãos - Sibling
  • Seleciona todos os irmãos seguidos de A dentro do pai
<!-- HTML -->
<article>
    <p>Antes</p>
    <h1>Título</h1>
    <p>Início</p>
    <div>
        <p>Dentro de outra div</p>
    </div>
    <p>Texto</p>
</article>
    <p>Lado de fora</p>

A + B

/* CSS */
h1 + p {
    font-style: italic;
    color: fuchsia;
}
  • Seletor de Irmãos Adjacentes - Adjacent Sibling
  • Seleciona apenas o irmão seguinte de A dentro do pai
<!-- HTML -->
<article>
    <h1>Título</h1>
    <p>Início</p>
    <div>
        <p>Dentro de outra div</p>
    </div>
    <p>Texto</p>
</article>
    <p>Lado de fora</p>

A > B

/* CSS */
article > h1 {
    font-style: italic;
    color: fuchsia;
}
  • Seletor de Filho Direto - Child Selector
  • Seleciona apenas o primeiro filho de A
<!-- HTML -->
<article>
    <h1>Título</h1>
    <p>Início</p>
    <div>
        <h1>Título 2 fora</h1>
        <p>Dentro de outra div</p>
    </div>
    <h1>Título 3 dentro</h1>
    <p>Texto</p>
</article>
    <p>Lado de fora</p>

MEDIA QUERIES

CSS TRANSITION

CSS TRANSITION

  • Propriedade autoexplicativa
  • Usado para animar o processo de mudança de algum valor CSS
a {
    color: blue;
    background-color: red;
}

a:hover {
    color: red;
    background-color: blue;
}

SINTAXE

a {
    color: blue;
    background-color: red;
    transition: 1.5s;
}

a:hover {
    color: red;
    background-color: blue;
    transition: 1.5s;
}
    transition: color 1.5s, background-color .5s;
transition: property duration timing-function delay;

SUAVIDADE

  • linear: velocidade constante na animação
  • ease: redução gradual na velocidade da animação
  • ease-in: aumento gradual na velocidade da animação
  • ease-out: redução gradual no fim da animação
  • ease-in-out: aumento gradual, depois redução gradual na velocidade da animação

MAIS EXEMPLOS

a {
    color: blue;
    background-color: red;
    transition: color 1s ease, background-color .8s ease-out;
}

a:hover {
    color: red;
    background-color: blue;
    transition: .5s ease;
}

MAAAAAS......

  • Não é suportado pelo nosso grande amigo IE 8 e 9

CSS TRANSFORM

CSS TRANSFORM

  • Usado para alterar as propriedades visuais do elemento
  • translate();
  • rotate();
  • skew();
  • scale();
  • Exemplificando, podemos escalonar, alterar o ângulo, a posição de um elemento, entre outros

TRANSLATE()

  • Moverá o elemento no eixo X e Y
transform: translateX(50px);
  • Somente no eixo X
transform: translateY(20px);
  • Somente no eixo Y
transform: translate(100px, 20px);
  • Move o elemento nos dois eixos
  • Não leva em conta float, position, margin, etc

ROTATE()

  • Rotaciona um elemento em torno do seu ponto de origem
/* Pode ser rotacionado em graus, 
   voltas ou grado
*/
transform: rotate(45deg);

SCALE()

  • Modificará as dimensões de um elemento levando em conta seu tamanho original
transform: scaleX(1.2);
  • Somente no eixo X
transform: scaleY(1.5);
  • Somente no eixo Y
transform: scale(0.3, 1.4);
  • Escala no total
  • Valor padrão = 1 (100%)

SKEW()

  • Modificará os ângulos de um elemento
transform: skewX(50deg);
  • Somente no eixo X
transform: skewY(70deg);
  • Somente no eixo Y
transform: skew(50deg, 20deg);
  • Escala no total

UM POUCO MAIS DE TRANSFORM

  • Podemos usar todas essas transformações juntas
transform: rotate(-30deg) scale(0.4);

DICAS E LINKS ÚTEIS

CENTRALIZAR

http://howtocenterincss.com/

PERFORMANCE

http://browserdiet.com/pt/

STYLEGUIDE

https://github.com/styleguide

RESPONSIVIDADE

http://ami.responsivedesign.is/

ESTUDO

https://developer.mozilla.org/pt-PT/

http://diegoeis.github.io/code-guide/

CSS SHAPES

https://css-tricks.com/examples/ShapesOfCSS/

ELEMENTOS CSS

http://corpuscss.com/

BLOG

http://willianjusten.com.br/

VELOCIDADE

https://developers.google.com/speed/pagespeed/insights/

COMPATIBILIDADE

https://www.google.com/webmasters/tools/mobile-friendly/

COMPILADO DE DICAS

100 Recursos para UI Designers

CURIOSIDADE

http://www.fontreach.com/#top

LIVROS

Desenvolvimento Web com HTML, CSS e Javascript

HTML5 e CSS3 com Farinha e Pimenta

DÚVIDAS???

[WIP] Treinamento CSS3

By Pablo da Rocha

[WIP] Treinamento CSS3

Treinamento CSS para EJCM

  • 1,006