如何制作Upvote/Downvote按钮?

use*_*753 24 html css xhtml stylesheet styling

这只是为了造型,我试图以与在SO和Reddit上完成相同的方式进行upvote/downvote,从我可以看到他们使用箭头图像作为背景然后定位它,但我是一个CSS新手,我需要有人来指导我.提前致谢.

Jan*_*Jan 45

您可以通过向背景添加不同的图片来实现,一个按钮的每个状态.然而,有一种更清洁,更容易,更现代的方法来实现这一结果:Sprites.

精灵是保存为较大图像的一部分的图像.使用精灵的最大优点之一是减少到服务器的往返所有图像只需要一个Sprites请求.显示图片的元素将图像作为背景.背景相对于元素移动,因此元素仅显示图像的一部分.就像你在海报上移动相框一样(或者在这种情况下:在海报下移动海报)

在SO,他们制作一个包含按钮所有状态的图像.它们为按钮元素(span在本例中为a)提供固定的宽度和高度,并使用CSS为其添加背景.然后在click事件上使用javascript切换状态(打开或关闭)的类.现在你在CSS中唯一要做的就是用CSS类改变背景的位置:

上/下精灵图像

for (const btn of document.querySelectorAll('.vote')) {
  btn.addEventListener('click', event => {
    event.target.classList.toggle('on');
  });
}
Run Code Online (Sandbox Code Playgroud)
.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;
}
Run Code Online (Sandbox Code Playgroud)
Click to vote: <span class="vote"> </span>
Run Code Online (Sandbox Code Playgroud)

您可以轻松地以相同的方式向精灵添加更多状态,例如'hover'和'active'.甚至可以将整个页面的所有图像放在一个图像中.您可以使用firebug或Chrome开发人员工具对此进行验证.寻找'sprites.png'.

  • +1这种技术称为CSS Sprites,它提供了比替代方案更好的性能,即为每个按钮状态提供单独的图像.您可能希望将所有四种状态添加到一个图像中,然后按照Jan指定的方式更改背景. (4认同)
  • 您可以添加赞成票的 svg 路径吗 &gt; (2认同)

Cla*_*abe 7

我在这个链接中只使用了这些三角形的CSS:

http://css-tricks.com/snippets/css/css-triangle/

我希望它可以帮助某人


Kil*_*ish 5

您可以通过使用两个简单的图像来做到这一点……如果您没有 MSPaint,则在某些图像编辑器(如 Photoshop)中设计两个图像……

CSS代码是

#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;
}
Run Code Online (Sandbox Code Playgroud)

HTML代码:

<div id="voting">
    <div class="upvote"></div>
    <div class="downvote"></div>
</div>
Run Code Online (Sandbox Code Playgroud)