2010-06-15 18 views

Respuesta

43

utilizar comentarios condicionales en HTML, así:

<!--[if IE 8]> 
<style>...</style> 
<![endif]--> 

Ver aquí: http://www.quirksmode.org/css/condcom.html

puede comprobar las versiones de IE y fiable también asegúrese OTH er navegadores no se confundirán.

+8

Necesito hack no condicional –

+3

¿Por qué necesitas un truco? Los hacks, por su propia naturaleza, deberían evitarse (excepto como último recurso absoluto). –

+0

Debería poder recorrer un largo camino mediante el uso de condicionales (que a su vez son un hack), ya que le permiten tener una sección de código específica ejecutada solo si se detecta una determinada versión y que podría contener CSS. HTML, JS, ... – Palantir

0

¿No puedes usar el hack que ya has mostrado y luego usar un IE7 y un hack por debajo para anularlo?

+4

* Pleeeeease * ¡no use hacks! ¡Hacks para anular * otros * hacks es incluso peor! –

+1

@codeka - MGS ya ha insistido en un comentario a otra respuesta que él solo utilizará los hacks, por lo que simplemente estaba yendo con la corriente. Si fuera yo, iría con condicionales, ya que Plantir ya respondió. –

15

Utilice \0.

color: green\0; 

embargo hago recomiendan los comentarios condicionales ya que desea excluir IE9 así y es aún impredecible si este corte afectará IE9 así o no.

Sin embargo, nunca he tenido la necesidad de un hack específico de IE8. ¿Qué es, el problema específico de IE8 que te gustaría resolver? ¿Está renderizando en modo estándar IE8 de todos modos? Su renderizador es bastante bueno.

+9

Sí, pero no olvide el ** espacio en blanco ** justo antes de '\ 0'; de lo contrario, también afectará a IE9. – ed1nh0

2

Hacer algo así debería funcionar para usted.

<!--[if IE 8]> 
<div id="IE8"> 
<![endif]--> 

*Your content* 

<!--[if IE 8]> 
</div> 
<![endif]--> 

A continuación, el CSS puede tener este aspecto:

#IE8 div.something 
{ 
    color: purple; 
} 
36

Use preguntas de los medios para separar cada navegador:

/* IE6/7 uses media, */ 
@media, { 
     .dude { color: green; } 
     .gal { color: red; } 
} 

/* IE8 uses \0 */ 
@media all\0 { 
     .dude { color: brown; } 
     .gal { color: orange; } 
} 

/* IE9 uses \9 */ 
@media all and (monochrome:0) { 
      .dude { color: yellow\9; } 
      .gal { color: blue\9; } 
} 

/* IE10 and IE11 both use -ms-high-contrast */ 
@media all and (-ms-high-contrast:none) 
{ 
.foo { color: green } /* IE10 */ 
*::-ms-backdrop, .foo { color: red } /* IE11 */ 
} 

Referencias

+4

su solución ie8 no es un hack IE8-only, lo intento en mi computadora, ie9 y ie10 también heredarán este estilo. ¿Tienes un IE8 y un hack por debajo? –

+3

@JackZhang Sí, utilice los hacks IE9, IE10, IE11, etc. para restablecer las reglas de estilo establecidas por el hack de IE8. He actualizado la respuesta con esos hacks. –

+2

la solución ie8 todavía no funciona para IE8-only, '\ 0' funcionará para ie8, ie9 y ie10. En realidad, no hay ningún método de hack para el estilo ie8-only excepto css condicional. –

0

Hay varias maneras de conseguir una clase sobre el elemento HTML, que identifican qué IE versión que está contendiendo con: Modernizr, la HTML 5 Boilerplate, etc - o simplemente rodar su propia . Entonces puedes usar esa clase (por ejemplo, .lt-ie9) en un selector de CSS normal, no es necesario hackear. Si solo desea afectar IE8 y no las versiones anteriores, vuelva a colocar el valor anterior utilizando un selector .lt-ie8.

8

Si se necesitan pequeños cambios en el uso de CSS \ 9 se dirige a IE8 y por debajo (IE6, IE7, IE8)

.element { 
    color:green \9; 
} 

mejor manera es utilizar comentarios condicionales en HTML, así:

<!--[if IE 8]> 
<style>...</style> 
<![endif]--> 
+0

Lo intenté con el 'contenido 'de la propiedad y no cambiará bajo IE8 (no he comprobado otras versiones de IE). Supongo que esto se debe a que pasamos un valor de cadena entrecomillado y este truco (y tal vez otros hacks también) puede no ser compatible con él. 'content:" \ 0020 "\ 9;' – adi518

0

Esto funcionará para las versiones de fuelle IE8

#yourID .lt-IE9 {

su código CSS

}

0

para IE8 navegador nativo solo:

.classname{ 
    *color: green; /* This is for IE8 Native browser alone */ 
} 
2

Así que una reciente pregunta me llevó a notar un selector en hackear para excluir IE 8 sólo.

.selector, #excludeIE8::before {} hará que IE 8 arroje todo el conjunto de selecciones, mientras que 5-7 y 9-11 lo leerán bien. Cualquiera de los :: selectores (::first-line, ::before, ::first-letter, ::selection) funcionará, simplemente he elegido ::before para que la línea lea con precisión. Tenga en cuenta que el objetivo del selector falsa ::before es ser falso, así que asegúrese de cambiar a otra cosa si realmente tiene un elemento con el ID excludeIE8

Curiosamente, en modernas navegadores (FF 45 -52, GC 49-57, Edge 25/13) un selector malo :: se come todo el conjunto de selectores (dabblet demo). Es parece que la última versión de Windows de Safari (y LTE IE 7, lol) no tiene este comportamiento mientras todavía entiende ::before. Además, no puedo encontrar nada en the spec para indicar que este es el comportamiento previsto, y dado que podría causar roturas en cualquier selector establecer que contenga: ::future-legitimate-pseudoelement ... Me inclino a decir que este es un error y que mordisquearemos nuestras rears en el futuro.


Sin embargo, si sólo quieres algo en el nivel de propiedad (en lugar del nivel de la regla), Ziga anterior tenía la mejor solución a través añadiendo  \9 (el espacio es clave; NO CopyPaste que inline ya que utiliza un nbsp):

/*property-level hacks:*/ 
/*Standards, Edge*/ 
prop:val; 
/*lte ie 11*/ 
prop:val\9; 
/*lte ie 8*/ 
prop:val \9; 
/*lte ie 7*/ 
*prop:val; 
/*lte ie 6*/ 
_prop:val; 

/*other direction...*/ 
/*gte ie 8, NOT Edge*/ 
prop:val\0; 

nota al margen, me siento como un necromancer- sucio, pero quería un lugar para documentar el excluir-IE8 sólo el selector en truco que encontré hoy en día, y esto parecía ser el lugar más apropiado.

0

que estaba buscando una buena opción para IE10 y por debajo de estilo CSS (pero trabajaría para IE8 única también) y se me ocurrió esta idea:

<!--[if lt IE 10]><div class="column IE10-fix"><![endif]--> 
<!--[if !lt IE 10]><!--><div class="column"><!--<![endif]--> 

declaro mi div o lo que usted quiero con una clase extra, esto me permite tener CSS extra en la misma hoja de estilo de una manera muy legible.

Es W3C válido y no es un hack de CSS extraño.