2011-03-13 24 views
99

¿Es posible tener pseudo-clases usando estilos en línea?CSS Pseudo-clases con estilos en línea


Ejemplo:

<a href="http://www.google.com" style="hover:text-decoration:none;">Google</a> 

sé el código HTML anterior no funciona, pero no es algo similar que lo hará?

P.S. Sé que debería usar una hoja de estilo externa, y lo hago. Solo tenía curiosidad si esto podría hacerse usando estilos en línea.

+1

Buena pregunta . No es posible afaik, pero esa no es una limitación en la que haya pensado antes. – mwcz

+4

posible duplicado de [¿Es posible crear pseudo estilos en línea?] (Http: // stackoverflow.com/questions/986618/is-is-possible-to-create-inline-pseudo-styles) – Synetech

Respuesta

94

No, esto no es posible. En los documentos que utilizan CSS, un atributo style en línea solo puede contener declaraciones de propiedad; el mismo conjunto de declaraciones que aparece en cada conjunto de reglas en una hoja de estilo. Desde el Style Attributes spec:

El valor del atributo de estilo debe coincidir con la sintaxis de los contenidos de un CSS declaration block (excluyendo las llaves de delimitación), cuya gramática formal es la siguiente en los términos y convenciones de la CSS core grammar:

se permite
declaration-list 
    : S* declaration? [ ';' S* declaration? ]* 
    ; 

ni los selectores (incluyendo pseudo-elementos), ni en-reglas, ni cualquier otro constructo CSS.

Piense en estilos en línea como los estilos aplicados a algún selector de ID superespecífico anónimo: esos estilos solo se aplican a ese mismo elemento con el atributo style. (También tienen prioridad sobre un selector de ID en una hoja de estilo, si ese elemento tiene esa ID.) Técnicamente no funciona así; esto es solo para ayudarlo a comprender por qué el atributo no admite estilos de pseudo-clase o pseudo-elemento (tiene más que ver con cómo las pseudo-clases y los pseudo-elementos proporcionan abstracciones del árbol de documentos que no se pueden expresar en el lenguaje del documento).

Tenga en cuenta que los estilos en línea participan en la misma cascada que los selectores en conjuntos de reglas, y toman la mayor prioridad en la cascada (no obstante, !important). Por lo tanto, tienen prioridad incluso sobre los estados de pseudo-clase. Permitir pseudo-clases o cualquier otro selector en estilos en línea posiblemente introduzca un nuevo nivel de cascada, y con ello un nuevo conjunto de complicaciones.

Tenga en cuenta también que las revisiones muy antiguas de los atributos de estilo especifican did originally propose allowing this, sin embargo, se descartó, presumiblemente por la razón dada anteriormente, o porque implementarlo no era una opción viable.

34

No CSS, pero en línea:

<a href="#" 
    onmouseover = "this.style.textDecoration = 'none'" 
    onmouseout = "this.style.textDecoration = 'underline'">Hello</a> 

See example →

+2

Solo para la pseudoclase ': hover' por supuesto :) – BoltClock

+2

Sí, supongo que es otra opción. No es CSS pero funciona para: pasar el mouse sobre mouseover y mouseout, enfocar usando onfocus y onblur, y: active usando onclick. –

+1

¿Esto contaría como javascript? Tengo un proyecto que requiere CSS en línea y sin Javascript. –

16

En lugar de tener en línea se puede utilizar interna CSS

<a href="http://www.google.com" style="hover:text-decoration:none;">Google</a> 

Usted podría tener:

<a href="http://www.google.com" id="gLink">Google</a> 
<style> 
    #gLink:hover { 
    text-decoration: none; 
    } 
</style> 
+0

¿Es aceptable usar css interno fuera del elemento de la cabeza? – Thaina

+2

@Thaina Ahora, en HTML5: http://html5doctor.com/the-scoped-attribute/ – LGSon

+1

@Thaina Funny, se encontró con otra pregunta en la que decidí hacer tal cosa y descubrí que el atributo 'scoped' tiene eliminado de las especificaciones ... https: //developer.mozilla.org/en/docs/Web/HTML/Element/style – LGSon

Cuestiones relacionadas