Usar el CSS del futuro ya no es un problema, gracias a esta herramienta PostCSS que nos ayuda a transpilar el CSS del futuro a un CSS que es soportado por los navegadores.
Es una herramienta para transformar estilos mediante plugins de JavaScript
(*) Repositorio de curso PostCSS: https://github.com/LeonidasEsteban/platzi-video-postcss
- Requisitos:
- Tener instalado NodeJS
- Para empezar debemos crear un archivo
package.json
inicial rápido:
npm init -y
- Ahora tenemos que instalar el postcss-cli en el entorno de trabajo y no global.
npm install postcss-cli --save-dev
- Para ejecutar el comando en el entorno de trabajo ejecutamos:
npx postcss-cli --version
(*) Documentación PostCSS CLI: https://github.com/postcss/postcss-cli
Los comandos del PostCSS se encuentran en el Repositorio Oficial
- Para transformar un archivo en ser ejecuta el siguiente comando:
npx postcss src/css/home.css -o dist/css/home.css
-
La primera ruta indica el archivo base en PostCSS
-
-o
indica la salida -
La segunda ruta es donde se guardara el archivo transformado
- Transformar un ves que se realice un cambio:
npx postcss src/css/home.css -o dist/css/home.css -w
- [
-w
|--watch
] revisa los cambios
- Uso de Plugins de PostCSS:
npx postcss src/css/home.css -o dist/css/home.css -w -u
- [
-u
|--use
] uso de plugins de PostCSS
- Cambiar la ruta en nuestro
index.html
al archivo transformado.
<link rel="stylesheet" href="dist/css/home.css" />
Todo lo que vamos a hacer con PostCSS probablemente sea instalar plugins, es cierto que puedes crear nuevos plugins y vamos a ver como se hace, pero es posible que lo que quieres hacer ya este hecho, para revisar si ya existe puedes visitar la pagina www.postcss.parts
- Instalaremos autoprefixer:
npm install --save autoprefixer
- Para ejecutar el plugin:
npx postcss src/css/home.css -o dist/css/home.css -w -u autoprefixer
- Archivo de Configuración
Ahora para tener un control de los plugins crearemos un archivo de configuración llamado:
postcss.config.js
module.exports = {
plugins: [
require("autoprefixer")({
grid:true
})
]
}
Para este plugin las opciones de configuración son las siguientes: Opciones autoprefixer
y finalmente para ejecutar:
npx postcss src/css/home.css -o dist/css/home.css -w
(*) Para deshabilitar el autoprefixer en cierto estilos podemos aplicar lo siguiente:
/* autoprefixer: off */
a {
transition: 1s; /*autoprefixer actua*/
}
b {
/* autoprefixer: off */
transition: 1s; /*autoprefixer ignora*/
}
Es el plugin para usar el sintaxis mas moderno de CSS y aplicarlo hoy en día.
- Instalaremos postcss-preset-env
npm install postcss-preset-env --save-dev
- Archivo de Configuración
Ahora para tener un control del
plugin
agregamos:
module.exports = {
plugins: [
require("postcss-preset-env")({
autoprefixer: {
grid: true,
},
browsers: [
"last 2 version",
],
stage: 1,
features: {
'nesting-rules': true
}
})
]
}
Las opciones de configuración son las siguientes: Opciones postcss-preset-env
y finalmente para ejecutar:
npx postcss src/css/home.css -o dist/css/home.css -w
Dentros de las nuevas caracteristicas tenemos:
Las variables se declaran de la siguiente manera:
Declaración:
:root{
--darkColor: #15192a;
}
Uso:
aside{
background-color: --darkColor;
}
Nos sirve incluir variables con bloques de código css:
Declaración:
:root{
--button: {
color: white;
padding: 5px 10px;
background-color: #2d2d2d;
};
}
Uso:
.btn{
@apply --button;
}
Instalar:
npm install --save postcss-apply
Agregar en el config:
module.exports = {
plugins: [
require("postcss-apply"),
require("postcss-preset-env")({
autoprefixer: {
grid: true,
},
browsers: [
"last 2 version",
],
stage: 1,
features: {
'nesting-rules': true,
'color-functional-notation':false,
}
})
]
}
Declaración:
:root{
--button: {
color: white;
padding: 5px 10px;
background-color: #2d2d2d;
};
}
Uso:
.btn{
@apply --button;
}
Nos sirve para realizar calculos de
medida entre (px
, %
, em
, etc
).
Para usar calc
:
aside{
width: calc(100%-100px);
}
Para controlar los mediaq queries tenemos:
@custom-media:
Es la manera de personalizar o asignar un alias a los media query.
Ejemplo:
@custom-media --extra-small (width < 480px);
@custom-media --small screen and (width < 768px);
@custom-media --medium screen and (width >= 768px);
@custom-media --large screen and (width >= 1024px);
Al momento de usar el media query lo haríamos asi:
@media (—extra-small){ propiedades css }
Para trabajar con las imagenes retina,
se puede utilizar la propiedad:
image-set()
background-image: image-set(url('../../src/images/platzi-video.png') 1x, url('../../src/images/platzi-video-2x.png') 2x, url('../../src/images/platzi-video-3x.png') 300dpi);
Para usar las nuevas funciones de los colores podemos usar los siguientes:
Sintaxis:
background: color( color, alpha, contrast);
Uso:
background: color( black, alpha(50%), contrast(30%));
Sintaxis:
background: color-mod( color alpha contrast);
Uso:
background: color-mod( black alpha(50%) contrast(30%));
Sintaxis:
background: hwb(hue [0 | 360], whiteness [0% | 100%], blackness [0% | 100%], alpha [ 0 | 1]);
Uso:
background: hwb( 100, 0%, 0%, 1);
Instalar:
npm install --save postcss-color-hwb
Agregar en el config:
module.exports = {
plugins: [
require("postcss-apply"),
require("postcss-color-hwb"), //added
require("postcss-preset-env")({
autoprefixer: {
grid: true,
},
browsers: [
"last 2 version",
],
stage: 1,
features: {
'nesting-rules': true,
'color-functional-notation':false,
}
})
]
}
Sintaxis:
background: hwb(hue [0 | 360], whiteness [0% | 100%], blackness [0% | 100%], alpha [ 0 | 1]);
Uso:
background: hwb( 100, 0%, 0%, 1);
Los selectores personalizados se los realiza de la siguiente manera:
Declaración:
@custom-selector :--checkeable .checkbox-label, .radio-label;
Uso:
:--checkeable {
/* tus estilos */
}
Nos permiten seleccionar clases de una manera mucho mejor.
:any-link pseudo-class
: Nos permite seleccionar cualquier enlace dentro de un selector.
.myPlaylist :any-link:hover{ transform: scale(1.1)}
:matches pseudo-clases
: Nos permite seleccionar las coincidencias dentro de un selector.
.myPlaylist-item:matches(:last-child, :nth-of-type(3), :first-child){background: color(red l(70%))}
:not pseudo-class
: Nos permite seleccionar lo que no coincida con las propiedades que le pase.
.myPlaylist-item:not(:last-child, :nth-of-type(3), :first-child){background: color(blue l(70%))}
-
postcss-import
Para utilizar los imports en postcss.npm install postcss-import --save
-
postcss-font-magician
Para importar fuentes, con @font-facenpm install postcss-font-magician --save
-
stylelint
Para revisar y controlar que estes escribiendo bien tus estilos cssnpm install stylelint --save-dev
-
css-mqpacker
Para agrupar los mediaqueries y no esten por todo lado.npm install css-mqpacker --save-dev
-
cssnano
Para minificar el código cssnpm install cssnano --save-dev