2008-11-18 13 views
35

He estado sumergiéndome en el libro de SitePoint sobre CSS.CSS ¿Mejores prácticas sobre identificación y clase?

Lo que me llamó la atención acerca de los ejemplos fue el uso de ID como selector de CSS.

Algunos de los diseños de CSS que he hecho, siempre me ha parecido más fácil y versátil usar Class como selector.

Tal vez sea una cosa .Net ya que no siempre tenemos el control de la ID de un elemento ...

es la mejor práctica para su uso en clase o ID como selector?

Respuesta

45

Supongo que siempre usan la identificación en los ejemplos porque es menos ambigua. Usted sabe que están hablando específicamente de que un elemento y sus estilos.

En general, la regla general es que debe preguntarse: "¿hay más de un elemento que requiere el mismo estilo, ahora o en el futuro?", Y la respuesta es incluso "tal vez" , luego haz que sea una clase.

+1

que resume mi opinión bastante bien! Use Class y solo use ID como selector cuando sea necesario. Revisaré el libro para ver si hubo más detalles sobre esto ... si no, incluso puedo enviar un correo electrónico a los autores – Adrian

+2

De acuerdo. Puede ser útil elegir nombres de identificación que impliquen unicidad, como "mainsection" o "navbar"." –

0

Prefiero usar Class como selector, por lo que puedo usarlo con más de un elemento en la misma página. El uso de la identificación como selector no permite esto, ya que la identificación debe ser única.

2

Los selectores de ID tienen una alta especificidad, que a menudo es lo que necesita en CSS. Cuanto más estricto puede hacer que el CSS se aplique exactamente a lo que necesita, menos trabajo debe hacer el procesador de CSS al establecer las reglas.

Diseño a la tarea, y lo hacen de una manera OO - clases de uso donde los objetos son classlike, identificaciones donde como objetivo las instancias, y tratar árbitros etiqueta como algo parecido a las interfaces (y tenga cuidado cuando lo hace!) Esa es la mejor práctica que puedo pensar.

editar: y sí, MS realmente creó CSS ​​con ASP.NET ¡gracias chicos!

+1

@Tim Meers, por lo que no tiene problemas con tener selectores de ID lisiados, la interpretación de MS de escalado del navegador, sus controles semánticos (los denominados adaptadores compatibles con CSS fueron lanzados por alguna razón) y su insistencia continua en la promoción en línea Si eso está bien para ti, entonces el rey es para ti, pero los formularios web personales han estado muertos desde que se lanzó MVC. – annakata

+0

Los formularios web han mejorado mucho desde la versión 4. Ya no daña el código html (incluido el espaciado) y puedes ahora use identificaciones estáticas y apague viewstate, estado de sesión y puede tener enrutamiento como MVC. Puede aprovechar algunas de las excelentes características de MVC o mezclar y combinar :) –

4

La práctica depende de la "resolución" de lo que está intentando seleccionar.

Uso las clases cuando quiero cambiar todo un botín de elementos. Las identificaciones me dan un control mucho más preciso que a veces es necesario.

1

Debe usar un "id" cuando siempre está hablando de un único (y siempre será único) sector de su sitio.

Básicamente, se trata de semántica.

div.header 

Eso me dice que permite varios "encabezados" en su sitio. Tal vez estos son sub encabezados.

div#header 

Eso me dice que estás hablando de la única "sección de encabezado" del diseño de tu sitio.

EDIT: He aquí un artículo semi-antigua sobre un diseño CSS puro ... si sólo escanear los ejemplos de CSS, verá por qué uso de ID de allí: How To: Pure CSS Design

19

No hay que olvidar que la clase y la ID no son mutuamente excluyentes. ¡No hay nada que te impida tener ambos!Esto a veces es muy útil, ya que permite que un elemento herede el estilo común junto con otros elementos de la misma clase, además de brindarle un control preciso de ese elemento específico. Otra técnica útil es aplicar varias clases al mismo objeto (sí, class = "algunaClase someOtherClass" es perfectamente válido) Por ejemplo:

<style> 
div.box { 
float: left; 
border: 1px solid blue; 
padding: 1em; 
} 

div.wide { 
width: 40em; 
} 

div.narrow { 
width: 10em; 
} 

div#oddOneOut { 
float: right; 
} 
</style> 

<div class="box wide">a wide box</div> 
<div class="box narrow">a narrow box</div> 
<div class="box wide" id="oddOneOut">an odd box</div> 

En teoría, también es posible conseguir CSS sólo se aplica a los elementos que pertenecer a varias clases, por ejemplo div.box.narrow {something: somevalue;} pero desafortunadamente esto no es compatible con todos los navegadores. Actualización 2011: Los selectores de múltiples clases ahora tienen un soporte de navegador casi universal, así que ¡adelante y utilícelos!

+1

Sí, parece que no muchos se han dado cuenta de eso. Es una pena porque ¡es una muy buena manera de reducir el desorden y la redundancia en las hojas de estilo! –

+2

También es una buena manera de cavarte un hoyo profundo y bonito, a menos que tengas cuidado;) Como una regla de oro; las clases (o ids para el caso) nunca deberían tener nombres descriptivos de la apariencia, sino de la función. –

+2

¿Tienes un ejemplo de dónde esto llevaría a "un agujero agradable y profundo"? –

17

No olvide que puede vincular a un elemento que tiene un ID. Esto puede ser muy importante para la accesibilidad, entre los otros beneficios. Esta es una buena razón por la que para elementos de diseño como encabezado, navegación, contenido principal, pie de página, formulario de búsqueda, etc., siempre debe usar una ID en lugar de una Clase (o junto con una Clase).

1

Los ID son para identificar elementos de forma exclusiva, las clases son para identificar un elemento como parte de una clase de elementos.

En términos prácticos, los atributos de id solo deben usarse uno por documento, los atributos de clase se pueden usar en más de un elemento en un documento.

Compruebe el W3C spec y también la página CSS-Discuss sobre este tema.

5

Otro recurso útil es el W3C spec on Cascading Order: id selectores se dan diez veces el peso de class selectores. Esto es especialmente importante si planea anular los estilos en función de diferentes escenarios o cambios de estado. Cuanto más específico sea el selector inicial, más trabajo tendrá que hacer para anularlo en declaraciones adicionales.

+2

¡No, no diez veces, tiempos infinitos! Lee de nuevo la especificación: "Concatenar los tres números (en un sistema numérico con una base grande) da la especificidad". En esta oración, una "base grande" es lo suficientemente grande cuando una única identificación anula cualquier cantidad de clase. –

-1

Utilice solo clases, casi nunca use ID si no tiene que preocuparse por la velocidad o la compatibilidad.

El uso de ID es malo al igual que el uso de variables globales en el código de Visual Basic. La razón es que los ID deben ser únicos, lo que introduce una dependencia innecesaria y mala entre las diferentes partes independientes de su código. Usar algo como .page1 .tab1> .field1 es mejor porque no tiene que preocuparse por la singularidad de field1 dentro de tab1 o la exclusividad de tab1 dentro de page1. Con los ID, debe mantener el registro de sus ID para mantener el control y evitar colisiones.

Use los ID solo si es necesario, por ejemplo href = '# name' o si alguna biblioteca lo requiere.

+2

Y si necesita un nombre aplicado a un elemento único, pero solo usa clase, ¿cuál es la diferencia? Excepto que la clase no se marcará como un error y puede terminar persiguiendo un error si usa la misma clase en otro lugar. – Rob

+0

tiene que usar identificaciones en algunas circunstancias. Si usas clases TODO el tiempo, creas un archivo css con muchas clases que solo tienen una aplicación ... ¡lo cual es muy ineficiente y una pesadilla de mantenimiento! – Adrian

+4

@Adrian: ¿cómo usar #name hace que sea menos pesadilla que usar .name? @Rob: a la derecha, no hay diferencias, pero el beneficio es cuando dinámicamente se incluye una página en otra que tiene el mismo nombre de identificación o si se combinan los componentes de la página. ¿Cómo se puede escribir un componente reutilizable utilizando ID a menos que duplique el nombre del componente dentro de cada ID? Y si duplica, ¿qué sentido tiene el árbol DOM si está organizando su propio árbol dentro de las ID? – alpav