Andréa
Zambrana
front-end @ Amil
[multicanais]
@akfzambrana
http://andreazambrana.com.
br
@frontladiesabc
facebook.com/front-ladies-
Vamos pra
o que interessa!
cor de fundo =
#55ACEE
ícone =
"62"identificação = twitter
<a href="https://twitter.com">
Twitter
</a>
<a href="https://www.facebook.com">
Facebook
</a>
<a href="https://br.linkedin.com">
Linkedin
</a>
a[href="http://twitter.com"] {
background: #55acee;
}
a[href="http://twitter.com"]:before {
content: "62";
}
a[href*="twitter"] {
background: #55acee;
}
a[href*="twitter"]:before {
content: "62";
}
a[href*="facebook"] {
background: #2E4DA7;
}
a[href*="facebook"]:before {
content: "61";
}
a[href*="linkedin"] {
background: #007AB9;
}
a[href*="linkedin"]:before {
content: "63";
}
a[href*="twitter"] {
background: #55acee;
}
a[href*="twitter"]:before {
content: "62";
}
a[href*="facebook"] {
background: #2E4DA7;
}
a[href*="facebook"]:before {
content: "61";
}
a[href*="linkedin"] {
background: #007AB9;
}
a[href*="linkedin"]:before {
content: "63";
}
a[href*="twitter"] {
background: #55acee;
}
a[href*="twitter"]:before {
content: "62";
}
a[href*="facebook"] {
background: #2E4DA7;
}
a[href*="facebook"]:before {
content: "61";
}
a[href*="linkedin"] {
background: #007AB9;
}
a[href*="linkedin"]:before {
content: "63";
}
a[href*="twitter"] {
background: #55acee;
}
a[href*="twitter"]:before {
content: "62";
}
a[href*="facebook"] {
background: #2E4DA7;
}
a[href*="facebook"]:before {
content: "61";
}
a[href*="linkedin"] {
background: #007AB9;
}
a[href*="linkedin"]:before {
content: "63";
}
a[href*="twitter"] {
background: #55acee;
}
a[href*="twitter"]:before {
content: "62";
}
a[href*="facebook"] {
background: #2E4DA7;
}
a[href*="facebook"]:before {
content: "61";
}
a[href*="linkedin"] {
background: #007AB9;
}
a[href*="linkedin"]:before {
content: "63";
}
copiar e colar, suxs!
E se usarmos um
pré-processador?
será que melhora?
Como vocês
fariam?
Com listas
$social-media: (
("twitter", "62", #55ACEE),
("facebook", "63", #2E4DA7),
("linkedin", "61", #007AB9)
);
$social-media: (
("twitter", "62", #55ACEE),
("facebook", "63", #2E4DA7),
("linkedin", "61", #007AB9)
);
$social-media: (
("twitter", "62", #55ACEE),
("facebook", "63", #2E4DA7),
("linkedin", "61", #007AB9)
);
@each $x, $y, $z in $social-media {
a[href*="#{$x}"] {
background: $z;
&:before {
content: $y;
}
}
}
@each $x, $y, $z in $social-media {
a[href*="#{$x}"] {
background: $z;
&:before {
content: $y;
}
}
}
@each $x, $y, $z in $social-media {
a[href*="#{$x}"] {
background: $z;
&:before {
content: $y;
}
}
}
@each $x, $y, $z in $social-media {
a[href*="#{$x}"] {
background: $z;
&:before {
content: $y;
}
}
}
@each $name, $char, $color in $social-media {
a[href*="#{$name}"] {
background: $color;
&:before {
content: $char;
}
}
}
a[href*="twitter"] {
background: #55acee;
}
a[href*="twitter"]:before {
content: "b";
}
a[href*="facebook"] {
background: #2E4DA7;
}
a[href*="facebook"]:before {
content: "c";
}
a[href*="linkedin"] {
background: #007AB9;
}
a[href*="linkedin"]:before {
content: "a";
}
E daqui a 6
meses?
ou mais tempo
$social-media: (
("twitter", "62", #55ACEE),
("facebook", "63", #2E4DA7),
("linkedin", "61", #007AB9)
);
$social-media: (
("twitter", "62", #55ACEE),
("facebook", "63", #2E4DA7),
("linkedin", "61", #007AB9)
);
$social-media: (
("twitter", "62", #55ACEE, #226391),
("facebook", "63", #2E4DA7, #173075),
("linkedin", "61", #007AB9, #052c3f)
);
E se fosse
algo assim?
$social-media: (
twitter: (
icon: "62",
bg-color: #55ACEE
),
facebook: (
icon: "63",
bg-color: #2E4DA7
),
linkedin: (
icon: "61",
bg-color: #007AB9
)
);
$social-media: (
twitter: (
icon: "62",
bg-color: #55ACEE
),
facebook: (
icon: "63",
bg-color: #2E4DA7
),
linkedin: (
icon: "61",
bg-color: #007AB9
)
);
@each $name, $values in $social-media {
a[href*="#{$name}"] {
background: map-get($values, bg-color);
&:before {
content: map-get($values, icon);
}
}
}
@each $name, $values in $social-media {
a[href*="#{$name}"] {
background: map-get($values, bg-color);
&:before {
content: map-get($values, icon);
}
}
}
@each $name, $values in $social-media {
a[href*="#{$name}"] {
background: map-get($values, bg-color);
&:before {
content: map-get($values, icon);
}
}
}
a[href*="twitter"] {
background: #55acee;
}
a[href*="twitter"]:before {
content: "b";
}
a[href*="facebook"] {
background: #2E4DA7;
}
a[href*="facebook"]:before {
content: "c";
}
a[href*="linkedin"] {
background: #007AB9;
}
a[href*="linkedin"]:before {
content: "a";
}
e ae, curtiram?
Sass maps
o que são
Vetores
associativos
basicamente
Listas bombadas
nome para cada valor
Desde a versão
3.3
$nome-mapa: (
chave: valor,
chave-2: valor-2
);
$nome-mapa: (
chave: valor,
chave-2: valor-2
);
$nome-mapa: (
chave-mapa: (
chave: valor,
chave-2: valor-2
),
chave-2: valor-2
);
$nome-mapa: (
chave-mapa: (
chave: valor,
chave-2: valor-2
),
chave-2: valor-2
);
Cuidado com
mapas dentro de
mapas
detalhes,
grandes
diferenças!
$colors: (
primary: #BE0062,
secondary: #D3A108,
warning: #FFF82A,
);
este mapa funciona?
$colors: (
primary: #BE0062,
secondary: #D3A108,
warning: #FFF82A,
);
este mapa funciona?
Pode ter
vírgula no final
não dá pau =P
$my-map: (
name: "my-component",
text-size: 15px,
color: #BE0062,
"show": true,
block: null,
size: (100px, 50px)
);
e assim, pode ser?
Pode usar
qualquer tipo de
dado
aceito pelo Sass
Strings (com ou sem
aspas)
Numbers
Cores
Booleans
Listas
Mapas
Null
Seja chave ou
valor
mas...
Chaves ===
strings
recomenda-se
Chaves únicas
importante!
Funções nativas
http://sass-
lang.com/documentation/Sass/Scrip
t/Functions.html#map-functions
Exemplo
button {
background: #0CA0C1;
color: #fff;
}
.main-action {
background: #0CA0C1;
color: #fff;
}
.secondary-action {
background: #0CA0C1;
color: #fff;
}
marca1.css
button {
background: #aaa;
color: #fff;
}
.main-action {
background: linear-gradient(
to bottom, #ed6655, #eb4766
);
color: #fff;
}
.secondary-action {
background: linear-gradient(
to bottom, #ed6655, #eb4766
);
color: #fff;
}
marca2.css
Com CSS4 será
que melhora?
.brand-2 {
--primary: #ed6655;
--secondary: #aaa;
--normal: #aaa;
--dark: #000;
--light: #fff;
}
.has-gradient {
--grad-light: #ed6655;
--grad-dark: #eb4766;
}
.brand-1 {
--primary: #0CA0C1;
--secondary: #0CA0C1;
--normal: #0CA0C1;
--dark: #000;
--light: #fff;
}
brand2.cssbrand1.css
button {
background: var(--normal);
color: var(--light);
}
.main-action {
background: var(--primary);
color: var(--light);
}
.secondary-action {
background: var(--secondary);
color: var(--light);
}
core.csscore.css
.has-gradient .main-action {
background: linear-gradient(
to bottom,
var(--gradient-light),
var(--gradient-dark)
)
}
.has-gradient .secondary-action {
background: linear-gradient(
to bottom,
var(--gradient-light),
var(--gradient-dark)
)
}
quem consegue
E se usarmos pré-
processador?
$primary: #ed6655;
$secondary: #eb4766;
$normal: #b9b9b9;
$gradient-light: #ed6655;
$gradient-dark: #eb4766;
$light: #fff;
$has-gradient: true;
$primary: #0CA0C1;
$secondary: #0CA0C1;
$normal: #0CA0C1;
$dark: #000;
$light: #fff;
$has-gradient: false;
brand.scssbrand.scss
$primary: #ed6655;
$secondary: #eb4766;
$normal: #b9b9b9;
$gradient-light: #ed6655;
$gradient-dark: #eb4766;
$light: #fff;
$has-gradient: true;
$primary: #0CA0C1;
$secondary: #0CA0C1;
$normal: #0CA0C1;
$dark: #000;
$light: #fff;
$has-gradient: false;
brand.scssbrand.scss
button {
background: $normal;
color: $light;
}
.main-action {
@if $has-gradient {
background: linear-gradient(
to bottom, $gradient-light, $gradient-
dark
);
color: $light;
} @else {
background: $primary;
color: $light;
}
}
.main-action {
@if $has-gradient {
background: linear-gradient(
to bottom, $gradient-light, $gradient-
dark
);
color: $light;
} @else {
background: $primary;
color: $light;
}
}
.secondary-action {
@if $has-gradient {
background: linear-gradient(
to bottom, $gradient-light, $gradient-
dark
);
color: $light;
} @else {
background: $secondary;
color: $light;
}
}
Melhorou ne?
E quando o
projeto crescer?
tipo 956 variáveis...
Será que fica
mais organizado
assim?
$brand-colors: (
primary: #0CA0C1,
secondary: #0CA0C1,
normal: #0CA0C1,
light: #fff
);
$has-gradient: false;
brand.scssbrand.scss
$brand-colors: (
primary: #0CA0C1,
secondary: #0CA0C1,
normal: #0CA0C1,
gradient: (
light: #ed6655,
dark: #eb4766
),
light: #fff
);
$has-gradient: false;
button {
background: map-get($colors, normal);
color: map-get($colors, light);
}
button {
background: map-get($colors, normal);
color: map-get($colors, light);
}
button {
background: map-get($colors, normal);
color: map-get($colors, light);
}
button {
background: map-get($colors, normal);
color: map-get($colors, light);
}
.main-action {
@if $has-gradient {
background: linear-gradient(
to bottom,
map-get(map-get($colors, gradient), light),
map-get(map-get($colors, gradient), dark),
);
} @else {
background: map-get($colors, primary);
}
color: map-get($colors, light);
}
.main-action {
@if $has-gradient {
background: linear-gradient(
to bottom,
map-get(map-get($colors, gradient), light),
map-get(map-get($colors, gradient), dark),
);
} @else {
background: map-get($colors, primary);
}
color: map-get($colors, light);
}
.main-action {
@if $has-gradient {
background: linear-gradient(
to bottom,
map-get(map-get($colors, gradient), light),
map-get(map-get($colors, gradient), dark),
);
} @else {
background: map-get($colors, primary);
}
color: map-get($colors, light);
}
.secondary-action {
@if $has-gradient {
background: linear-gradient(
to bottom,
map-get(map-get($colors, gradient), light),
map-get(map-get($colors, gradient), dark),
);
} @else {
background: map-get($colors, secondary);
}
color: map-get($colors, light);
}
.secondary-action {
@if $has-gradient {
background: linear-gradient(
to bottom,
map-get(map-get($colors, gradient), light),
map-get(map-get($colors, gradient), dark),
);
} @else {
background: map-get($colors, secondary);
}
color: map-get($colors, light);
}
brand.scss
$brand-colors: (
primary: #0CA0C1,
secondary: #0CA0C1,
normal: #0CA0C1,
gradient: (
light: #ed6655,
dark: #eb4766
),
light: #fff
);
brand.scss
$brand-colors: (
primary: #0CA0C1,
secondary: #0CA0C1,
normal: #0CA0C1,
gradient: (
light: #ed6655,
dark: #eb4766
),
light: #fff
);
@function color($key, $variation: null){
$type: map-get($brand-colors, $key);
@if $variation == null {
@if type-of($type) == map {
@return map-get(map-get($brand-colors, $key), 'base');
} @else {
@return map-get($brand-colors, $key);
}
} @else {
@return map-get(map-get($brand-colors, $key), $variation);
}
}
@function color($key, $variation: null){
$type: map-get($brand-colors, $key);
@if $variation == null {
@if type-of($type) == map {
@return map-get(map-get($brand-colors, $key), 'base');
} @else {
@return map-get($brand-colors, $key);
}
} @else {
@return map-get(map-get($brand-colors, $key), $variation);
}
}
@function color($key, $variation: null){
$type: map-get($brand-colors, $key);
@if $variation == null {
@if type-of($type) == map {
@return map-get(map-get($brand-colors, $key), 'base');
} @else {
@return map-get($brand-colors, $key);
}
} @else {
@return map-get(map-get($brand-colors, $key), $variation);
}
}
@function color($key, $variation: null){
$type: map-get($brand-colors, $key);
@if $variation == null {
@if type-of($type) == map {
@return map-get(map-get($brand-colors, $key), 'base');
} @else {
@return map-get($brand-colors, $key);
}
} @else {
@return map-get(map-get($brand-colors, $key), $variation);
}
}
.main-action {
@if $has-gradient {
background: linear-gradient(
to bottom,
color(gradient, light),
color(gradient, dark),
);
} @else {
background: color(primary);
}
color: color(light);
}
Adogo
Sass é o único
pré-processador
que tem mapas
OK, mas tem
mais
alguém que usa?
tipo alguém famoso...
Foundation Bootstrap 4 Ionic
Vlw!
@akfzambra
na
CSS SP #21
http://codepen.io/collection/nvKwK
a/
Codepen
com exemplos
Controle
de camadas
$z-layers: (
hell-pit: -9999,
default: 1,
middle: 50,
purgatory: 4000,
heaven: 4001
);
@function layer($key) {
@return map-get($z-layers, $key);
}
.dropdown {
z-index: layer(component);
}
.content {
z-index: layer(default);
}
.dialog-box {
z-index: layer(heaven);
}
Breakpoints
você não precisa de um
framework css
$screen-size: (
small: 767px,
medium: 992px,
large: 1200px
);
@mixin respond-to($size) {
$size: map-get($screen-size, $size)
@media (min-width: #{px-to-rem($size)} {
@content;
}
}
.my-link {
color: black;
@include respond-to(medium) {
color: tomato;
}
@include respond-to(large) {
color: orange;
}
}
.my-link {
color: black;
}
@media (min-width: 992px) {
.my-link { color: tomato; }
}
@media (min-width: 1200px) {
.my-link { color: orange; }
}
Controle de
componentes
$browser-min: (
'chrome': 33,
'firefox': 26,
'ie': 8,
'safari': 5,
'opera': 10
);
%clearfix {
$min-support: map-get($browser-min, 'ie');
@if $min-support < 8 {
…
} @else {
…
}
}
Agora é só soltar
a imaginação
e ser muito feliz!

Sass maps, my precious! 2.0

Editor's Notes

  • #2 Boa noite pessoal Hoje vim falar com vcs sobre uma feature do Sass pela qual eu sou apaixonada e que utilizo muito nos projetos em que trabalho na Amil
  • #3 Para quem não me conhece, meu nome é Andréa Zambrana, trabalho como desenvolvedora frontend na equipe multicanais da Amil. Se vcs quiserem me achar em qualquer midia social, meu usuário é sempre akfzambrana. Podem adicionar, seguir, fazer perguntas, ou até fazer sugestões para que eu melhore a talk Este é meu blog, eu não escrevo muito, mas tem alguns artigos tecnicos e alguns outros falando sobre a vida. Eu adoro falar sobre a vida heheh
  • #4 Sou uma das organizadoras da comunidade Front Ladies abc, que é uma comunidades de mulheres frontenders do grande abc, se quiserem nos seguir no twitter, o usuário é @frontladiesabc e tem a nossa fan-page no facebook para quem quiser curtir e ficar sabendo das nossas iniciativas. Estamos procurando pessoas para dar cursos gratuitos sobre diversos assuntos. Nós fazemos os cursos e workshops de forma online assim ficam gravados no Youtube para que qualquer pessoa possa assistir no futuro.
  • #5 Bom, vamos parar de enrolar e falar sobre o que nos interessa ne?
  • #6 Quem nunca teve que fazer icones de midias sociais?
  • #12 O unico que muda neste código é: o identificador, que no caso é a url, a cor de fundo e o caracter que corresponde ao ícone
  • #13 O unico que muda neste código é: o identificador, que no caso é a url, a cor de fundo e o caracter que corresponde ao ícone
  • #14 O unico que muda neste código é: o identificador, que no caso é a url, a cor de fundo e o caracter que corresponde ao ícone
  • #15 O unico que muda neste código é: o identificador, que no caso é a url, a cor de fundo e o caracter que corresponde ao ícone
  • #28 O unico que muda neste código é: o identificador, que no caso é a url, a cor de fundo e o caracter que corresponde ao ícone
  • #37 O each é um pouco diferente, pois aqui o primeiro parametro vai receber as chaves do primeiro nivel do mapa e o segundo vai receber o segundo nível
  • #38 O each é um pouco diferente, pois aqui o primeiro parametro vai receber as chaves do primeiro nivel do mapa e o segundo vai receber o segundo nível
  • #39 O each é um pouco diferente, pois aqui o primeiro parametro vai receber as chaves do primeiro nivel do mapa e o segundo vai receber o segundo nível
  • #40 O unico que muda neste código é: o identificador, que no caso é a url, a cor de fundo e o caracter que corresponde ao ícone
  • #44 Para os íntimos
  • #46 sintaxe básica -> Chave, qq tipo dado sass, única -> Valor da chave, qq tipo dado
  • #47 sintaxe básica -> Chave, qq tipo dado sass, única -> Valor da chave, qq tipo dado
  • #48 valor tb pode ser mapa
  • #49 valor tb pode ser mapa
  • #52 esta certo?
  • #53 esta certo?
  • #55 esta certo?
  • #62 Muitas funções nativas acesse url
  • #101 Boa noite pessoal Hoje vim falar com vcs sobre uma feature do Sass pela qual eu sou apaixonada e que utilizo muito nos projetos em que trabalho na Amil