使用Compass精灵的伪背景裁剪

时间:2012-10-05 09:12:29

标签: css sass compass-sass css-sprites pseudo-element

我想弄清楚如何在Compass精灵中实现这样的背景裁剪: http://nicolasgallagher.com/css-background-image-hacks/

http://jsfiddle.net/blineberry/BhbrL/

这就是我在.sass文件中的内容:

@import "buttons/*.png"
@include all-buttons-sprites

.buttons-arrow
  background-image: none
  width: 30px
  height: 45px

.buttons-arrow:before
  +buttons-sprites(arrow)
  display: block
  content: ""
  width: 15px
  height: 27px

如你所见,我试图在没有背景图像的情况下制作.buttons-arrow然后我添加了背景图像。但是,它给了我这个.css文件:

.buttons-sprite, .buttons-arrow, .buttons-arrow:before .buttons-arrow {
  background: url('../images/buttons-s5ae2b3a1e9.png') no-repeat;
}

.buttons-arrow {
  background-position: 0 0;
}

.buttons-arrow:hover, .buttons-arrow.arrow_hover, .buttons-arrow.arrow-hover {
  background-position: 0 -27px;
}

.buttons-arrow {
  background-image: none;
  width: 30px;
  height: 45px;
  margin-left: 150px;
}

.buttons-arrow:before {
  display: block;
  content: "";
  width: 15px;
  height: 27px;
}

.buttons-arrow:before .buttons-arrow {
  background-position: 0 0;
}

.buttons-arrow:before .buttons-arrow:hover, .buttons-arrow:before .buttons-arrow.arrow_hover, .buttons-arrow:before .buttons-arrow.arrow-hover {
  background-position: 0 -27px;
}

.buttons-arrow:hover {
  background-color: #ea4800;
}

显然这是错误的,因为它合并到了这个.buttons-arrow:before .buttons-arrow

我只想要一个像这样的简单结果

.buttons-arrow {
  width: 30px;
  height: 45px;
  margin-left: 150px;
}

.buttons-arrow:before {
  background-image: url('../images/buttons-s5ae2b3a1e9.png');
  display: block;
  content: "";
  height: 27px;
  width: 15px;

如何使用精灵在Compass中对此进行编码?

2 个答案:

答案 0 :(得分:2)

由于这个地方已经死了,我会帮助那些从谷歌搜索这个地方的人。答案是:

把它放在首位:

$buttons: sprite-map("buttons/*.png")

我有 arrow.png arrow_hover.png 。我们的想法是使用sprite-map函数而不是@import all。然后确保包含:before伪元素的背景图像,但不包括原始内容:

.buttons-arrow
  width: 50px
  height: 50px
  &::before
    content: ""
    background: sprite($buttons, arrow) no-repeat
    display: block
    position: relative
    width: 20px
    height: 20px
  &:hover
    background-color: gray
    &::before
      content: ""
      background: sprite($buttons, arrow_hover) no-repeat
      position: relative
      width: 20px
      height: 20px

答案 1 :(得分:0)

基于@HP的答案,我可以弄清楚如何使其发挥作用。而不是

@include buttons-sprites(arrow)

只需使用

background: sprite($buttons-sprites, arrow);

这与@HP建议的解决方法非常相似,但我没有调用sprite-map而是使用隐式生成的变量$buttons-sprites