Desarrollo Frontend
Preprocesadores
Miguel Cantillana F
<miguel@ewok.cl>
Pre Procesadores CSS
¿Por que?
- CSS es repetitivo.
- CSS no tiene variables.
- Es Inflexible, y complicado de reusar.
- Sitios web complejos se vuelven complicados de mantener.
Sass
Syntactically Awesome StyleSheets
- 100% compatible con CSS3.
- Permite el uso de variables, anidamiento de estilos y mixins.
- Permite el uso de elementos básicos de programación.
- Genera archivos CSS bien formateados y permite configurar su formato.
Compiladores
Uso de Sass
Anidación
#main p {
color: #00ff00;
width: 97%;
.redbox {
background-color: #ff0000;
color: #000000;
}
}
Produce:
Sass
#main p {
color: #00ff00;
width: 97%;
}
#main p .redbox {
background-color: #ff0000;
color: #000000;
}
Anidación
#main {
width: 97%;
p, div {
font-size: 2em;
a { font-weight: bold; }
}
pre { font-size: 3em; }
}
Produce:
Sass
#main {
width: 97%;
}
#main p, #main div {
font-size: 2em;
}
#main p a, #main div a {
font-weight: bold;
}
#main pre {
font-size: 3em;
}
selectores padre
a {
font-weight: bold;
text-decoration: none;
&:hover { text-decoration: underline; }
body.firefox & { font-weight: normal; }
}
Produce:
Sass
a {
font-weight: bold;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
body.firefox a {
font-weight: normal;
}
Propiedades anidadas
.funky {
font: {
family: fantasy;
size: 30em;
weight: bold;
}
}
Produce:
Sass
.funky {
font-family: fantasy;
font-size: 30em;
font-weight: bold;
}
Variables
$width: 5em;
/* Ahora ya puedes utilizar la variable
llamada $width como valor de cualquier
propiedad CSS: */
#main {
width: $width;
}
Produce:
Sass
#main {
width: 5em;
}
La regla @import
La regla @media
.sidebar {
width: 300px;
@media screen and (orientation: landscape) {
width: 500px;
}
}
Produce:
Sass
.sidebar {
width: 300px;
}
@media screen and (orientation: landscape) {
.sidebar {
width: 500px;
}
}
La regla @extend
.foo {
color: red;
}
.bar {
@extend .foo;
}
.foo, .bar {
color: red;
}
La regla @extend
.error {
border: 1px #f00;
background-color: #fdd;
}
.seriousError {
@extend .error;
border-width: 3px;
}
Produce:
Sass
.error, .seriousError {
border: 1px #f00;
background-color: #fdd;
}
.seriousError {
border-width: 3px;
}
@mixin
@mixin large-text {
font: {
family: Arial;
size: 20px;
weight: bold;
}
color: #ff0000;
}
@mixin clearfix {
display: inline-block;
&:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
* html & { height: 1px }
}
Sass
@mixin sexy-border($color, $width) {
border: {
color: $color;
width: $width;
style: dashed;
}
}
Sass
@include
.page-title {
@include large-text;
padding: 4px;
margin-top: 10px;
}
p { @include sexy-border(blue, 1in); }
Sass
p {
border-color: blue;
border-width: 1in;
border-style: dashed;
}
Sass
Formato de salida
#main {
color: #fff;
background-color: #000; }
#main p {
width: 10em; }
.huge {
font-size: 10em;
font-weight: bold;
text-decoration: underline; }
El formato :nested
Formato de salida
#main {
color: #fff;
background-color: #000;
}
#main p {
width: 10em;
}
.huge {
font-size: 10em;
font-weight: bold;
text-decoration: underline;
}
El formato :expanded
Formato de salida
#main { color: #fff; background-color: #000; }
#main p { width: 10em; }
.huge { font-size: 10em; font-weight: bold; text-decoration: underline; }
El formato :compact
Formato de salida
#main{color:#fff;background-color:#000}#main p{width:10em}.huge{font-size:10em;font-weight:bold;text-decoration:underline}
El formato :compressed
Integración
var gulp = require('gulp');
var sass = require('gulp-sass');
gulp.task('styles', function() {
gulp.src('sass/**/*.scss')
.pipe(sass().on('error', sass.logError))
.pipe(gulp.dest('./css/'))
});
//Watch task
gulp.task('default',function() {
gulp.watch('sass/**/*.scss',['styles']);
});
http://ryanchristiani.com/getting-started-with-gulp-and-sass/
Ejercicio Sass
Actividad
Dado el siguiente repositiorio realizar lo siguiente:
- Realice un fork del repositorio
- Haga un clon del proyecto fork en su computador
- Reescriba la hoja css/style.css con sass, según lo revisado en clases. Como mínimo debe contener:
- Anidación
- Uso de variables
- Mixing
- @import
- Haga commit de los cambios y actualizar el repositorio en github
Recursos
- http://blog.escuelaweb.net/manejar-paquetes-cliente-con-bower/
- https://librosweb.es/libro/sass/
Pre procesadores CSS
By Miguel Cantillana
Pre procesadores CSS
- 466