Comment utiliser les sprites CSS à l'intérieur d'un responsive design
Je l'espère, il y aura un gourou CSS là-bas qui peut vous aider avec celui-ci...
Je suis en train de construire un réactif de mise en page pour un site qui comprend une barre de navigation horizontale en haut. Cette barre contient 5 boutons de chacun de la même largeur (bien que, évidemment, cette largeur doit être souple). Je voudrais utiliser les icônes au lieu de texte pour les boutons lorsque le menu est affiché sur un appareil avec une petite largeur de la fenêtre d'affichage. Je vais utiliser les media queries pour adapter la mise en page à utiliser le texte une fois que je ressens de la fenêtre d'affichage de la largeur a atteint une taille appropriée. Ceci est important parce que je ne suis pas d'anticiper avoir besoin de changer la taille des icônes elles-mêmes. Je suis content pour eux d'être d'une taille fixe, centré sur le bouton et si la taille du bouton lui-même des changements, alors il y aura tout simplement plus de "rembourrage" autour de l'centrée sur l'icône.
Normalement, je voudrais utiliser ont toutes les icônes dans une image et utiliser le sprite technique pour afficher uniquement la partie correcte de l'image, mais j'ai rencontré un problème. Si je veux le point d'ancrage de l'élément de remplir le parent d'un élément de liste alors comment puis-je centre le sprite?
Voici quelques exemple de balisage:
D'abord le html (extrait)
<nav>
<ul class="top_nav">
<li><a class="link_1" href="#">link 1</a></li>
<li><a class="link_2" href="#">link 2</a></li>
<li><a class="link_3" href="#">link 3</a></li>
<li><a class="link_4" href="#">link 4</a></li>
<li><a class="link_5" href="#">link 5</a></li>
</ul>
</nav>
Et je pourrais style comme ceci:
nav ul {
width: 100%;
overflow: auto;
}
nav li {
float: left;
width: 20%;
background: #2c2c2c; /* dark background for light icons */
}
nav li a {
display: block;
border: 1px solid #e7e7e7;
background-image: url(path/to/sprite.png);
background-repeat: no-repeat;
text-indent: -15000px;
width: 48px;
height: 48px;
margin: 0 auto;
}
nav li a.link_1 {
background-position: 0 0;
}
nav li a.link_2 {
background-position: 0 -49px;
}
etc....
Mais cela ne fera que me donner une zone cliquable de 48 px x 48 px au sein d'un bouton qui permet de changer la largeur selon la taille de l'élément parent. Si je fais le point d'ancrage de l'élément de remplissage il est parent d'un élément de liste, puis l'icône ne peut pas être centré à l'aide de la marge de la règle.
Je pourrais ajouter un autre élément à l'intérieur de l'élément d'ancrage qui était vide, mais avait l'icône de l'arrière-plan comme ceci:
<li><a href="#"><div class="link_1">Link 1</div></a></li>
Et de style avec:
nav li a {
display: block;
border: 1px solid #e7e7e7;
width: 100%;
}
nav li a div {
background-image: url(path/to/sprite.png);
background-repeat: no-repeat;
text-indent: -15000px;
width: 48px;
height: 48px;
margin: 0 auto;
}
nav li a div.link_1 {
background-position: 0 0;
}
Mais ce n'est pas un très sémantique ou solution élégante. Quelqu'un peut-il penser à quelque chose de mieux??
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser:
:before
/:after
) au lieu d'éléments réels pour garder un code propre;background-size
propriété de zoom des images d'arrière-plan;:before/:after
résoudre la question du responsive css sprites (aka une mise à l'échelle de fond)? Pourriez-vous fournir le code?J'ai créé un responsive CSS sprite generator.
Il fonctionne à l'aide de transparence des Png dans les données Uri pour garder le ratio d'aspect, un pourcentage background-position pour afficher l'image de droite, et le fond-sizing: 100% de l'échelle.
Contrairement à d'autres techniques là-bas, ce sera de travailler avec des images de différentes tailles et proportions dans un seul sprite.
En fait, j'ai une solution qui a de grandes croix-prise en charge du navigateur, a nice code propre, et est bien documenté pour l'utilisation de sprites comme une image de fond avec un peu de css balisage sur mon blog ici: http://pagecrafter.com/responsive-background-image-sprites-css-tutorial/
Essentiellement, il s'appuie sur un truc intéressant pour maintenir le ratio d'aspect de l'élément, tout en permettant à l'image d'arrière-plan pour rester à la taille complète du dit élément. Alors tout ce qui est nécessaire est de spécifier l'emplacement de l'arrière-plan de sprite en pourcentage! Cette méthode fonctionne bien aussi, parce que une fois que vous avez le css prêt, vous venez d'appliquer une classe à votre élément et vous êtes bon pour aller.