Cristian Aliaga
drupal.org/u/crzdev - @AliagaDev
Front-end developer
¿Qué consigue el desarrollador, el administrador/gestor de contenidos de la web y el usuario final?
Hoja de estilos ligera. |
Implementación fácil. |
Reinventar la rueda. |
Mantenimiento fácil. |
Repertorios de componentes. |
Ahorra tiempo. |
... |
Hoja de estilos ligera. |
Implementación fácil. |
Reinventar la rueda. |
Mantenimiento fácil. |
Repertorios de componentes. |
Ahorra tiempo. |
... |
Hoja de estilos ligera. |
Implementación fácil. |
Reinventar la rueda. |
Mantenimiento fácil. |
Repertorios de componentes. |
Ahorra tiempo. |
... |
Hoja de estilos ligera. |
Implementación fácil. |
Reinventar la rueda. |
Mantenimiento fácil. |
Repertorios de componentes. |
Ahorra tiempo. |
... |
Hoja de estilos ligera. |
Implementación fácil. |
Reinventar la rueda. |
Mantenimiento fácil. |
Repertorios de componentes. |
Ahorra tiempo. |
... |
Hoja de estilos ligera. |
Implementación fácil. |
Reinventar la rueda. |
Mantenimiento fácil. |
Repertorios de componentes. |
Ahorra tiempo. |
... |
Facilidad para generar nuevas secciones. |
Contenido basado en componentes complejos ya preparados. |
Independencia parcial del equipo de desarrollo. |
Ahorra tiempo. |
... |
Facilidad para generar nuevas secciones. |
Contenido basado en componentes complejos ya preparados. |
Independencia parcial del equipo de desarrollo. |
Ahorra tiempo. |
... |
Facilidad para generar nuevas secciones. |
Contenido basado en componentes complejos ya preparados. |
Independencia parcial del equipo de desarrollo. |
Ahorra tiempo. |
... |
Facilidad para generar nuevas secciones. |
Contenido basado en componentes complejos ya preparados. |
Independencia parcial del equipo de desarrollo. |
Ahorra tiempo. |
... |
Mejoramos la experiencia de usuario. |
Facilitamos el uso. |
Evitamos bugs de tematizado. |
... |
Mejoramos la experiencia de usuario. |
Facilitamos el uso. |
Evitamos bugs de tematizado. |
... |
Mejoramos la experiencia de usuario. |
Facilitamos el uso. |
Evitamos bugs de tematizado. |
... |
¿Qué son?
<span class="btn btn--secondary">Más información</span>
.btn {
display: inline-block;
padding: .9em 2em;
text-align: center;
border: 0;
border-radius: 3px;
}
.btn--secondary {
background: none;
color: #fff;
border: 3px solid #fff;
font-size: .75em;
text-transform: uppercase;
font-weight: bold;
}
<ol class="list-highlight">
<li>Ac iaculis ut</li>
<li>Eu velit massa</li>
<li>Sit turpis tincidunt</li>
<li>Vestibulum in nisl</li>
<li>Magna sed euismod</li>
</ol>
.list-highlight {
padding: 0;
list-style: none;
...
}
ol.list-highlight {
counter-reset: counter;
}
ol.list-highlight > li {
position: relative;
...
}
/**
* Implements hook_styleguide().
*/
function custom_styleguide() {
$items = array(
'em' => array(
'title' => 'Emphasis',
'tag' => 'em',
'content' => styleguide_word(3),
),
);
return $items;
}
Nos permite generar css de una forma rápida, ágil y cómoda. |
Preprocesado, genera .css a partir de .scss |
Uso de variables. |
Uso de mixins. |
Anidación de selectores. |
Herencia de estilos. |
Operadores y funciones. |
Funciones (también personalizadas). |
$xl: 880px;
$xxl: 1170px;
$xxxl: 1600px;
$color-primary: #512c15;
$color-secondary: white;
@mixin transform($data) {
-webkit-transform: $data;
-moz-transform: $data;
-ms-transform: $data;
-o-transform: $data;
transform: $data;
}
div.translate {
@include transform(translate(0, -50%));
}
.list-highlight {
a {
color: $color-primary;
}
}
.list-highlight a {
color: #512c15;
}
.list-highlight {
padding: 0;
list-style: none;
...
&ol {
counter-reset: counter;
& > li {
position: relative;
...
}
}
a {
...
}
}
%blue {
color: blue;
}
a {
@extend %blue;
}
/* 880px + 20px */
@include breakpoint($xl + 20px) {
...
}
/* #e00 */
a {
color: lighten(#800, 20%);
}
@function my-calculation-function($some-number, $another-number){
@return $some-number + $another-number
}
.my-module {
padding: my-calculation-function(10px, 5px);
}
sass input.scss output.css
COMPASS, GULP, GRUNT...
compass watch
Guía de estilo.
Aplica a elementos únicamente. |
Selectores de elementos. |
Selectores no basados en clases ni IDs. |
No debería ser necesario el uso de !important. |
Ejemplos: body, header, headings (h1, ..., h6), enlaces (a), etc. |
body, form {
margin: 0;
padding: 0;
}
a {
color: #039;
}
a:hover {
color: #03F;
}
Contienen los elementos de la web. |
Se pueden categorizar como "major" o "minor". |
Normalmente asociados a un selector ID o clase. |
#header, #article, #footer {
width: 960px;
margin: auto;
}
#article {
border: solid #CCC;
border-width: 1px 0 0;
}
Componente concreto de la web. |
Se posicionan dentro de un componente layout. |
Se diseña de forma aislada al resto de componentes. |
Se pueden reposicionar sin "romper" nada. |
Uso de selectores por clases CSS. |
Se evitan los selectores por IDs o de elementos. |
Clases sub-módulo para evitar !important. |
.btn {
display: inline-block;
padding: .9em 2em;
text-align: center;
border: 0;
border-radius: 3px;
}
Aumenta y sobreescribe el resto de estilos. |
Se aplican normalmente a reglas de layout o module base. |
Se pueden aplicar a reglas layout y/o módulos base. |
Pueden indicar una dependencia JavaScript. |
!important permitido. |
.btn {
display: inline-block;
padding: .9em 2em;
text-align: center;
border: 0;
border-radius: 3px;
}
.btn--secondary {
background: none;
color: #fff;
border: 3px solid #fff;
font-size: .75em;
text-transform: uppercase;
font-weight: bold;
}
Sirven para realizar variaciones de estilos sobre los componentes. |
Aplicamos en ficheros independientes. |
// in module-name.css
.mod {
border: 1px solid;
}
// in theme.css
.mod {
border-color: blue;
}
Representado por:
Cambio de nombre de clase, normalmente por js. |
Pseudo-clase. |
Media queries. |
<body>
<body class="push">
sass/
|- init/ |- components/
| |- _colors.scss | |- messages/
| |- ... | | |- _messages.scss
|- base/ |- layouts/
| |- _root.scss | |- layout-3col/
| |- ... | | |- _layout-3col.scss
|- states/
|- styles.scss
BEM (bloque, elemento, modificador)
BEM
/* Block */
.block
/* Element */
.block__elem
/* Modifier */
.block__elem--mod
BEM
/* Block */
.form
/* Element */
.form__submit
/* Modifier */
.form__submit--disabled
ckeditor.styles.js
if(typeof(CKEDITOR) !== 'undefined') {
CKEDITOR.addStylesSet( 'drupal',
[
{ name : 'Color primary', element : 'span', attributes: { 'class': 'color-primary' } },
]);
}
Seleccionamos en el perfil de ckeditor > CSS: "Usar ckeditor.styles.js del tema"
Añadimos en la barra de herramientas el botón de estilos ("Formatting styles")
Añadimos botón y configuramos el listado.
ckeditor.config.js
CKEDITOR.editorConfig = function( config ) {
config.templates_files = [ Drupal.settings.basePath +
'sites/all/themes/custom/themename/js/ckeditor.custom.templates.js' ];
};
CKEDITOR.addTemplates( 'default',
{
imagesPath: Drupal.settings.basePath + 'sites/all/themes/custom/themename/images/',
templates :
[
{
title:"Información básica",
description:"Información básica",
html:'INFORMACIÓN BÁSICA EDICIÓN
(ejemplo) 23ª edición
FINALIZACIÓN
(ejemplo) 11 de octubre de 2017
HORARIO
(ejemplo) Lunes a Jueves de 18:00 a 22:00
INICIO
(ejemplo) 07 de noviembre de 2016
DURACIÓN
(ejemplo) Un aña natural
'
},
]
});
Activamos en el perfil de ckeditor > Opciones avanzadas: "Load ckeditor.config.js from the theme path"
Añadimos en la barra de herramientas el plugin de plantillas ("Templates")
Un buen diseño compuesto por:
Guía de estilo. |
Componentes incluídos en la guía. |
Componentes reutilizados en las diferentes pantallas. |
Layouts compatibles con los componentes. |
Portada con teaser diferentes. |
Layouts entre secciones diferentes. |
Tamaños de fuente al detalle. |
Elementos que están ahí porque "caben". |
Evitaremos (siempre que podamos) el tematizado modo revista. |
... |