2008-11-11 7 views
12

J'ai écrit un code qui crée automatiquement des sprites CSS basés sur les balises IMG dans une page et les remplace par des DIV avec (ce que je pensais être) CSS approprié pour positionner l'image de sprite comme arrière-plan. Le problème est que je n'arrive pas à faire en sorte que les DIV se comportent comme des remplacements pour les IMG. Si je laisse la valeur 'display' par défaut à 'block' alors si l'IMG original était positionné à la fin d'un texte, le DIV de remplacement sautera à la ligne suivante après le texte (ce qui est bien sûr ce que Je m'attendrais à quelque chose avec display: block à faire).Comment puis-je faire un DIV se comporter comme un IMG pour une utilisation comme sprite CSS?

Si je change le 'display' en inline, alors le DIV reste sur la même ligne que le texte mais il ignore la 'largeur' et la 'hauteur' que j'ai définies et réduites. J'ai essayé de mettre   à l'intérieur de la DIV, mais il ne prend alors assez de largeur pour contenir le nbsp.

J'ai essayé d'ajuster l'affichage à toutes les valeurs possibles (y compris les "obscures" comme "table-rangée", "run-in", "compact", etc.), mais sans aucune chance. Est-il même possible de créer un DIV avec le même comportement de mise en page qu'un IMG?

Je suis ouvert à avoir quelque chose de plus compliqué qu'un simple DIV, mais j'ai essayé les choses évidentes là (une DIV dans une autre où la DIV intérieure est affichée: bloc avec l'ensemble externe à afficher: inline) mais je n'ai pas trouvé une combinaison qui fonctionne.

Il y a toujours des choses spécifiques que je peux faire en dehors du IMG/DIV remplacé pour obtenir la mise en page que je veux, mais mon but est d'avoir un mécanisme auto-CSS-sprite générique qui fonctionne indépendamment du reste du HTML.

Répondre

13

Avez-vous essayé display: inline-block;?

vous devrez peut-être utiliser aussi display: -moz-inline-block; pour firefox2

+0

C'était rapide! –

1

Affichage: le bloc inline est supposé fonctionner dans cette situation. Est-ce que tu l'as essayé?

+0

Je nous ai dû affichage: -moz-inline-block; affichage: en ligne-bloc; pour le faire fonctionner dans les deux navigateurs, mais cela a fait l'affaire. – John

4

Les images ont un équivalent de "display: inline-block". Ce n'était pas inclus à l'origine dans CSS, mais a été ajouté en partie pour répondre au fait que les images se comportent de cette façon.

Le problème est que tous les navigateurs le supportent maintenant. Si vous voulez supporter les navigateurs il y a encore un an, vous êtes bloqué.

Une autre solution, mais moins efficace, consiste à faire flotter le div ("float: left").

en-bloc: introduit dans CSS 2.1. Cela provoque la génération par l'élément d'une boîte d'éléments de bloc qui sera transmise avec le contenu environnant comme s'il s'agissait d'une seule boîte en ligne (se comportant comme un élément remplacé [signifiant une image]).

Source Mozilla Developer Center

Questions connexes