Ceci est juste pour le style, j'essaie de faire un upvote/downvote de la même manière que cela est fait sur SO et Reddit, d'après ce que je peux voir, ils utilisent des images fléchées comme arrière-plans, puis le positionner, mais je suis un novice CSS et j'ai besoin de quelqu'un pour me promener à travers elle. Merci d'avance.Comment puis-je créer un bouton Upvote/Downvote?
Répondre
Vous pouvez le faire en ajoutant une image différente à l'arrière-plan, une pour chaque état du bouton. Il y a cependant une manière plus propre, plus facile et plus moderne de réaliser ce résultat: Sprites.
Une image-objet est une image enregistrée en tant que partie d'une image plus grande. L'un des plus grands avantages de l'utilisation des sprites est la réduction des allers-retours au serveur pour toutes les images à une seule requête pour les Sprites. L'élément pour afficher une image a l'image en arrière-plan. L'arrière-plan est déplacé par rapport à l'élément afin que l'élément n'affiche qu'une partie de l'image. Comme lorsque vous déplacez un cadre photo sur une affiche (ou dans ce cas: déplacez l'affiche sous le cadre)
A SO, ils créent une image qui contient tous les états du bouton. Ils donnent à l'élément pour le bouton (un span
dans ce cas) une largeur et une hauteur fixes et ajoutent l'arrière-plan avec CSS. Puis basculez une classe pour l'état (activé ou désactivé) avec javascript sur l'événement click. Maintenant, la seule chose que vous avez à faire en CSS est de changer la position de l'arrière-plan avec des classes CSS:
$('.vote').click(function() {
$(this).toggleClass('on');
});
.vote {
display: inline-block;
overflow: hidden;
width: 40px;
height: 25px;
cursor: pointer;
background: url('http://i.stack.imgur.com/iqN2k.png');
background-position: 0 -25px;
}
.vote.on {
background-position: 0 2px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Click to vote: <span class="vote"> </span>
Vous pouvez le faire en utilisant deux images simples ... conception deux images dans certains éditeurs d'images comme Photoshop, si u n'ont pas MSPaint ...
code CSS est
#voting{
width:30px;
height:40px;
}
.upvote{
width:30px;
height: 20px;
cursor: pointer;
}
.downvote{
width:30px;
height: 20px;
background: url('downvote.jpg') 0 0 no-repeat;
cursor: pointer;
}
Code HTML:
<div id="voting">
<div class="upvote"></div>
<div class="downvote"></div>
</div>
J'utilisé que CSS en utilisant ces triangles dans ce lien:
http://css-tricks.com/snippets/css/css-triangle/
J'espère que cela aide quelqu'un
Merci Claudio, c'est une façon très élégante et intéressante de le faire. – Arwin
Merci, mais comment centrer les triangles? – cwhisperer
trouvé la solution "marge: 0 auto;" – cwhisperer
1 La technique est appelée sprites CSS et offre de meilleures performances que l'alternative, qui est d'avoir une image séparée pour chaque état du bouton. Vous voudrez probablement ajouter tous les quatre états dans une image puis changer l'arrière-plan comme spécifié par Jan. –
Donc, en bref, j'ai besoin d'apprendre le javascript? – user519753
Oui, mais pour cette application, c'est assez basique. Vous devriez apprendre les bases de toute façon si vous voulez développer pour le web. – Jan