Skip to content

pierregermain/MyFront

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BAM - Frontend

Table of contents generated with markdown-toc

Introducción

Hoy en día puedes hacer web sin crear directamente html. Es bueno saber cómo funciona el html / css.

Back vs Front

Backend es todo lo que está en el servidor: En Drupal sería PHP y MySQL. Frontend es lo que pasa en el Navegador Web: En Drupal sería HTML, CSS y JS.

En Drupal suele ser el Backend el encargado de crear el código usado en Frontend (HTML, CSS, JS)

Es por ello que ahora está de moda las API's para separar el Back y el Front.

Básicamente el Frontent se basa en HTML CSS y JS. Encima de eso luego aprendes sobre:

  • Diseño Responsivo
  • Accesibilidad
  • Performance

Sobre el Curso

El cliente nos da un "mockup" y lo vamos a convertir en un Template (basado en HTML / CSS / JS). Para ser un Frontend profesional es importante tener las herramientas que usa el diseñador (Photoshop por ejemplo)

Consideraciones HTML

Ver 01-Simple-Html/*

  1. Todo estilo se puede sobreescribir: Hay dos opciones
  • ó cambias el markup
  • ó cambias el estilo.

Si usas un div básicamente inicializas todos los estilos.

  1. Hay que usar tags con significado: Semantic HTML: Es bueno para:
  • Navegadores
  • Screen Readers
  • Buscadores
  • Desarrolladores

No uses un tag equivocado: Si no es el tag correcto mejor usa un div. No selecciones un tag por el aspecto. Busca en google los tipos de tags que hay si no sabes que tag usar.

  1. En HTML todo es una caja
  • Recomiendo mirar desde el inspector el margin > border > padding.
  • Es bueno ver cada página cómo una combinación de cajas.
  • Entender bien la aproximación al Diseño Atómico
    • Átomos: HTML Tags (Input, Button, H1, etc.) o elementos abstractos (color, fonts, animaciones)

    • Moléculas: Estructura formada por átomos. Sería un Form por ejemplo que combina Input - Label - Button

    • Organismos: Combinación de Moléculas. Podría ser regiones en los que metes Moléculas.

    • Templates: Combinación de Organismos (Regiones). Aquí se ve el diseño de la página sin contenido

    • Páginas: Son instancias de Templates en los que metemos contenido para ver el resultado final

    • El Resultado de aplicar este método se puede hacer usando Patternlab-Php

Pasos para pasar del Diseño al Frontend

  1. Dibujar cajas
  2. Definir tipografías de cada elemento / caja
  3. No recomendamos imágenes con texto de forma provisional

Consideraciones Frontend

Hay dos maneras de trabjar:

  1. Sensible: Rapidez
  2. Clean: Reducir technical debt

Normalmente empiezas "clean" y acabas haciendolo "sensible"

Hay que encontrar un equilibrio entre las dos maneras de trabajar.

Css Básico

Definir Tipografía

Font Properties

Hay que saber al elegir una font sobre las "css font properties". Propiedades de fonts en w3schools

Primer elegimos la font-family: Preferentemente una que no haya que bajarse de internet para ahorrar ancho de banda

  • Sans Serif (moderno, sin los picos) vs. Serif (con los picos, oldshool) Ej) font-family: sans-serif

Después elegimos la font-style (italic por ejemplo) y font-size.

Finalmente solemos aplicar la font-weight

Trucos:

  • Para el tamaño es imprescindible tener una herramienta para medir pixeles:
  • Si usas font puedes aplicar estilos y tamaños a la vez pero no se suele usar porque es complicado de mantener.

Text Properties

Una vez definido las font properties nos pasamos a las text properties (para el color y el espaciado sobre todo)

Propiedades de texto en w3schools

Propiedades a conocer: color, text-align, text-decoration, text-transform

Otras propiedades: letter-spacing, line-height, word-spacing, text-shadow

Propiedades avanzadas: white-space, text-overflow, ...

Propiedades que no se suelen usar: text-indentation, direction, ...

Trucos:

  • color:
    • En una Font debes elegir el color que está más adentro (obscuro)
    • Imprescindible tener tu color picker
  • text-identation: Hay que tener cuidado con este que nos puede dar problemas con margenes/paddings/text-align

Headings

Al empezar a hacer FE, podemos empezar por los Headers. Habrá que ver que cosas son parte del Header y cuales no.

Si hay borders debajo del header lo aplicamos:

  • Aplicamos un border.
    • Lo más común es usar border-style con los valores dotted, dashed o solid

    • Muy común es usar: border-top-style border-bottom-style border-right-style border-left-style

    • Muchas veces tendrá sentido mejor usar en una sóla línea de código para definir el bordem-bottom que hacerlo por separado. Un ejemplo:

            // Border-Bottom
            border-bottom-style: solid;
            border-bottom-width: 1px;
            border-bottom-color: #DDDDDD;
            
            podría mejor definirse cómo
      
            // Border-Bottom
            border-bottom: solid 1px #DDDDDD;
      

Si necesitamos alinear podemos aplicar text-align.

Ahora habrá que fijarse en el padding para separar el Header con el border. Y a continuación el valor del margin-bottom para que el border esté a suficiente distancia con el siguiente elemento.

Clases y Selectores

Ahora que ya tenemos nuestras variables para nuestro H2, nos damos cuenta que habrá otros H2 que van a ser diferentes en estilo. Para dichos H2 podemos crear una clase caracteristica. Por ejemplo habrá borders que usen un color diferente. Vamos a usar por ahora una clase llamada border_white para dicho caso.

Podemos usar varias clases en el markup separandolos con un espacio en blanco. Desde el CSS se accede a ellos con el punto.

  • Clases: Son cómo tags para dar una categoria. Tipo Taxonomías en Drupal o Tags en Facebook. Lo complicado es saber usar un nombre adecuado.
  • Selectores: Sirven para seleccionar desde CSS a elementos que quieras estilar. Pueden ser clases (.border), id's (#name), elementos (h2), atributos. Podemos combinarlos. Al principio es muy dificil saber que selector necesitamos. Hay veces que hay que usar un Selector, y ya mas adelante tenemos que cambiarlo ya que nos damos cuenta que no era el correcto.

Listado de Selectores y manera de combinarlos

Ej.)

Para seleccionar (usamos espacio)

<p class="border full"></p>

podemos usar (sin espacio)

.border.full{
}

Secciones

Primero debemos Identificar Secciones en el diseño: Al hacer zoom out del diseño puedes ver más fácilmente las cajas del diseño.

Para hacer secciones en html usamos el tag section en vez del div

Sections en mozilla.org

Importante:

  • No se debe usar section para aplicar estilos: Para ello usaremos clases. Concretamente podemos usar "compound classes" tipo section-name.class-name
  • Se usa section para los Screen Readers, para generar un buen Outline

Sobre Sections en HTML5

Cálculo de Margin y Padding

Ver 13-margin-padding.html Ver video t3.13

  • El background sólo se aplica dentro del border (padding). No se aplica al margin
  • El margin nada mas dice el espacio que va a haber entre elementos
  • Para padding left y right esta fácil aplicarlo a la clase de la sección si no hay margenes definidos en los elementos interiores.
  • Calculo de Padding cuando hay un margin interior:
    • Necesitamos un padding-top de 54 pixeles (entre el Section y el H2)
    • Pero ya hay un margin-top definido en el H2 de unos 28px (es el valor por defecto en Chrome)
    • Por ello tenemos que aplicar 26px (28px + 26px = 54px)
  • Es importante saber que si Section no tiene un padding, no se va a ver el margin de los elementos interiores.
  • En cuanto aplicas un padding de 1px, elementos interiores de repente se van a ver con el margen aplicado.

Padding Shorthand:

Normalmente el padding superior e inferior tienen el mismo valor. Si no lo tienen quizás sea porque el diseñador hizo algo mal.

Sobre Padding Shorthand: Ej.)

padding-left: 121px;
padding-right: 121px;
padding-top: 26px;
padding-bottom: 26px;

equivale a:

padding: 26px 121px 26px 121px;

que equivale a:

padding: 26px 121px;

Siguientes conversiones: Más Headings

Ver 02-Slider-Heading/*

Una vez realizado los Heading y los Selectores hay que ver que mas vamos a estilar. Vemos que seguimos teniendo muchos Headers para ser pasados por Frontend. Seguimos por ese camino pues. Para ir en orden vamos a empezar por los Headers superiores, hasta llegar hasta los de abajo

Volvemos a hacer lo mismo que en el primer paso: volvemos a hacer un screenshot del Header, y lo metemos dentro del markup temporalmente. (va ser el Header del Slider) Ahora desde el navegador jugamos con los estilos para ver que cambios hay que realizar. Aplicamos text-align:left; text-transform:none y aplicamos el font-size correcto. Para obtener el font-size deberíamos comparar letras grandes (Por ejmplo la "M" o la "L"). Una vez que tenemos el font-size aplicamos el font-weight: 200; Para no caer en errores de font-weight aplicamos un background parecido al del diseño. Y ya que esté correcto el color aplicamos el letter-spacing, si vemos que hay que ajustarlo todavia podemos bajarle un pixel a la font-size.

Eso nos da el siguiente estilazo:

text-align: left;
text-transform: none;
font-size: 39px;
font-weight: 500;
background-color: #525B5E;
color: white;
letter-spacing: 0;

Búsqueda del nombre característicos para una clase

Ahora tenemos que pensar a ver donde aplicamos este estilo para ese Header del Slider Por ahora vamos a poder acceder a dicho H2 con la clase slider-heading. El background se lo aplicamos al wrapper del H2 que es la section con clase slide ya que no tendría sentido sólo aplicarlo al H2.

Además le aplicamos un poco de padding al slide de forma provisional. Al aplicar el padding vemos que el H2 tenía estilos escondidos que tendremos que sobreesribir.

Por ejemplo al H2 hay que quitarle el borde inferior. Aplicamos lo siguiente a su clase:

border: none;
padding: initial;
margin: initial;

El initial lo que hace es aplicar los estilos por defecto (estilos del navegador web)

Sobre clases por defecto

Quizás te das cuenta que no es tan buena idea darle estilos directamente a H2, sobre todo si no se va a usar en todo el sitio web.

Selectores con Hijos (Compound Selector)

Ver 16-compound-selector.html

En el caso de nuestros H2 dentro de las secciones, estos toman estilos dependiendo del padre.

Entonces para acceder a ellos desde el CSS podemos usar: .slide h2 y .section h2

Acceder de esta forma depende siempre de si el elemento al que accedes siempre va o no a tener ese estilo y si además se usa en otro lado.

Selectores Hijos

.slide h2 accede a todos los h2 dentro de .slide. Es decir accedería a todos estos h2:

<div class="slide>
   <h2> Si </h2>
   <div> 
     <h2> Si </h2>
   </div>
</div>

En cambio .slide > h2 accede sólo a los h2 direcatemente hijos de .slide (pero no los nietos).

<div class="slide>
   <h2> Si </h2>
   <div> 
     <h2> No </h2>
   </div>
</div>

Cuando puedas usa el Selector Hijo con ">" ya que es mas eficiente que el espacio en blanco

Reglas CSS

  1. Orden de Aplicación
  • El orden importa, no es lo mismo aplicar un color al H2 al principio del Css que al final. Siempre el último valor aplicado tiene más prioridad que al principio
  • Tiene más prioridad el estilo aplicado directamente al markup (con la propiedad style)que dentro de los css.
  1. Especialización:

Ej.) El selector .section h2 tiene más poder que el selector h2

En caso de empate entre Especialización y Orden de Aplicación siempre gana la Especialización

Organización básica de CSS

Primero empezamos a definir selectores sueltos (globales) y vamos a ir especializando cada vez mas nuestros selectores

Importar Css

Ya hemos visto que podemos usar CSS desde dentro del HTML de dos formas: Una desde el Head en el tag syle y otra directamente desde el markup. Pero hay una tercera forma de usar CSS y es importandolo desde ficheros externos.

Para ello declaramos desde el head lo siguiente:

<link href="css/styles.css" rel="stylesheet" type="text/css"/>

Mas info sobre link

Modificación de CSS desde Navegadores

  • En Firefox vas a Inspect Element > Style Editor y le das al botón Save
  • En Chrome vamos a Inspeccionar > Sources . Ahi vamos a "arrastrar" nuestro workspace, Chrome te preguntará si estás seguro.

En ambos casos con Ctr + S podras guardar los cambios desde el propio navegador. Además en Chrome puedes modificar el HTML.

Evitar tanto override

Hay varias formas:

  • una clase por cada tipo de estilo dentro del elemento o contenedor

Hacer el CSS longterm

  • intentar no usar selectores de elementos (H2) para estilos.
  • mejor usar selectores de clases.
  • así si cambia la estructura del documento no se rompen los estilos.

CSS Semántico con clases

Para usar por ejemplo una clase título dentro de un slide podriamos usar este nombre:

slide_principal-title

Para usar una clase para un título de una sección general usaríamos:

section_hero-title

Si te fijas el dash "-" nos separa elementos padre e hijo. En cambio _ solamente es una especie de Camel Case en Css.

Cambio de nuestro CSS a Semántico

Ver 18-semantic-classes

Ya no usamos H2 para el estilo: Al cambiar el markup de H2 a H5 por ejemplo los estilos ya no se rompen

Organización de CSS con SMACSS

Página oficial: smacss: Scalable and Modular Architecture for CSS

Recomendación: Leer el libro oficial

Ya hemos visto ejemplos de clase_padre-clase_hijo

Componentes (o Módulos) en CSS y HTML

  • En SMACSS los contenedores (cómo secciones) se llaman módulos (en otros sistemas los llaman componentes)
  • En Drupal vamos a llamar a dichos contenedores "componentes" para no usar la nomenclatura "módulo"
  • La idea es que un componente podamos reusarlo y que se pueda mover de un sitio a otro en la web para poder ser reusado

Subcomponentes (ó Submódulos)

Ver 02-subcomponentes.html

  • Son componentes iguales que otros pero que tienen alguna cosa diferente
  • SMACSS dice que debemos tomar el nombre característico y agregarle otro nombre característico

EJ) componente_principal--clase_alternativa

Con "--" hacemos la distinción de subcomponente

Siguientes conversiones: Más Headings

Ahora vamos a fijarnos en el siguiente Heading a ser estilado. Vamos a decidirnos por un H3 dentro de una sección. Volvemos a meter en nuestro markup una imagen del resultado.

Podemos ir editando directamente desde nuestro navegador, podemos ir copiando estilos que ya hemos usado anteriormente.

Nuestro Css va ser

.icon_box{
    background-color: #e8e8e8;
}
.icon_box-title{
    font-family: sans-serif;
    font-size: 26px;
    font-weight: 100;
    color: #7A7A7A;
    text-align: center;
    text-transform: uppercase;
    letter-spacing: 1px;
}

Una vez aplicado a un elemento creamos los demás elementos para replicar los estilos, pero realmente no hace falta replicarlos hasta tener un componente bien realizado.

Line-height

Una vez que tengas tus headings estilados toca estilar los paragráfos (p). Vamos a estilar el paragraph del slider.

Volvemos a dejar en nuestro markup un screenshot de lo que queremos conseguir (Heading y Paragraph). Para un paragraph no suele ser común usar una clase de estilo, nada mas en casos especiales.

Cuando te pones a estilar un paragraph, mira a ver si en todo el diseño se cumple lo que vas a realizar.

En cuanto al line-height se define con porcentajes, pero es bueno con el pixel ruler ver si se ha aplicado bien (después de haber definido el font-size).

Sobre Margins

Notas Iportantes sobre margenes:

  • El Margin se ve afectado con el line-height
  • Entre dos objetos se computa el margen mayor

Más paragraphs

A esta altura conviene ver si se repiten colores. En tal caso usaremos el mismo color para todos los Headers + Paragraphs (por ahora copiando y pegando). Nos ponemos a estilar el primer paragraph

Una vez estilado el primer paragraph vamos con el siguiente paragraph dentro de otro componente.

El siguiente paragraph vemos que tiene un estilo totalmente diferente a los paragraphs normales, entonces le damos una clase y lo estilamos usando el selector ">".

Ya que tengamos estilado el paragraph estilamos los márgenes desde los títulos a los paragraphs.

Trucos para estilar un anchor

Un Anchor tiene de especial que puede tener varios estados:

a:link
a:visited
a:hover
a:active

Uso del mismo CSS para varios selectores

Para acceder a varias clases a la vez usamos la coma ","

Ejemplo: Acceder a varios estados del anchor dentro de la case testimony

.testimony > a,
.testimony > a:hover,
.testimony > a:visited,
.testimony > a:link,
.testimony > a:active,{
    color: #626262;
}

Reducción de Repetición

En cuanto ves que están copiando muchas veces colores / margenes etc. date cuenta que deberías estar no repitiéndote. Veremos que con SASS es fácil quitar repeticiones.

Reseteando

Vemos en nuestro css que se repite muchas veces font-family: sans serif, entonces deberíamos cambiar el font-family por defecto de nuestro navegador.

body {
  font-family: sans-serif;
}

Por ejemplo para font-weight no podemos usar el método anterior ya que el propio navegador sobreescribe el valor del H3 dentro del Body.

Selector Universal *

Para el font-weight podriamos usar el selector universal, pero tampoco es recomendable porque se sobreesribirían TODOS los elementos de la página. Puede tener implicaciones por ejemplo en el rendimiento.

Standard Color Palette

Vemos que estamos usando varios colores en nuestro proyecto. Vemos que los grises del paragraph y los headers son MUY parecidos. Entonces muchas veces podemos asumir que el color usado en estos es el mismo (y que en realidad fue un error del diseñador que vamos a asumir). Hacer eso hará nuestro código mucha más manejable en el futuro.

Valores por defecto

No deberíamos usar el Selector Universal ya que el propio navegador aplica estilos por defecto que nos pueden ahorrar mucho trabajo en el futuro. Es mejor poner por decto valores para el "body" y a continuación para otro elementos específicos.

body {
    font-family: sans-serif;
    color: #626262;
}
h1, h2, h3 {
    font-weight: 100;
}
p {
line-height: 170%
}

CSS Reset

Hay varias herramientas para resetear css para hacerlo compatible multiplataforma.

Ej.) Eric Meyer's Reset CSS 2.0

Universal Selector Reset

link: https://cssreset.com

* {
	margin: 0;
	padding: 0;
}

Eso hace que para todo navegador vamos a tener el mismo margin y padding. Eso significa que para cada elemento vamos a necesitar definir el padding y margin de forma manual.

Eric Meyer's Reset

Link Código Fuente: https://meyerweb.com/eric/tools/css/reset/

Aplica a un montón de elementos el siguiente estilo:

	margin: 0;
	padding: 0;
	border: 0;
	font-size: 100%;
	font: inherit;
	vertical-align: baseline;

A elementos de HTML 5 aplica display:block para que funcionen en navegadores antiguos.

Aplica un line-height por defecto al body ya que dicho valor cambia mucho entre uno y otro navegador.

Quita estilos a listas de tipo ol y ul.

También quita estilos a otros elementos.

Pros y Contras de usar Resets

Pros: Eliminar CSS por defecto, no usar elementos por su estilo, compatibilidad entre navegadores Cons: Necesitas conocer todas las propiedades css

Normalize.css

Archivo Css que va ser interpretado por el navegador. Si vimos que los resets dejan todo a cero, el normalize lo que hace es solo modificar algunos estilos. El archivo normalize siempre es mas grande que el de reset. El normalize da soporte a navegadores antiguos. Muchas empresas usan normalize.css

Instalación de Normalize.css

Ver 05-Normalize

Necesitamos el normalize.css y simplemente lo importamos arriba del todo en nuestro html. Verás que ciertos márgenes que te creaba el navegador por defecto han desaparecido. Habrá sentencias que ya no necesites aplicar, por ejemplo la font al body ahora se aplica al html.

Package Manager

Es bueno usarlo para gestionar versiones / dependencias. Usaremos "Bower" basado en "Node". Bower es un package Manager para Herramientas de Frontend.

Instalación de Bower (ya no se debe usar)

https://bower.io/#install-bower

Se instala con npm (node package manager)

npm install -g bower

Alternativamente deberíamos mejor usar webpack https://webpack.js.org/

Instalación de paquetes con Bower

Ver 06-Bower

Ejemplo: bower install normalize.css para instalar última versión de normalize.css

Al ejecutarlo nos instala a parte de otros este fichero: normalize/.bower.json

En dicho fichero se encuentra la versión usada del paquete

Sobre versiones

Ejemplo: 2.3.4 donde 2 es la versión (si cambia API) donde 3 es el update (nuevas funciones, no cambia API) donde 4 es el parche (solo deberia arreglar cosas)

Creación del bower.json file

Ahí metemos las dependencias de nuestro proyecto. Para crearlo hacemos bower init, nos irá preguntando cosas para crear el fichero:

{
  name: '06-Bower-Test',
  authors: [
    'Pierre Germain'
  ],
  description: 'testing bower',
  private: true,
  ignore: [
    '**/.*',
    'node_modules',
    'bower_components',
    'test',
    'tests'
  ],
  dependencies: {
    'normalize.css': '^8.0.0'
  }
}

Bower y versiones semánticas

https://github.com/npm/node-semver#x-ranges-12x-1x-12-

Sobre versiones: https://github.com/dbrock/semver-howto

"1.3.2" igual a 1.3.2

">=1.3.2" mayor o igual a 1.3.2
"<1.3.2" menor que 1.3.2

// * es nuestro joker
"1.3.*" Mayor o igual que 1.3.0, menor que 1.4.0

// ~ Permite al último digito especifiado aumentar
"~1.3.2" Mayor o igual que 1.3.2 y menor que 1.4.0
"~1.3" Mayor o igual que 1.3.0 y menor que 2.0.0

// ^ No permite cambiar de version mayor pero si de versión intermedia
"^1.3.2" Mayor o igual que 1.3.2 y menor que 2.0.0
"^0.3.2" Mayor o igual que 0.3.2 y menor que 0.4.0 (Al no ser que la versión mayor sea mayor que 0)

Compatibilidad de Navegadores

www.caniuse.com

Un porcentaje de un 90% para arriba es brutalmente bueno

Polyfills

En JS podemos usar Polyfills para hacer compatible nuevas funcionalidades para navegadores antiguos.

Para CSS tenemos Houdini.

  • Sirve para tener acceso al engine del CSS, al engine de del navegador. Wow!

Unidades CSS

Relativo vs. Absoluto

Los pixeles son absolutos. Los relativos se basan sobre los absolutos. Es bueno usar medidas relativas cuando sabemos que estas van a cambiar si cambia la relacionada absoluta. Por ejemplo el line-height depende directamente del font-size, entonces es bueno usar porcentajes en en lineheight.

Em's

Se calcula basado en el elemento padre. Un em equivale a 100%.

Rem's

Se calcula basado sobre el tamaño del navegador.

Ejemplo: Cálculo de em's

Tamaño 100% = 14px Si queremos 16px hacemos 16/14 = 1.14 Si queremos 12px hacemos 12/14 = 0.85

Al ser medio complicadillo usar rem's se aconseja usar pixeles y que hay un proceso posterior que traduzca los pixeles en rem's

Uniteless

Cuando sea posible es mejor usar uniteless numbers ya que dan menos errores al reordenar elementos en el markup.

Por ejemplo es mejor usar: line-height: 1.1 que line-height: 10%

Sass

Ayuda a usar lógica más avanzada que en CSS usando nombre de variables y eleminando repetición.

Sass vs. Less

Sass es el más usado por ahora en el mundo de Drupal.

Instalación

Hay varias formas de instalarlo. Recomendamos usar la instalación por terminal.

Info sobre instalación: http://sass-lang.com/install En linux/nodejs hacemos npm install -g sass

Sintaxis Scss

Para compilar:

sass input.scss output.css

Lo bueno de usar sintaxis scss es que es compatible al 100% con la sintaxis css. Eso significa que podemos renombrar sin miedo un fichero css a scss.

Ver 06-Sass/*

Creación y uso de Variables

$gris-obscuro: #6D6D6D;
$gris-medio: #DADADA;
$gris-ligero: #e8e8e8;
$blanco: white;

luego para usarlo:

color: $gris-obscuro;

Comentarios en Sass

// Comentario de una línea
/* Comentario 
 de dos líneas
 */

Sass watch

Para compilado automático :)

sass --watch input.scss:output.css

Nesting vs. SMACSS

Con Sass podemos usar Nesting, que va un poco contra SMACSS, pero en muchos casos es preferible usar Nesting y a la hora de compilar se va a crear el SMACSS.

Ejemplo: En Css teníamos

.section_hero--alt {
  background-color: $light-gray;
  padding: 26px 121px;
}
.section_hero--alt > .section_hero-title {
  border-bottom-color: $light-gray;
}

Ahora en Sass se convierte a

.section_hero--alt {
  background-color: $light-gray;
  padding: 26px 121px;
  > .section_hero-title {
  border-bottom-color: $light-gray;
}

Componentes

Cada componente debe tener su propio fichero. Al principio de va dar huevo seguir eso, pero a largo plazo vas a ver que hacerlo así ganarás en mantenimiento del proyecto.

Organización de Proyectos con Sass

Uso del & en Sass con Smacss

El operador & en Sass nos permite usar SMACSS

Ejemplo:

En CSS:

.icon_box {
  background-color: #e8e8e8;
}
.icon_box-title {
  font-size: 26px;
}

En Sass:

.icon_box {
  background-color: #e8e8e8;
  &-title {
  font-size: 26px;
}

que nos genera el CSS correctamente anteponiendo el string .icon_box al -title tal cómo se había definido en el CSS.

Eficiencia

Es bueno echarle un ojo al CSS que te genera Sass para ver si es eficiente y correcto (sobre todo al principio)

Reducir repetición

Ejemplo: Anchor

En Css

.testimony-attribution > a,
.testimony-attribution > a:hover,
.testimony-attribution > a:visited,
.testimony-attribution > a:link,
.testimony-attribution > a:active {
  color: $dark-gray;
}

pasa a ser en Sass

.testimony {
 &-attribution {
 > a {
   color: $dark-gray;
   &:hover, &:visited, &:link, &:active {
    color: $dark-gray;
   }
 }
}

con la ventaja de poder ir metiendole mas css entremedias.

Compilar directorios enteros

sass --watch sass:css

Partials

Vamos a crear components

Ejemplo:

si tenemos la clase .section_hero-title {(...)} entonces creamos el fichero: section_hero-title.scss

Si queremos que el fichero sea un partial (es decir que no sea compilado de forma automatica con el comando watch) entonces lo ponemos un underscore al principio: _section_hero-title.scss Eso hará que no sea compilado de forma automática sino que tenga que ser importando desde otro fichero scss. Lo bueno de esto es que el fichero css compilado puede tener varios componentes a la vez. Cargar un solo fichero css desde el navegador es menos pesado que tener que cargar varios ficheros css a la vez.

Para importar un partials lo hacemos sin el underscore y sin la extención.

@import "components/section_hero-title";

Organización de ficheros

  • Metemos en el fichero variables las variables (fonts, colores)
  • Metemos en el fichero base los elementos por defecto (h1, etc.
  • Usamos tantas componentes cómo sean necesarios

Una vez organizado el fichero styles.scss se nos puede quedar super minimalista:

@import "variables";
@import "base";

@import "components/section_hero-title";
(...)

CSS Source Maps

Ayuda para inspeccionar css generado por sass.

Sass Globbing: Importación automática de un directorio con componentes

Hay una extención llamada Sass Globbing que nos lo permite :)

Si lo instalas puedes importar componentes así:

@import "components/*";

Instalar extensiones sass: Ejemplo de Sass Globbing

Ejemplo: Instalar la extención Sass Globbing. Ver: https://github.com/chriseppstein/sass-globbing Ver: 08-Sass/*

Si te fijas para instalarlo hay que hacer: gem install sass-globbing, en este caso gem es el manejador de ruby que ya deberías tener instalado.

Una vez instalado podemos ahora ejecutar sass -r sass-globbing --watch sass:css para hacer uso del sass-globbing

Ojo con el uso del Sass Globbing

Ojo con usar Sass Globbing ya que ya no tendremos el poder de elegir el orden en el que se compilan nuestras fuentes. Pero si los componentes están bien realizados no debería importarte el orden.

Ventajas y Desventajas de usar SASS

Ventajas: Poder usar Lógica, no tener que usar Repeticion, uso de Variables, libertad en tu Estructura

Desventajas: Dependencia del Software, Dependencias externas

Más Info sobre Sass

Guía Rápida de Sass Documentación de Sass

Compass y Sass

Es importante saber que no hace falta usar compass para usar sass

Mapa de Herramientas Frontend

Node (con NVM) -- para --> Bower (con Grunt/Gulp y sus plugins)
Ruby (con RVM) -- para --> Sass (con Sass Extensions (con Bundler)

donde NVM, RVM y Bundler se usan como manejador de versiones.

Uso de Bundler cómo manejador de Versiones

Ver 09-Bundler/Gemfile

Bundler es similar a Bower.

Para instalarlo hacemos gem install bundler. También vamos a necesitar el entorno de desarrollod de ruby: sudo apt-get install ruby-dev ruby-full

En nuestro proyecto tendremos un fichero llamado Gemfile que nos mantiene las versiones de nuestro software

Para ver las versiones que tenemos instaladas en nuestro sistema podemos hacer gem list

Instalar software con bundle

Una vez creado nuestro Gemfile podemos ejecutar bundle install

Una vez instalado (usando bundle install) se genera el fichero Gemfile.lock de forma automática que nos indica que versiones del software se han instalado. Con el lock file tenemos total control sobre las versiones instaladas, en cambio con el BundleFile nada mas indicamos la compatibilidad de nuestro proyecto

Ejecutar software configurado con bundle

En vez de ejecutar sass -r sass-globbing --watch sass:css que ejecutaríá nuestro software global, ahora ejecutaríamos bundle exec sass -r sass-globbing --watch sass:css que ejecutaría nuestro software local del projecto.

Aquí un ejemplo que demuestra que se pueden usar varias versiones de Sass:

$ sass -v
Ruby Sass 3.5.7
$ bundle exec sass -v
Ruby Sass 3.5.6

Versiones de Software

En el siguiente enlace se muestra la sintaxis para las versiones (en bundler es un poco diferente) https://bundler.io/gemfile.html (buscar '2.0')

Una vez actualizado el bundle file para actualizar el sotware local haríamos bundle update

Footer

Ver 10-Footer/*

  • Existe el tag para footer que por defecto tiene un display block que ocupara todo el ancho de la página.
  • Para el copyright podemos usar el código HTML &copy;
  • Si usas ya no debería aparecer en el contenido del Screen Reader
  • No tiene sentido aplicar estilo al <footer> directamenete ya que se pueden usar <footer> dentro de otros elementos (por ejemplo artículos)
  • Lo normal es aplicar una clase al footer y aplicar los estilos a dicha clase.
  • Para cada parte de nuestro footer podemos usar una clase especial usando SMACS (por ejemplo site_footer-copyright).

Sass Cascading

  • Siempre que puedas usa el "child selector >" ya que es más eficiente que el selector " " en blanco que buscará también hijos de hijos.

Sass Variables y Scope

En versiones recientes de Sass podemos usar

p {
    $margin: 3px;
    margin-top: $margin;
    margin-bottom: $margin;
}

y sólo afectaría a nuestro

ya que se ha definido dentro del mismo

Si queremos afectar a todo el CSS usaríamos la palabra clave global

p {
    $margin: 3px !global;
    margin-top: $margin;
    margin-bottom: $margin;
}

Navegación

  • No deberíamos (quizás) usar Listas para navegaciones.

Elemento

  • Para cada navegación vamos a usar un con una clase especial usando SMACS.
  • Usando padding podemos aumentar el clickable area de los anchors.
  • Usando margin no agrandamos el clickable area y podemos hacer que los links esten separados uno de los otros.

Margen Vertical vs. Margen Horizontal

Es importante saber que:

  • En Vertical siempre se toma el margen mayor
  • En Horizontal se acumulan los margenes (se suma el margen del elemento derecho e izquierdo)

Uso de Márgenes con Em's en vez de Pixeles

  • Una manera de usar márgenes en Em's es primero usar Pixeles y a continuación convertirlo a Em's.
  • Así los márgenes se irán adaptando relativos al tamaño de la fuenta.
  • En el caso de navegaciones es normal usar em's, no tanto usar porcentajes.
Ejemplo:
 - Estamos usando un márgen de 10px
 - La fuenta 1em equivale a 16px (es el defecto del navegador web)
 - Entonces tenemos que usar un márgen de 10/16 = 0.625em
 - En Sass podemos usar la menclatura: (10/16) + em;
 
 Usando Variables en Sass quedaría así
 
 $default-font-size: 16
 margin: (10/$default-font-size) + em;
 

Sass Functions y Mixin

Ver 11-Functions/*

  • Un mixin devuelve una regla css.
  • Una función devuelve un valor.
  • Es habitual dejar el fichero de funciones en el fichero _functions.scss

Sintaxis Mixin:

@mixin myMix($num) {
  padding: $num;
}

.myClass {
  @include myMix(10px);
}

  • En el caso de Function siempre se devuelve un valor.

Sintaxis Function

@function myF($n,$m){
  @return $n + $m;
}

.myClass {
  padding: myF(6px,4px);
}

Valores por defecto Arguments

Ejemplo:

@function myF($arg1, $arg2:5) {
  @return (...)
}

En este caso arg2 toma el valor 5 si no se le pasa ningún valor

Css y Sass Avanzado

Em's vs Rem's

  • Para un slider tiene más sentido usar Rem's que Em's. Así los tamaños están definidos en base al elemento padre y no tanto en base al elemento actual.

Aquí todo un post al respecto

https://webdesign.tutsplus.com/es/tutorials/comprehensive-guide-when-to-use-em-vs-rem--cms-23984

  • Una vez definido el font size ya podemos usar em's para los margenes

  • Para tamaños de fuente Padres es muy normal usar "Rem's" en vez de "Em's"

  • A veces es mejor calcular directmente para los margenes los Em's a ser usados en vez de usar una función.

  • Los bordes no solemos designarlos con em's o rem's

  • Básicamente si es posible definir un fichero padre base para los tamaños todos de forma relativa.

Bordes Horizontales

  • Lo lógico es que no apliques el borde al primer elemento sino al segundo en caso de existir.
  • Aplicas un margen inferior al elemento superior
  • Aplicas un padding superior al elemento inferior
  • Para controlar el ancho puedes usar width con unidades rem.
  • Si usas un ancho fijo y quieres tener el contenido centrado tendrás que usar margin-left y margin-right a auto.

Header

  • Para tu navegación usa
    • Para separar elementos del header usar div's (no sections)
    • En SMACS se usa is-active para los elementos activos
    • Los necesitan display: inline-block

    Vendor Prefixes

    • Para especializarse en navegadores viejos o hacer estilos propios para cada uno usar:
    -moz-*
    -webkit-*
    

    Autoprefixes

    • Se pueden usar @mixin's en Sass que hacen esta tarea manualmente
    • Pero usando herramientas tipo Grunt/Gulp/Compass podemos automatizar los Prefixes

    Botones

    • Un botón debería ser un component independiente.
    • Recuerda que si el botón es un tendrás que aplicarle un display block o inline-block.
    • Podemos usar funciones Sass lighten() y darken() para cambiar colores (por ejemplo para bordes)
    • Para usar otros botones similares usaríamos otra vez SMACS : class="button button--pill"

    Colores RGBA

    • Son colores compuestos por red, green, blue y alpha (transparencia)
    • Para aplicar una sombra es mejor aplicar:
    text-shadow: 1px, 1px, 1px, rgba(0,0,0,0.3);
    

    Botones con bordes redondeados

    • Usaremos la clase .button con una nueva subclase .button--pill
    • Al subcomponente .button-pill le pondremos el nuevo border-radius

    Sobre Tipografía

    Hasta aquí habrás aprendido todo lo immportante hasta tipografía :)

    (The End of T11)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published