CSS中的对角堆栈效果

时间:2014-12-16 20:30:15

标签: css

我正在尝试在CSS中创建一堆扑克牌,其中每张牌都与前一张牌对角略微偏移。这就是它的样子:

.card {
    float: left;
    width: 100px;
    height: 140px;
    background-color: #fff;
    border: 1px solid #000;
    border-radius: 5px;
}
.card:nth-child(2) {
    margin-left: -98px;
    margin-top: -2px;
}
.card:nth-child(3) {
    margin-left: -98px;
    margin-top: -4px;
}
.card:nth-child(4) {
    margin-left: -98px;
    margin-top: -6px;
}

/* and so on... */

示例:http://jsfiddle.net/coev55w6/

我知道我可以通过为每张卡指定不同的边距来实现,但我想知道是否有更好的方法。

创建纯粹的水平偏移很容易:

.card {
    float: left;
    width: 100px;
    height: 140px;
    background-color: #fff;
    border: 1px solid #000;
    border-radius: 5px;
}
.card:not(:first-child) {
    margin-left: -98px;
}

纯粹垂直也很容易。但有没有办法只用几个CSS规则来获得对角偏移?

2 个答案:

答案 0 :(得分:4)

这有点像黑客,但如果你使用你提供的第二个选项,你最终会得到这种效果:

.card:not(:first-child)

在每张卡片后加<br>

<div>
    <div class=card></div><br>
    <div class=card></div><br>
    <div class=card></div><br>
    <div class=card></div><br>
</div>

的jsfiddle: http://jsfiddle.net/e4o0k2o5/

如果您使用line-height<br>以外的其他内容,则可能会对其进行微调。

答案 1 :(得分:2)

我不确定您是否愿意或能够更改HTML,但这是一个很好的替代HTML布局和CSS,以实现您想要的卡片传播。

&#13;
&#13;
.card {
  width: 100px;
  height: 140px;
  background-color: #fff;
  border: 1px solid #000;
  border-radius: 5px;
  position: relative;
  margin-top: 10px;
  margin-left: 10px;
}
.card2 {
  width: 100px;
  height: 140px;
  background-color: #fff;
  border: 1px solid #000;
  border-radius: 5px;
  position: relative;
  margin-top: -10px;
  margin-left: 10px;
}
&#13;
<div>
  <div class="card">
    <div class="card">
      <div class="card">
        <div class="card"></div>
      </div>
    </div>
  </div>
  <br/>
  <br/>
  <br/>
  <br/>
  <div>
    <div class="card2">
      <div class="card2">
        <div class="card2">
          <div class="card2"></div>
        </div>
      </div>
    </div>

  </div>
&#13;
&#13;
&#13;