SlideShare una empresa de Scribd logo
1 de 58
Descargar para leer sin conexión
{   OOCSS
    Poniendo OOrden en CSS
                                           }
      @janogarcia · http://janogarcia.es
OdiOCSS
 e
e OdiOCSS
Dí tú qué odias de CSS.
e
 ODIO
         0
Repetir una y otra vez
 los mismos estilos.
R OOCSS
Maximizar reusabilidad.
R OOCSS
Maximizar reusabilidad.




{ 1:1
      Relación estilos CSS VS elementos HTML



                            1:n
                             Maximizar relación
e
  ODIO
           2
Heredar estilos de una
manera impredecible.
CSS
      ENV
           ENE

6
               N    ADO
       selectores #id
       modificador!important
       estilos en línea
1+1=2
        OOCSS
 Comportamiento
   predecible.
e
  ODIO
            3
Crecimiento sin control,
     pesadilla de
   mantenimiento.
O OOCSS
Arquitectura modular.
O OOCSS
Arquitectura modular.




{
     Se basa en la creación de objetos CSS
      Reusables.
      Extensibles.
      Anidables.
{                 }
      Retoma el




    CONTROL
      con OOCSS
OOCSS
{ Modular. Escalable.
   Eficiente. Simple.
Semántico. Mantenible.
    OOCSS busca el equilibrio
                                }
{                              }
    Sintaxis estándar de CSS



OOCSS=CSS
¿Alguien lo usa?
{                           }
         Aprende los




    PATRONES
     y antipatrones OOCSS
Estructura Hoja de Estilos




          FRAMEWORK
           Reset             Normaliza las inconsistencias
                             entre navegadores.
           Base
                             Componentes reusables entre
           Grid              proyectos.
           Widgets
           Helpers



          THEME
           Widgets           Modulariza, construye tu sitio
                             a partir de componentes reusables
           Pages             a nivel de proyecto.
e    OOCSS
Patrón recomendado.
{
 Usa un Reset y un Base.
Estructura Hoja de Estilos > Reset y Base




          FRAMEWORK
           Reset                      Normalizan estilos entre navegadores,
                                      eliminando inconsistencias y estableciendo
           Base                       una base común.

           Grid                       Sin ellos no podríamos partir de una base
                                      conocida, nuestros estilos no tendrían un
           Widgets                    comportamiento predecible en los diferentes
                                      navegadores.
           Helpers
                                      Evitan el código repetitivo (DRY).

                                      Usa una ya existente: 960.gs, formalize.me,
                                      normalize.css, html5boilerplate, YUI... O crea
          THEME                       la tuya propia.
           Widgets
           Pages
Estructura Hoja de Estilos > Reset y Base




          FRAMEWORK
           Reset                      Normaliza estilos entre navegadores,
                                      eliminando inconsistencias y estableciendo
           Base                       una base común.




                      h
           Grid                       Sin ellos no podríamos partir de una base
                                      conocida, nuestros estilos no tendrían un


                                            DEMO
           Widgets                    comportamiento predecible en los diferentes
                                      navegadores.
           Helpers
                                      Evitan el código repetitivo (DRY).

                                      Usa una ya existente 960.gs, formalize.me,
                                      normalize.css, html5boilerplate, YUI... O crea
          THEME                       la tuya propia.
           Widgets
           Pages
e    OOCSS
Patrón recomendado.
{
 Usa Grids.
Estructura Hoja de Estilos > Grid




          FRAMEWORK
           Reset                    “Some years ago, I found CSS Framework like Blueprint
                                    to be a waste of time. I didn't want to clutter my HTML
           Base                     markup with non-semantic classes for handling the styling.
                                    Now I still don't think cluttering the HTML with span-6 pull-2
           Grid                     is the best thing that happened to CSS, but I found it much
                                    better than cluttering my CSS with endless overflow:hidden
           Widgets                  and float:left; margin-right:10px declarations.”
                                    http://www.pixelastic.com/blog/201:7-advices-to-start-using-oocss-as-a-coding-practice

           Helpers



          THEME
           Widgets
           Pages
Estructura Hoja de Estilos > Grid




          FRAMEWORK
           Reset                    O repites una y otra vez las reglas
                                    necesarias para crear layouts1 o abstraes esas
           Base                     reglas y las aplicas como clases2. Elige.
                                    1 float:left,margin-right:10px, overflow:hidden...
           Grid
                                    2 .grid-6, .grid-10, .push-1...
           Widgets
                                    Evitan el código repetitivo (DRY). Abstraen
           Helpers                  inconsistencias entre navegadores.

                                    Usa una ya existente: 960.gs, 978.gs, blueprint,
                                    YUI... O crea la tuya propia.
          THEME
           Widgets
           Pages
Estructura Hoja de Estilos > Grid




          FRAMEWORK
           Reset                    O repites una y otra vez las reglas
                                    necesarias para crear layouts1 o abstraes esas
           Base                     reglas y las aplicas como clases2. Elige.




                      h
                                    1 float:left,margin-right:10px, overflow:hidden...
           Grid
                                    2 .grid-6, .grid-10, .push-1...




                                        DEMO
           Widgets
                                    Evitan el código repetitivo (DRY). Abstraen
           Helpers                  inconsistencias entre navegadores.

                                    Usa una ya existente: 960.gs, 978.gs, blueprint,
                                    YUI... O crea la tuya propia.
          THEME
           Widgets
           Pages
e    OOCSS
Patrón recomendado.
{
 Crea Objetos reusables.
Estructura Hoja de Estilos > Widgets > Crea Objetos reusables




          FRAMEWORK                     1         2       3   4   5   6    7     8
           Reset                      “Build HTML from the component library. New pages
                                      should not generally require additional CSS.”
           Base                       - Nicole Sullivan



           Grid                       Crea una librería de componentes reusables para
                                      el proyecto o incluso independientes del proyecto.
           Widgets
                                      Los objetos son un conjunto de clases CSS
           Helpers                    relacionadas que responden a una funcionalidad
                                      determinada. Estos objetos deben ser reusables,
                                      extensibles y anidables.

                                      La clave está en identificar esos objetos y en
          THEME                       saber aprovechar la extensión y la composición.

           Widgets                    Evitan el código repetitivo (DRY). Maximizan la
                                      reusabilidad.
           Pages
                                      Itera, refactoriza!
Estructura Hoja de Estilos > Widgets > Crea Objetos reusables




          FRAMEWORK                     1         2       3   4   5   6    7     8
           Reset                      “Build HTML from the component library. New pages
                                      should not generally require additional CSS.”
           Base                       - Nicole Sullivan




                     h
           Grid                       Crea una librería de componentes reusables para
                                      el proyecto o incluso independientes del proyecto.


                                             DEMO
           Widgets
                                      Los objetos son un conjunto de clases CSS
           Helpers                    relacionadas que responden a una funcionalidad
                                      determinada. Estos objetos deben ser reusables,
                                      extensibles y anidables.

                                      La clave está en identificar esos objetos y en
          THEME                       saber aprovechar la extensión y la composición.

           Widgets                    Evitan el código repetitivo (DRY). Maximizan la
                                      reusabilidad.
           Pages
                                      Itera, refactoriza!
e    OOCSS
Patrón recomendado.
{
 Simplifica la cascada.
Estructura Hoja de Estilos > Widgets > Simplifica la Cascada




          FRAMEWORK                     1     2      3     4   5   6   7    8
           Reset                      Si la cascada no tiene un comportamiento
                                      predecible tus estilos tampoco lo tendrán, por
           Base                       lo que nunca podrán ser realmente reusables.

           Grid                       Di adiós a los selectores #id, a los estilos en
                                      línea y a las declaraciones !important. De lo
           Widgets                    contrario no conseguirás que tus estilos tengan
                                      un comportamiento predecible.
           Helpers



          THEME
           Widgets
           Pages
Estructura Hoja de Estilos > Widgets > Simplifica la Cascada > No #id




          FRAMEWORK                     1     2      3     4      5     6   7   8
           Reset                       2.1   No uses #id como selector
           Base                        Sólo puede haber uno en la página, impidiendo
                                       la reusabilidad y limitando la modularización
           Grid
                                       Singleton, no puedes crear varias instancias,
           Widgets                     no puede haber objetos extendidos o compuestos
                                       en la misma página: #objeto y #objeto.extendido
           Helpers
                                       Complican la especificidad y la cascada, tienen
                                       demasiado peso. No podremos crear reglas del
                                       mismo peso cuando combinemos objetos basados
                                       en .clase y en #id.
          THEME
                                       Úsalos únicamente en el HTML como hooks de
           Widgets                     JavaScript o para accesibilidad (formularios,
           Pages                       anclas...).
Estructura Hoja de Estilos > Widgets > Simplifica la Cascada > No #id




          FRAMEWORK                     1     2      3     4      5     6   7   8
           Reset                       2.1   No uses #id como selector
           Base                        Sólo puede haber uno en la página, impidiendo
                                       la reusabilidad y limitando la modularización




                      h
           Grid
                                       Singleton, no puedes crear varias instancias,


                                             DEMO
           Widgets                     no puede haber objetos extendidos o compuestos
                                       en la misma página: #objeto y #objeto.extendido
           Helpers
                                       Complican la especificidad y la cascada, tienen
                                       demasiado peso. No podremos crear reglas del
                                       mismo peso cuando combinemos objetos basados
                                       en .clase y en #id.
          THEME
                                       Úsalos únicamente en el HTML como hooks de
           Widgets                     JavaScript o para accesibilidad (formularios,
           Pages                       anclas...).
Estructura Hoja de Estilos > Widgets > Simplifica la Cascada > Ni estilos en línea ni !important




          FRAMEWORK                     1      2      3     4      5     6      7     8
           Reset                        2.2   Ni estilos en línea ni !important
           Base                        Úsalos únicamente para sobreescribir estilos de
                                       una hoja externa fuera de tu control (por ejemplo,
           Grid                        un widget externo de comentarios).
           Widgets                     Si estás usando estilos en línea o el modificador
                                       !important para sobreescribir estilos creados
           Helpers                     por tí es un claro síntoma de que algo va mal, te
                                       has cargado la cascada.


          THEME
           Widgets
           Pages
Estructura Hoja de Estilos > Widgets > Simplifica la Cascada > ¡Olvida la cascada!




          FRAMEWORK                     1     2      3     4      5     6      7     8
           Reset                       2.3   ¡Olvida la cascada!
           Base                       - Olvídate de tener que calcular la especificidad de
                                      los selectores.
           Grid
                                      - No dependas del orden del código fuente
           Widgets                    (cascada).
                                      - Usa valores absolutos para propiedades que se
           Helpers                    heredan (evita tight coupling con el HTML).

                                      Los estilos se deben heredar de una manera
                                      simple y completamente predecible. De esta
                                      manera tus objetos se comportarán de una forma
          THEME                       predecible, elegirás tus selectores con total
                                      seguridad, de una forma sencilla y sin sorpresas
           Widgets                    desagradables, ya que no habrá dependencias ni
                                      influencias desconocidas (loose coupling).
           Pages
Estructura Hoja de Estilos > Widgets > Simplifica la Cascada > ¡Olvida la cascada!




          FRAMEWORK                     1     2      3     4      5     6      7     8
           Reset                       2.3   ¡Olvida la cascada!
           Base                       - Olvídate de tener que calcular la especificidad de
                                      los selectores.




                      h
           Grid
                                      - No dependas del orden del código fuente
                                      (cascada).

                                             DEMO
           Widgets
                                      - Usa valores absolutos para propiedades que se
           Helpers                    heredan (evita tight coupling con el HTML).

                                      Los estilos se deben heredar de una manera
                                      simple y completamente predecible. De esta
                                      manera tus objetos se comportarán de una forma
          THEME                       predecible, elegirás tus selectores con total
                                      seguridad, de una forma sencilla y sin sorpresas
           Widgets                    desagradables, ya que no habrá dependencias ni
                                      influencias desconocidas (loose coupling).
           Pages
e    OOCSS
Patrón recomendado.
{
 Usa clases, no elementos.
Estructura Hoja de Estilos > Widgets > Usa clases, no elementos




          FRAMEWORK                    1     2      3     4       5   6   7   8
           Reset                      Usa clases para tus objetos CSS, evita usar
                                      elementos HTML en los selectores CSS.
           Base
                                      3.1 Nombra los elementos asignándoles una
           Grid                            clase. Los estilos serán más reusables, ya
                                           que no dependerán del markup (.title en vez
           Widgets                         de h1, h2...).

           Helpers                    3.2 No especifiques el elemento HTML al que es
                                           aplicado una clase CSS (sí: .miclase, no:
                                           div.miclase).

                                           Especificar el elemento al que es aplicado una
          THEME                            clase es redundante, innecesario y crea más
                                           dependencia entre la estructura HTML y el
           Widgets                         estilo CSS, obligándonos a modificar el CSS
                                           cada vez que modifiquemos la estructura
           Pages                           HTML (por ejemplo, al cambiar de ol a ul).
Estructura Hoja de Estilos > Widgets > Usa clases, no elementos




          FRAMEWORK                    1     2      3     4       5   6   7   8
           Reset                      Usa clases para tus objetos CSS, evita usar
                                      elementos HTML en los selectores CSS.
           Base
                                      3.1 Nombra los elementos asignándoles una




                     h
           Grid                            clase. Los estilos serán más reusables, ya
                                           que no dependerán del markup (.title en vez


                                           DEMO
           Widgets                         de h1, h2...).

           Helpers                    3.2 No especifiques el elemento HTML al que es
                                           aplicado una clase CSS (sí: .miclase, no:
                                           div.miclase).

                                           Especificar el elemento al que es aplicado una
          THEME                            clase es redundante, innecesario y crea más
                                           dependencia entre la estructura HTML y el
           Widgets                         estilo CSS, obligándonos a modificar el CSS
                                           cada vez que modifiquemos la estructura
           Pages                           HTML (por ejemplo, al cambiar de ol a ul).
e    OOCSS
Patrón recomendado.
{
 Minimiza los selectores.
Estructura Hoja de Estilos > Widgets > Minimiza los selectores




          FRAMEWORK                    1      2     3      4     5   6   7      8
           Reset                       4.1 Legibilidad: No definas selectores
                                           innecesariamente cualificados como .usuarios
           Base                            table thead tr th a, con .usuarios thead a es
                                           suficiente.
           Grid
                                           Evita sobre detallar cada nivel de la
           Widgets                         estructura HTML. En la mayoría de ocasiones
                                           basta con indicar el primer y último elemento.
           Helpers                         No definas elementos redundantes como
                                           tr th o ul li, bastaría con indicar th o li ya que
                                           no pueden estar contenidos por un padre
                                           diferente.
          THEME                        4.2 Rendimiento: El selector descendiente
                                           ” ” (espacio) es el que requiere un proceso
           Widgets                         más intensivo por parte del navegador,
                                           el hijo ”>” algo menos. Trata de limitar su
           Pages
                                           uso, por ejemplo, un máximo de 3 selectores
                                           simples.
Estructura Hoja de Estilos > Widgets > Minimiza los selectores




          FRAMEWORK                    1      2     3      4     5   6   7      8
           Reset                       4.1 Legibilidad: No definas selectores
                                           innecesariamente cualificados como .usuarios
           Base                            table thead tr th a, con .usuarios thead a es
                                           suficiente.




                      h
           Grid
                                           Evita sobre detallar cada nivel de la


                                           DEMO
           Widgets                         estructura HTML. En la mayoría de ocasiones
                                           basta con indicar el primer y último elemento.
           Helpers                         No definas elementos redundantes como
                                           tr th o ul li, bastaría con indicar th o li ya que
                                           no pueden estar contenidos por un padre
                                           diferente.
          THEME                        4.2 Rendimiento: El selector descendiente
                                           ” ” (espacio) es el que requiere un proceso
           Widgets                         más intensivo por parte del navegador,
                                           el hijo ”>” algo menos. Trata de limitar su
           Pages
                                           uso, por ejemplo, un máximo de 3 selectores
                                           simples.
e    OOCSS
Patrón recomendado.
{
 No dependas del contexto.
Estructura Hoja de Estilos > Widgets > No dependas del contexto




          FRAMEWORK                    1         2       3   4    5   6     7     8
           Reset                     “Separate container and content: Break the dependency
                                     between the container module and the content objects it
           Base                      contains.”
                                     - Nicole Sullivan

           Grid
                                     Los estilos de los objetos deben ser
           Widgets                   independientes del lugar que ocupen en la página:
                                     footer, sidebar, content... Si dependen de la
           Helpers                   estructura de la página no serán reusables fuera
                                     de ese contexto.

                                     No: .sidebar .last-comments {}
                                     Sí: .last-comments {}.
          THEME
                                     Ésto permitirá mostrar el widget en cualquier
           Widgets                   página y en cualquier parte de la misma. Incluso
                                     en otro proyecto, conociendo en todo momento
           Pages                     sus dependencias de estilo y cómo le afectará el
                                     nuevo contexto (herencia y namespaces).
Estructura Hoja de Estilos > Widgets > No dependas del contexto




          FRAMEWORK                    1         2       3   4    5   6     7     8
           Reset                     “Separate container and content: Break the dependency
                                     between the container module and the content objects it
           Base                      contains.”
                                     - Nicole Sullivan




                     h
           Grid
                                     Los estilos de los objetos deben ser


                                            DEMO
           Widgets                   independientes del lugar que ocupen en la página:
                                     footer, sidebar, content... Si dependen de la
           Helpers                   estructura de la página no serán reusables fuera
                                     de ese contexto.

                                     No: .sidebar .last-comments {}
                                     Sí: .last-comments {}.
          THEME
                                     Ésto permitirá mostrar el widget en cualquier
           Widgets                   página y en cualquier parte de la misma. Incluso
                                     en otro proyecto, conociendo en todo momento
           Pages                     sus dependencias de estilo y cómo le afectará el
                                     nuevo contexto (herencia y namespaces).
e    OOCSS
Patrón recomendado.
{
 No crees dependencias
 innecesarias entre objetos.
Estructura Hoja de Estilos > Widgets > No crees dependencias innecesarias entre objetos




          FRAMEWORK                    1     2     3      4     5     6     7      8
           Reset                     No agrupes selectores de distintos objetos,
                                     creando dependencias innecesarias entre ellos
           Base                      (Loose Coupling, Component Singularity).

           Grid                      No uses el operador de agrupación ”,” para
                                     combinar selectores de diferentes objetos. Úsalo
           Widgets                   únicamente para agrupar selectores dentro de
                                     un mismo objeto.
           Helpers
                                     Si estás creando bien tus objetos, y aplicando
                                     bien la extensión y la composición te darás
                                     cuenta que apenas necesitas usar el operador
                                     de agrupación ”,”.
          THEME
           Widgets
           Pages
Estructura Hoja de Estilos > Widgets > No crees dependencias innecesarias entre objetos




          FRAMEWORK                    1     2     3      4     5     6     7      8
           Reset                     No agrupes selectores de distintos objetos,
                                     creando dependencias innecesarias entre ellos
           Base                      (Loose Coupling, Component Singularity).




                     h
           Grid                      No uses el operador de agrupación ”,” para
                                     combinar selectores de diferentes objetos. Úsalo


                                           DEMO
           Widgets                   únicamente para agrupar selectores dentro de
                                     un mismo objeto.
           Helpers
                                     Si estás creando bien tus objetos, y aplicando
                                     bien la extensión y la composición te darás
                                     cuenta que apenas necesitas usar el operador
                                     de agrupación ”,”.
          THEME
           Widgets
           Pages
e    OOCSS
Patrón recomendado.
{
 Extiende los objetos.
Estructura Hoja de Estilos > Widgets > Extiende los objetos




          FRAMEWORK                     1     2     3         4   5   6   7   8
           Reset                      Extiende los objetos a través de múltiples clases.

           Base                       .objeto{}, es un objeto padre
                                      .objeto.hijo{}, es una extensión de .objeto{}
           Grid
                                      Similar a cómo funciona la extensión en OOP.
           Widgets                    Las clases hijas heredan las propiedades de la
                                      clase padre, estas propiedades podrán ser
           Helpers                    modificadas o ampliadas por las clases hijas.

                                      Las clases hijas, al contrario que en OOP, no
                                      requieren ser declaradas después de la clase
                                      padre, pero se recomienda hacerlo para una
          THEME                       mayor legibilidad.
           Widgets
           Pages
Estructura Hoja de Estilos > Widgets > Extiende los objetos




          FRAMEWORK                     1     2     3         4   5   6   7   8
           Reset                      Extiende los objetos a través de múltiples clases.

           Base                       .objeto{}, es un objeto padre
                                      .objeto.hijo{}, es una extensión de .objeto{}




                      h
           Grid
                                      Similar a cómo funciona la extensión en OOP.


                                            DEMO
           Widgets                    Las clases hijas heredan las propiedades de la
                                      clase padre, estas propiedades podrán ser
           Helpers                    modificadas o ampliadas por las clases hijas.

                                      Las clases hijas, al contrario que en OOP, no
                                      requieren ser declaradas después de la clase
                                      padre, pero se recomienda hacerlo para una
          THEME                       mayor legibilidad.
           Widgets
           Pages
e    OOCSS
Patrón recomendado.
{
 Crea objetos compuestos.
Estructura Hoja de Estilos > Widgets > Crea objetos compuestos




         FRAMEWORK                    1         2        3        4        5          6   7   8
           Reset                     “Favor 'object composition' over 'class inheritance'.”
                                     - http://en.wikipedia.org/wiki/Design_Patterns

           Base
                                     Algunos componentes de la página pueden
           Grid                      estar compuestos de varios objetos
                                     independientes.
           Widgets
                                     En este caso no aplicaremos la extensión de un
           Helpers                   objeto base, sino la composición o anidamiento
                                     de objetos.

                                     Al utilizar este patrón nos encontramos con
                                     uno de los mayores problemas de CSS, la falta
          THEME                      de control total sobre la herencia de estilos y la
                                     cascada.
           Widgets
           Pages
Estructura Hoja de Estilos > Widgets > Crea objetos compuestos




         FRAMEWORK                    1     2      3     4       5   6   7   8
           Reset                     Los problemas de anidación surgen por dos
                                     motivos: propiedades CSS heredables, nombres
           Base                      de clases compartidas (sin namespace).

           Grid                       8.1 Crea reglas específicas para cada caso de
                                          anidación, de forma bidireccional y con el
           Widgets                        mismo nivel de especifidad, así no
                                          dependerás del orden en el código fuente.
           Helpers                        En ellas especificaremos los estilos a
                                          neutralizar o sobreescribir del módulo padre.

                                      8.2 Todos los nombres de clases están en el
                                          namespace global de CSS. Sé consistente
          THEME                           con el formato de namespaces que uses, sé
                                          consciente de sus ventajas e inconvenientes.
           Widgets
           Pages
Estructura Hoja de Estilos > Widgets > Crea objetos compuestos




         FRAMEWORK                    1     2      3     4       5   6   7   8
           Reset                     Los problemas de anidación surgen por dos
                                     motivos: propiedades CSS heredables, nombres
           Base                      de clases compartidas (sin namespace).




                     h
           Grid                       8.1 Crea reglas específicas para cada caso de
                                          anidación, de forma bidireccional y con el


                                          DEMO
           Widgets                        mismo nivel de especifidad, así no
                                          dependerás del orden en el código fuente.
           Helpers                        En ellas especificaremos los estilos a
                                          neutralizar o sobreescribir del módulo padre.

                                      8.2 Todos los nombres de clases están en el
                                          namespace global de CSS. Sé consistente
          THEME                           con el formato de namespaces que uses, sé
                                          consciente de sus ventajas e inconvenientes.
           Widgets
           Pages
Estructura Hoja de Estilos > Pages




          FRAMEWORK
           Reset                     La sección Pages es opcional, sus objetos podrían
                                     formar parte de la sección Widgets. Dependerá
           Base                      de la complejidad del proyecto.

           Grid                      Dos funciones:

           Widgets                    1 Agrupar los objetos de páginas/secciones con
                                         estilos completamente independientes, no
           Helpers                       reusables en otro contexto. Facilitamos su
                                         localización y posible separación a otra hoja.

                                      2 Definir las anidaciones necesarias de objetos
                                         cuyo estilo depende de la página. No deja de
          THEME                          ser un caso de composición.
           Widgets
           Pages
Estructura Hoja de Estilos > Helpers




          FRAMEWORK
           Reset                       Los Helpers son pequeñas clases auxiliares
                                       reusables entre proyectos.
           Base
                                       Evitan la repitición del código (DRY).
           Grid
                                       Ejemplos: .clear, .clearfix, .hidden...
           Widgets
           Helpers



          THEME
           Widgets
           Pages
{                   }
      ¿Preguntas?




    DISPARA!
     :z
GraCIASS
 e
 @janogarcia · http://janogarcia.es

Más contenido relacionado

Similar a OOCSS - @janogarcia

OOCSS - Versión anotada - @janogarcia
OOCSS - Versión anotada - @janogarciaOOCSS - Versión anotada - @janogarcia
OOCSS - Versión anotada - @janogarciaJano Garcia
 
CSS - Drupal Camp Costa Rica 2016
CSS - Drupal Camp Costa Rica 2016CSS - Drupal Camp Costa Rica 2016
CSS - Drupal Camp Costa Rica 2016Jose Leiva
 
Frameworks CSS
Frameworks CSSFrameworks CSS
Frameworks CSSbetabeers
 
Introducción a los Frameworks CSS
Introducción a los Frameworks CSSIntroducción a los Frameworks CSS
Introducción a los Frameworks CSSLuis Miguel Martín
 
Framework de programacion de paginas web
Framework de programacion de paginas webFramework de programacion de paginas web
Framework de programacion de paginas webGeraldyn De Sousa
 
Arquitectura frontend para proyectos con preprocesadores CSS
Arquitectura frontend para proyectos con preprocesadores CSSArquitectura frontend para proyectos con preprocesadores CSS
Arquitectura frontend para proyectos con preprocesadores CSSAlberto Portolés Coscojuela
 
Introducción comprensivo al theming para Drupal 7 Front-end
Introducción comprensivo al theming para Drupal 7 Front-endIntroducción comprensivo al theming para Drupal 7 Front-end
Introducción comprensivo al theming para Drupal 7 Front-endJames Wilson
 
Web corporativa con Drupal
Web corporativa con DrupalWeb corporativa con Drupal
Web corporativa con Drupaleduvega
 
Presentación stylus
Presentación   stylusPresentación   stylus
Presentación stylusiOS23
 
Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Pakman Lh
 
Front-end Basics for Developers
Front-end Basics for DevelopersFront-end Basics for Developers
Front-end Basics for DevelopersNadal Soler
 
Desarrollo de temas de apariencia para Liferay 6.1
Desarrollo de temas de apariencia para Liferay 6.1Desarrollo de temas de apariencia para Liferay 6.1
Desarrollo de temas de apariencia para Liferay 6.1Julio Camarero
 

Similar a OOCSS - @janogarcia (20)

OOCSS - Versión anotada - @janogarcia
OOCSS - Versión anotada - @janogarciaOOCSS - Versión anotada - @janogarcia
OOCSS - Versión anotada - @janogarcia
 
CSS - Drupal Camp Costa Rica 2016
CSS - Drupal Camp Costa Rica 2016CSS - Drupal Camp Costa Rica 2016
CSS - Drupal Camp Costa Rica 2016
 
Frameworks CSS
Frameworks CSSFrameworks CSS
Frameworks CSS
 
Introducción a los Frameworks CSS
Introducción a los Frameworks CSSIntroducción a los Frameworks CSS
Introducción a los Frameworks CSS
 
S6 ds2
S6 ds2S6 ds2
S6 ds2
 
Practica05 b
Practica05 bPractica05 b
Practica05 b
 
Framework de programacion de paginas web
Framework de programacion de paginas webFramework de programacion de paginas web
Framework de programacion de paginas web
 
Bootstrap 3.
Bootstrap 3.Bootstrap 3.
Bootstrap 3.
 
Arquitectura frontend para proyectos con preprocesadores CSS
Arquitectura frontend para proyectos con preprocesadores CSSArquitectura frontend para proyectos con preprocesadores CSS
Arquitectura frontend para proyectos con preprocesadores CSS
 
Introducción comprensivo al theming para Drupal 7 Front-end
Introducción comprensivo al theming para Drupal 7 Front-endIntroducción comprensivo al theming para Drupal 7 Front-end
Introducción comprensivo al theming para Drupal 7 Front-end
 
Bootstrap.pptx
Bootstrap.pptxBootstrap.pptx
Bootstrap.pptx
 
U5.pptx
U5.pptxU5.pptx
U5.pptx
 
Web corporativa con Drupal
Web corporativa con DrupalWeb corporativa con Drupal
Web corporativa con Drupal
 
Presentación stylus
Presentación   stylusPresentación   stylus
Presentación stylus
 
Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8
 
Curso Dreamweaver CS6
Curso Dreamweaver CS6Curso Dreamweaver CS6
Curso Dreamweaver CS6
 
Front-end Basics for Developers
Front-end Basics for DevelopersFront-end Basics for Developers
Front-end Basics for Developers
 
Desarrollo de temas de apariencia para Liferay 6.1
Desarrollo de temas de apariencia para Liferay 6.1Desarrollo de temas de apariencia para Liferay 6.1
Desarrollo de temas de apariencia para Liferay 6.1
 
Bootstrap, un framework CSS
Bootstrap, un framework CSSBootstrap, un framework CSS
Bootstrap, un framework CSS
 
Gestión web con éxito
Gestión web con éxitoGestión web con éxito
Gestión web con éxito
 

Último

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 

Último (10)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 

OOCSS - @janogarcia

  • 1. { OOCSS Poniendo OOrden en CSS } @janogarcia · http://janogarcia.es
  • 3. e OdiOCSS Dí tú qué odias de CSS.
  • 4. e ODIO 0 Repetir una y otra vez los mismos estilos.
  • 6. R OOCSS Maximizar reusabilidad. { 1:1 Relación estilos CSS VS elementos HTML 1:n Maximizar relación
  • 7. e ODIO 2 Heredar estilos de una manera impredecible.
  • 8. CSS ENV ENE 6 N ADO selectores #id modificador!important estilos en línea
  • 9. 1+1=2 OOCSS Comportamiento predecible.
  • 10. e ODIO 3 Crecimiento sin control, pesadilla de mantenimiento.
  • 12. O OOCSS Arquitectura modular. { Se basa en la creación de objetos CSS Reusables. Extensibles. Anidables.
  • 13. { } Retoma el CONTROL con OOCSS
  • 14. OOCSS { Modular. Escalable. Eficiente. Simple. Semántico. Mantenible. OOCSS busca el equilibrio }
  • 15. { } Sintaxis estándar de CSS OOCSS=CSS
  • 17. { } Aprende los PATRONES y antipatrones OOCSS
  • 18. Estructura Hoja de Estilos FRAMEWORK Reset Normaliza las inconsistencias entre navegadores. Base Componentes reusables entre Grid proyectos. Widgets Helpers THEME Widgets Modulariza, construye tu sitio a partir de componentes reusables Pages a nivel de proyecto.
  • 19. e OOCSS Patrón recomendado. { Usa un Reset y un Base.
  • 20. Estructura Hoja de Estilos > Reset y Base FRAMEWORK Reset Normalizan estilos entre navegadores, eliminando inconsistencias y estableciendo Base una base común. Grid Sin ellos no podríamos partir de una base conocida, nuestros estilos no tendrían un Widgets comportamiento predecible en los diferentes navegadores. Helpers Evitan el código repetitivo (DRY). Usa una ya existente: 960.gs, formalize.me, normalize.css, html5boilerplate, YUI... O crea THEME la tuya propia. Widgets Pages
  • 21. Estructura Hoja de Estilos > Reset y Base FRAMEWORK Reset Normaliza estilos entre navegadores, eliminando inconsistencias y estableciendo Base una base común. h Grid Sin ellos no podríamos partir de una base conocida, nuestros estilos no tendrían un DEMO Widgets comportamiento predecible en los diferentes navegadores. Helpers Evitan el código repetitivo (DRY). Usa una ya existente 960.gs, formalize.me, normalize.css, html5boilerplate, YUI... O crea THEME la tuya propia. Widgets Pages
  • 22. e OOCSS Patrón recomendado. { Usa Grids.
  • 23. Estructura Hoja de Estilos > Grid FRAMEWORK Reset “Some years ago, I found CSS Framework like Blueprint to be a waste of time. I didn't want to clutter my HTML Base markup with non-semantic classes for handling the styling. Now I still don't think cluttering the HTML with span-6 pull-2 Grid is the best thing that happened to CSS, but I found it much better than cluttering my CSS with endless overflow:hidden Widgets and float:left; margin-right:10px declarations.” http://www.pixelastic.com/blog/201:7-advices-to-start-using-oocss-as-a-coding-practice Helpers THEME Widgets Pages
  • 24. Estructura Hoja de Estilos > Grid FRAMEWORK Reset O repites una y otra vez las reglas necesarias para crear layouts1 o abstraes esas Base reglas y las aplicas como clases2. Elige. 1 float:left,margin-right:10px, overflow:hidden... Grid 2 .grid-6, .grid-10, .push-1... Widgets Evitan el código repetitivo (DRY). Abstraen Helpers inconsistencias entre navegadores. Usa una ya existente: 960.gs, 978.gs, blueprint, YUI... O crea la tuya propia. THEME Widgets Pages
  • 25. Estructura Hoja de Estilos > Grid FRAMEWORK Reset O repites una y otra vez las reglas necesarias para crear layouts1 o abstraes esas Base reglas y las aplicas como clases2. Elige. h 1 float:left,margin-right:10px, overflow:hidden... Grid 2 .grid-6, .grid-10, .push-1... DEMO Widgets Evitan el código repetitivo (DRY). Abstraen Helpers inconsistencias entre navegadores. Usa una ya existente: 960.gs, 978.gs, blueprint, YUI... O crea la tuya propia. THEME Widgets Pages
  • 26. e OOCSS Patrón recomendado. { Crea Objetos reusables.
  • 27. Estructura Hoja de Estilos > Widgets > Crea Objetos reusables FRAMEWORK 1 2 3 4 5 6 7 8 Reset “Build HTML from the component library. New pages should not generally require additional CSS.” Base - Nicole Sullivan Grid Crea una librería de componentes reusables para el proyecto o incluso independientes del proyecto. Widgets Los objetos son un conjunto de clases CSS Helpers relacionadas que responden a una funcionalidad determinada. Estos objetos deben ser reusables, extensibles y anidables. La clave está en identificar esos objetos y en THEME saber aprovechar la extensión y la composición. Widgets Evitan el código repetitivo (DRY). Maximizan la reusabilidad. Pages Itera, refactoriza!
  • 28. Estructura Hoja de Estilos > Widgets > Crea Objetos reusables FRAMEWORK 1 2 3 4 5 6 7 8 Reset “Build HTML from the component library. New pages should not generally require additional CSS.” Base - Nicole Sullivan h Grid Crea una librería de componentes reusables para el proyecto o incluso independientes del proyecto. DEMO Widgets Los objetos son un conjunto de clases CSS Helpers relacionadas que responden a una funcionalidad determinada. Estos objetos deben ser reusables, extensibles y anidables. La clave está en identificar esos objetos y en THEME saber aprovechar la extensión y la composición. Widgets Evitan el código repetitivo (DRY). Maximizan la reusabilidad. Pages Itera, refactoriza!
  • 29. e OOCSS Patrón recomendado. { Simplifica la cascada.
  • 30. Estructura Hoja de Estilos > Widgets > Simplifica la Cascada FRAMEWORK 1 2 3 4 5 6 7 8 Reset Si la cascada no tiene un comportamiento predecible tus estilos tampoco lo tendrán, por Base lo que nunca podrán ser realmente reusables. Grid Di adiós a los selectores #id, a los estilos en línea y a las declaraciones !important. De lo Widgets contrario no conseguirás que tus estilos tengan un comportamiento predecible. Helpers THEME Widgets Pages
  • 31. Estructura Hoja de Estilos > Widgets > Simplifica la Cascada > No #id FRAMEWORK 1 2 3 4 5 6 7 8 Reset 2.1 No uses #id como selector Base Sólo puede haber uno en la página, impidiendo la reusabilidad y limitando la modularización Grid Singleton, no puedes crear varias instancias, Widgets no puede haber objetos extendidos o compuestos en la misma página: #objeto y #objeto.extendido Helpers Complican la especificidad y la cascada, tienen demasiado peso. No podremos crear reglas del mismo peso cuando combinemos objetos basados en .clase y en #id. THEME Úsalos únicamente en el HTML como hooks de Widgets JavaScript o para accesibilidad (formularios, Pages anclas...).
  • 32. Estructura Hoja de Estilos > Widgets > Simplifica la Cascada > No #id FRAMEWORK 1 2 3 4 5 6 7 8 Reset 2.1 No uses #id como selector Base Sólo puede haber uno en la página, impidiendo la reusabilidad y limitando la modularización h Grid Singleton, no puedes crear varias instancias, DEMO Widgets no puede haber objetos extendidos o compuestos en la misma página: #objeto y #objeto.extendido Helpers Complican la especificidad y la cascada, tienen demasiado peso. No podremos crear reglas del mismo peso cuando combinemos objetos basados en .clase y en #id. THEME Úsalos únicamente en el HTML como hooks de Widgets JavaScript o para accesibilidad (formularios, Pages anclas...).
  • 33. Estructura Hoja de Estilos > Widgets > Simplifica la Cascada > Ni estilos en línea ni !important FRAMEWORK 1 2 3 4 5 6 7 8 Reset 2.2 Ni estilos en línea ni !important Base Úsalos únicamente para sobreescribir estilos de una hoja externa fuera de tu control (por ejemplo, Grid un widget externo de comentarios). Widgets Si estás usando estilos en línea o el modificador !important para sobreescribir estilos creados Helpers por tí es un claro síntoma de que algo va mal, te has cargado la cascada. THEME Widgets Pages
  • 34. Estructura Hoja de Estilos > Widgets > Simplifica la Cascada > ¡Olvida la cascada! FRAMEWORK 1 2 3 4 5 6 7 8 Reset 2.3 ¡Olvida la cascada! Base - Olvídate de tener que calcular la especificidad de los selectores. Grid - No dependas del orden del código fuente Widgets (cascada). - Usa valores absolutos para propiedades que se Helpers heredan (evita tight coupling con el HTML). Los estilos se deben heredar de una manera simple y completamente predecible. De esta manera tus objetos se comportarán de una forma THEME predecible, elegirás tus selectores con total seguridad, de una forma sencilla y sin sorpresas Widgets desagradables, ya que no habrá dependencias ni influencias desconocidas (loose coupling). Pages
  • 35. Estructura Hoja de Estilos > Widgets > Simplifica la Cascada > ¡Olvida la cascada! FRAMEWORK 1 2 3 4 5 6 7 8 Reset 2.3 ¡Olvida la cascada! Base - Olvídate de tener que calcular la especificidad de los selectores. h Grid - No dependas del orden del código fuente (cascada). DEMO Widgets - Usa valores absolutos para propiedades que se Helpers heredan (evita tight coupling con el HTML). Los estilos se deben heredar de una manera simple y completamente predecible. De esta manera tus objetos se comportarán de una forma THEME predecible, elegirás tus selectores con total seguridad, de una forma sencilla y sin sorpresas Widgets desagradables, ya que no habrá dependencias ni influencias desconocidas (loose coupling). Pages
  • 36. e OOCSS Patrón recomendado. { Usa clases, no elementos.
  • 37. Estructura Hoja de Estilos > Widgets > Usa clases, no elementos FRAMEWORK 1 2 3 4 5 6 7 8 Reset Usa clases para tus objetos CSS, evita usar elementos HTML en los selectores CSS. Base 3.1 Nombra los elementos asignándoles una Grid clase. Los estilos serán más reusables, ya que no dependerán del markup (.title en vez Widgets de h1, h2...). Helpers 3.2 No especifiques el elemento HTML al que es aplicado una clase CSS (sí: .miclase, no: div.miclase). Especificar el elemento al que es aplicado una THEME clase es redundante, innecesario y crea más dependencia entre la estructura HTML y el Widgets estilo CSS, obligándonos a modificar el CSS cada vez que modifiquemos la estructura Pages HTML (por ejemplo, al cambiar de ol a ul).
  • 38. Estructura Hoja de Estilos > Widgets > Usa clases, no elementos FRAMEWORK 1 2 3 4 5 6 7 8 Reset Usa clases para tus objetos CSS, evita usar elementos HTML en los selectores CSS. Base 3.1 Nombra los elementos asignándoles una h Grid clase. Los estilos serán más reusables, ya que no dependerán del markup (.title en vez DEMO Widgets de h1, h2...). Helpers 3.2 No especifiques el elemento HTML al que es aplicado una clase CSS (sí: .miclase, no: div.miclase). Especificar el elemento al que es aplicado una THEME clase es redundante, innecesario y crea más dependencia entre la estructura HTML y el Widgets estilo CSS, obligándonos a modificar el CSS cada vez que modifiquemos la estructura Pages HTML (por ejemplo, al cambiar de ol a ul).
  • 39. e OOCSS Patrón recomendado. { Minimiza los selectores.
  • 40. Estructura Hoja de Estilos > Widgets > Minimiza los selectores FRAMEWORK 1 2 3 4 5 6 7 8 Reset 4.1 Legibilidad: No definas selectores innecesariamente cualificados como .usuarios Base table thead tr th a, con .usuarios thead a es suficiente. Grid Evita sobre detallar cada nivel de la Widgets estructura HTML. En la mayoría de ocasiones basta con indicar el primer y último elemento. Helpers No definas elementos redundantes como tr th o ul li, bastaría con indicar th o li ya que no pueden estar contenidos por un padre diferente. THEME 4.2 Rendimiento: El selector descendiente ” ” (espacio) es el que requiere un proceso Widgets más intensivo por parte del navegador, el hijo ”>” algo menos. Trata de limitar su Pages uso, por ejemplo, un máximo de 3 selectores simples.
  • 41. Estructura Hoja de Estilos > Widgets > Minimiza los selectores FRAMEWORK 1 2 3 4 5 6 7 8 Reset 4.1 Legibilidad: No definas selectores innecesariamente cualificados como .usuarios Base table thead tr th a, con .usuarios thead a es suficiente. h Grid Evita sobre detallar cada nivel de la DEMO Widgets estructura HTML. En la mayoría de ocasiones basta con indicar el primer y último elemento. Helpers No definas elementos redundantes como tr th o ul li, bastaría con indicar th o li ya que no pueden estar contenidos por un padre diferente. THEME 4.2 Rendimiento: El selector descendiente ” ” (espacio) es el que requiere un proceso Widgets más intensivo por parte del navegador, el hijo ”>” algo menos. Trata de limitar su Pages uso, por ejemplo, un máximo de 3 selectores simples.
  • 42. e OOCSS Patrón recomendado. { No dependas del contexto.
  • 43. Estructura Hoja de Estilos > Widgets > No dependas del contexto FRAMEWORK 1 2 3 4 5 6 7 8 Reset “Separate container and content: Break the dependency between the container module and the content objects it Base contains.” - Nicole Sullivan Grid Los estilos de los objetos deben ser Widgets independientes del lugar que ocupen en la página: footer, sidebar, content... Si dependen de la Helpers estructura de la página no serán reusables fuera de ese contexto. No: .sidebar .last-comments {} Sí: .last-comments {}. THEME Ésto permitirá mostrar el widget en cualquier Widgets página y en cualquier parte de la misma. Incluso en otro proyecto, conociendo en todo momento Pages sus dependencias de estilo y cómo le afectará el nuevo contexto (herencia y namespaces).
  • 44. Estructura Hoja de Estilos > Widgets > No dependas del contexto FRAMEWORK 1 2 3 4 5 6 7 8 Reset “Separate container and content: Break the dependency between the container module and the content objects it Base contains.” - Nicole Sullivan h Grid Los estilos de los objetos deben ser DEMO Widgets independientes del lugar que ocupen en la página: footer, sidebar, content... Si dependen de la Helpers estructura de la página no serán reusables fuera de ese contexto. No: .sidebar .last-comments {} Sí: .last-comments {}. THEME Ésto permitirá mostrar el widget en cualquier Widgets página y en cualquier parte de la misma. Incluso en otro proyecto, conociendo en todo momento Pages sus dependencias de estilo y cómo le afectará el nuevo contexto (herencia y namespaces).
  • 45. e OOCSS Patrón recomendado. { No crees dependencias innecesarias entre objetos.
  • 46. Estructura Hoja de Estilos > Widgets > No crees dependencias innecesarias entre objetos FRAMEWORK 1 2 3 4 5 6 7 8 Reset No agrupes selectores de distintos objetos, creando dependencias innecesarias entre ellos Base (Loose Coupling, Component Singularity). Grid No uses el operador de agrupación ”,” para combinar selectores de diferentes objetos. Úsalo Widgets únicamente para agrupar selectores dentro de un mismo objeto. Helpers Si estás creando bien tus objetos, y aplicando bien la extensión y la composición te darás cuenta que apenas necesitas usar el operador de agrupación ”,”. THEME Widgets Pages
  • 47. Estructura Hoja de Estilos > Widgets > No crees dependencias innecesarias entre objetos FRAMEWORK 1 2 3 4 5 6 7 8 Reset No agrupes selectores de distintos objetos, creando dependencias innecesarias entre ellos Base (Loose Coupling, Component Singularity). h Grid No uses el operador de agrupación ”,” para combinar selectores de diferentes objetos. Úsalo DEMO Widgets únicamente para agrupar selectores dentro de un mismo objeto. Helpers Si estás creando bien tus objetos, y aplicando bien la extensión y la composición te darás cuenta que apenas necesitas usar el operador de agrupación ”,”. THEME Widgets Pages
  • 48. e OOCSS Patrón recomendado. { Extiende los objetos.
  • 49. Estructura Hoja de Estilos > Widgets > Extiende los objetos FRAMEWORK 1 2 3 4 5 6 7 8 Reset Extiende los objetos a través de múltiples clases. Base .objeto{}, es un objeto padre .objeto.hijo{}, es una extensión de .objeto{} Grid Similar a cómo funciona la extensión en OOP. Widgets Las clases hijas heredan las propiedades de la clase padre, estas propiedades podrán ser Helpers modificadas o ampliadas por las clases hijas. Las clases hijas, al contrario que en OOP, no requieren ser declaradas después de la clase padre, pero se recomienda hacerlo para una THEME mayor legibilidad. Widgets Pages
  • 50. Estructura Hoja de Estilos > Widgets > Extiende los objetos FRAMEWORK 1 2 3 4 5 6 7 8 Reset Extiende los objetos a través de múltiples clases. Base .objeto{}, es un objeto padre .objeto.hijo{}, es una extensión de .objeto{} h Grid Similar a cómo funciona la extensión en OOP. DEMO Widgets Las clases hijas heredan las propiedades de la clase padre, estas propiedades podrán ser Helpers modificadas o ampliadas por las clases hijas. Las clases hijas, al contrario que en OOP, no requieren ser declaradas después de la clase padre, pero se recomienda hacerlo para una THEME mayor legibilidad. Widgets Pages
  • 51. e OOCSS Patrón recomendado. { Crea objetos compuestos.
  • 52. Estructura Hoja de Estilos > Widgets > Crea objetos compuestos FRAMEWORK 1 2 3 4 5 6 7 8 Reset “Favor 'object composition' over 'class inheritance'.” - http://en.wikipedia.org/wiki/Design_Patterns Base Algunos componentes de la página pueden Grid estar compuestos de varios objetos independientes. Widgets En este caso no aplicaremos la extensión de un Helpers objeto base, sino la composición o anidamiento de objetos. Al utilizar este patrón nos encontramos con uno de los mayores problemas de CSS, la falta THEME de control total sobre la herencia de estilos y la cascada. Widgets Pages
  • 53. Estructura Hoja de Estilos > Widgets > Crea objetos compuestos FRAMEWORK 1 2 3 4 5 6 7 8 Reset Los problemas de anidación surgen por dos motivos: propiedades CSS heredables, nombres Base de clases compartidas (sin namespace). Grid 8.1 Crea reglas específicas para cada caso de anidación, de forma bidireccional y con el Widgets mismo nivel de especifidad, así no dependerás del orden en el código fuente. Helpers En ellas especificaremos los estilos a neutralizar o sobreescribir del módulo padre. 8.2 Todos los nombres de clases están en el namespace global de CSS. Sé consistente THEME con el formato de namespaces que uses, sé consciente de sus ventajas e inconvenientes. Widgets Pages
  • 54. Estructura Hoja de Estilos > Widgets > Crea objetos compuestos FRAMEWORK 1 2 3 4 5 6 7 8 Reset Los problemas de anidación surgen por dos motivos: propiedades CSS heredables, nombres Base de clases compartidas (sin namespace). h Grid 8.1 Crea reglas específicas para cada caso de anidación, de forma bidireccional y con el DEMO Widgets mismo nivel de especifidad, así no dependerás del orden en el código fuente. Helpers En ellas especificaremos los estilos a neutralizar o sobreescribir del módulo padre. 8.2 Todos los nombres de clases están en el namespace global de CSS. Sé consistente THEME con el formato de namespaces que uses, sé consciente de sus ventajas e inconvenientes. Widgets Pages
  • 55. Estructura Hoja de Estilos > Pages FRAMEWORK Reset La sección Pages es opcional, sus objetos podrían formar parte de la sección Widgets. Dependerá Base de la complejidad del proyecto. Grid Dos funciones: Widgets 1 Agrupar los objetos de páginas/secciones con estilos completamente independientes, no Helpers reusables en otro contexto. Facilitamos su localización y posible separación a otra hoja. 2 Definir las anidaciones necesarias de objetos cuyo estilo depende de la página. No deja de THEME ser un caso de composición. Widgets Pages
  • 56. Estructura Hoja de Estilos > Helpers FRAMEWORK Reset Los Helpers son pequeñas clases auxiliares reusables entre proyectos. Base Evitan la repitición del código (DRY). Grid Ejemplos: .clear, .clearfix, .hidden... Widgets Helpers THEME Widgets Pages
  • 57. { } ¿Preguntas? DISPARA! :z
  • 58. GraCIASS e @janogarcia · http://janogarcia.es