2010-01-19 13 views
0

Je construis un site Web qui utilise une bonne quantité d'ombres portées et de gradients. Je peux accomplir beaucoup de cela via les propriétés box-shadow de CSS. Hélas, nous supportons toujours IE, nous avons donc besoin d'ajouter des images d'arrière-plan dans ces situations. Je pourrais être paresseux et juste donner à tous les images d'arrière-plan, mais j'essaye de rationaliser des choses pour ceux qui utilisent les navigateurs modernes. Idéalement, j'aimerais que ces utilisateurs n'aient pas à demander les images.CSS: les images sont-elles demandées si elles sont déclarées en CSS mais plus tard écrasées?

Alors, j'ajoute une classe supplémentaire via javascript si le navigateur prend en charge l'ombre de la boîte (boîte shadowSupport) et mon CSS finit par ressembler à ceci:

.box { 
    background: url('myImage.jpg'); 
} 

.box-shadowSupport { 
    background: none; 
    [box shadow properties go here] 
} 

Si le HTML finit par ressembler à ceci:

<div class="box box-shadowSupport"></div> 

L'image sera-t-elle demandée? Ou le navigateur comprend-il qu'il n'est pas nécessaire en raison du deuxième style qui l'emporte sur la propriété de l'image d'arrière-plan? Si l'image est demandée, j'ai besoin de réorganiser mes CSS et javascript donc au lieu de surcharger un style via la cascade, je vais devoir permuter les classes pour que le premier ne soit même pas référencé dans le HTML .

Répondre

3

Je crois que chaque navigateur Web traitera cela à sa manière - comme d'habitude :) Ma suggestion est d'utiliser un proxy Web comme Charles et voir, si l'image a été demandée ou non. Et bien sûr, testez ceci dans les différents navigateurs.

2

Ce que vous voudrez peut-être à considérer est la définition des styles spécifiques IE dans une feuille séparée et chargement avec conditional comments, comme ceci:

<!--[if IE]> 
<link rel="stylesheet" id="ie-css" href="ie-specific.css" 
    type="text/css" media="all" /> 
<![endif]--> 

Cela ne charge la feuille avec des paramètres spécifiques IE et vous pouvez Remplacer les autres classes par des marqueurs !important. Les commentaires conditionnels ont été autour depuis IE5, et tout autre navigateur ignorera le bloc ci-dessus.

+0

La capture (au moins dans ce cas) est qu'il n'y a pas de division claire entre les navigateurs IE et le reste. Dans certains cas, je suis à la recherche de navigateurs FF et WebKit. Parfois j'ajoute Opera à la liste. Etc. –

+1

Probablement le meilleur pari est d'utiliser quelque chose comme Fiddler pour tracer les requêtes HTTP alors. Je suspecte que chaque navigateur sera différent. Regardez le violoneur ici: http: //www.fiddler2.com/fiddler2/ –

2

Je recommande juste d'ignorer les ombres dans IE.

La plupart des gens utilisent un seul navigateur et ils ne sauront pas qu'il doit y avoir des ombres. Ce n'est pas un gros problème si le site semble différent dans les différents navigateurs tant qu'ils ont l'air normal (ce qui signifie pas glitchy).

Sinon, utilisez un si balise pour c.-à-feuilles de style spécifiques, et vous pouvez faire tomber ombre là-bas avec:

.box { 
    filter: progid: DXImageTransform.Microsoft.dropShadow(
      color=#818181, 
      offX=5, offY=5, 
      positive=true); 
} 

Pour en savoir plus sur ce see here.

+0

Ce serait ma préférence aussi bien. Hélas, ce n'est pas ma décision. ; o) Je n'étais pas au courant du filtre IE pour l'ombre portée. Bonne info –

+0

Ah ... hélas, il semble que l'option de filtre crée une ombre solide (pas floue) et opaque. Bummer. –

1

Je suis assez sûr que tous les navigateurs web récents vont charger 'myImage.jpg'. En fait, le code que vous avez fourni décrit le mode CSS pur de préchargement des images sans utiliser javascript :)

+0

Je pense qu'il vaut mieux se tromper en supposant qu'il va charger l'image. En tant que tel, je pense que je vais créer une classe appelée 'shadow' et ensuite, via javascript, nous allons l'échanger pour shadow-image OU shadow-css et ensuite nous référençons seulement une classe dans le CSS. –

+0

(ou ... duh ... Je vais par défaut aux ombres CSS, et ensuite over-ride si nous avons besoin de l'image.Je vais juste inverser la logique dans mon CSS d'origine) –

+0

Eh bien, je viens d'apprendre que Firebug a intégré dans la surveillance du trafic. Agréable! Il se trouve (à ma grande surprise, en fait) que Firefox ne demande pas cette image. Intéressant ... –