2011-09-15 11 views
7

vi esta presentation about object oriented css, pero creo que, o bien no lo entiendo correctamente o no entiende los beneficios del uso de CSS OO:objeto CSS orientado

Ejemplo HTML:

<div class="border-1 bg-2 color-1 font-1"> 
</div> 

Ejemplo CSS :

/* borders */ 
.border-1 { border: 1px solid red; } 

/* backgrounds: */ 
.bg-2 { background: yellow; } 

/* other sections */ 

veo la ventaja de ser capaz de cambiar estilos de múltiples elementos de forma rápida, por ejemplo, ser capaz de cambiar el esquema de color sería muy útil.

Pero en realidad, está definiendo el estilo/apariencia dentro del HTML, o al menos una parte de él. Por supuesto, es mejor que usar el atributo style, porque aún puede intercambiar los estilos para un grupo de grupos.

El punto es que está definiendo los grupos de estilos dentro del HTML, pero aprendí que debe crear grupos "lógicos" dentro del HTML (ej. class="nav-item"/class="btn submit-btn") y el CSS aplica completamente el estilo y define qué elementos pertenecen juntos desde el punto de vista "estilístico" (por ejemplo, .nav-item, .submit-btn { background: red; }).

Quizás entendí mal el concepto. Sin embargo, todavía no conozco una buena forma de construir mi CSS.

Respuesta

7

CSS no está orientado a objetos. Mi sugerencia es olvidar lo que has leído sobre "CSS orientado a objetos" y en su lugar enfocarte en los problemas con CSS que estás tratando de resolver. Si van a hacer que CSS sea más fácil de escribir, leer y mantener, o para obtener más funciones (como variables CSS), creo que Less o Sass se adaptarán mejor a sus necesidades.

Usar CSS como lo que se sugiere con "CSS orientado a objetos" solo conduce a CSS terrible, no semántico y sin sentido que a la larga no es más fácil de mantener que el CSS "normal". Tanto id como class deben tener semantic and meaningful names, por lo que usar un marco que te permite escribir CSS semántico (que describe la intención en lugar de la presentación) es en mi humilde opinión mucho mejor.

+0

@madr, has [Menos] (http://lesscss.org/) o [Sass] (http://sass-lang.com/)? Son una solución mucho mejor al problema que tratar de orientar los objetos de cuerno a algo que nunca estará orientado a objetos. –

+0

@asbjomu Como no hay ninguna razón para no hacerlo, combino los preprocesadores con OOCSS para obtener lo mejor de ambos. Mis equipos están muy contentos con este acuerdo de trabajo. – madr

+0

@ AsbjørnUlsberg, hablando de mi experiencia, para un desarrollador de UI que se mueve a scss/sass sin conocimiento de OOCSS, va a ser de muy poco bien, la razón principal es que OOCSS hace que un desarrollador piense cuándo debería abstraer una cierta porción de CSS como un componente independiente y si no se está haciendo esta pregunta como un desarrollador de CSS, entonces ¡pasar a SCSS no le va a hacer ningún bien a la persona! ¡Esta sola razón puede salvar una gran cantidad de código hinchado! –

3

Esto es más un "nombre que cae", que un método real. El código que ha mostrado a menudo es despectivo y se llama "enterprise css", no hay excusa para ello.

Además, tener múltiples clases de elementos en realidad perjudica el rendimiento.

Le aconsejo que se adhiera a Mozilla's guidelines al hacer su CSS, que funciona igual para otros navegadores, también. Y crea un archivo .css dedicado con hacks para IE6, 7 y 8.

+0

Consulte una sección que indica que varias clases se consideran malas debido al rendimiento. Usar selectores de CSS complejos e innecesarios es mucho peor que usar múltiples clases. http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/ – madr

+0

'Evite el selector de descendientes, IDs, refs de elementos,! important. Use CSS Lint y CSS grids'. esto es OOCSS? De acuerdo. multa. nada malo con eso. Bastante sabiduría común. Pero, ¿dónde está la parte "orientada a objetos"? _Las técnicas de programación pueden incluir características tales como abstracción de datos, encapsulación, mensajería, modularidad, polimorfismo y herencia._ [(c) wiki] (http://en.wikipedia.org/wiki/Object-oriented_programming) ¿Cómo se supone que debes encapsular todo en CSS? .. CSS ni siquiera tiene variables, y '