Réinitialisation de l'image de la largeur et de la hauteur définie via css

Je suis en train de créer un fluide-mise en page en html, contenant des images.
Pour l'instant, j'ai 2 tailles pour la mise en page. La mise en page par défaut est utilisé pour afficher une 1000px de large site. Si l'écran est assez large (plus large que 1200px), j'ai d'améliorer de nombreux aspects avec les css media queries.

J'ai un DIV conteneur qui est de 600px de large pour la mise en page par défaut, et 700 pixels pour le renforcement de la mise en page.
Il y a une image aléatoire à l'intérieur, pour qui je sais que certaines métadonnées (largeur et hauteur). J'ai peut-être besoin de réduire la taille de l'image si elle est trop grande pour le conteneur.

Donc j'utilise ce code pour avoir un fluide de mise

<div class="container">
  <!-- for a 650px/400px image, the downsized version is 600px/369px -->
  <img src="/image?id=1234" width="650" height="400" style="width:600px;height:369px" />
</div>

et le style

@media screen and (min-width:1200px){
  .container IMG {
    width:auto !important;
    height:auto !important;
  }
}
  • Voici comment cela fonctionne:

Dans le cas de la mise en page par défaut, le style en ligne s'applique. Alors l'image est réduite à 600px/369px pour adapter le contenant.
Sinon, la requête de média de style s'applique, et l'image est la valeur par défaut de la largeur/hauteur (je sais l'image n'est jamais, large de plus de 700 pixels, donc tout va bien).

  • Mon problème vient de l'état de chargement de l'image et de l'espace réservé par le navigateur. Le comportement de chrome/firefox est le même, mais est assez étrange pour moi. Pas testé avec IE (pas ma priorité en fait)

Pour la mise en page par défaut, pas de problème, la ligne-style s'applique toujours. Le navigateur affiche un espace blanc correspondant à l'image.

Pour le renforcement de la mise en page, la fonction "auto" tailles s'applique. Mais le navigateur ne sait pas la taille normale de l'image alors qu'il n'est pas entièrement chargé, et il semble que "auto" est équivalent à 0px. Il serait parfait si la largeur et la hauteur attributs de l'image appliquée. Mais il n'est pas le cas. Le résultat est qu'aucun espace n'est réservé pour l'image, qui n'est pas le comportement que je veux.

  • Une première solution que j'ai trouvé est d'ajouter un autre inline règle css pour l'image. Si j'ajoute "min-width:600px; min-height:369px" l'espace réservé pour l'image est toujours 600x369 pixels, au lieu de 0 pixels pour le renforcement de la mise en page. C'est mieux, mais pas encore parfait.

-- Qu'en pensez-vous ?

  • Est-il possible de "réinitialiser" le css au lieu de passer outre avec la fonction "auto !important" règle ?
  • Devrais-je utiliser une autre approche ?
  • Je peut utiliser du javascript, mais je pense que c'est une mauvaise idée de s'appuyer sur elle. En fait, j'ai peut-être beaucoup de conteneurs similaire à celle décrite ci-dessus. Je préfère une solution automatique (css est grand pour que).
Savez-vous si il est possible d'ajouter une ligne de media query pour un élément ? Je ne pense pas que c'est possible. Mais si elle l'est, je pourrais écrire: <img src="..." style="width:600px;height:369px; @media screen and (min-width:1200px){width:650px;height:400px}" />

OriginalL'auteur Mat | 2012-03-30