css - 从等距网格上的图 block 中剪出的图像

标签 css isometric

我的等轴测表设置为:

<table style="transform: rotateX(60deg) rotateZ(45deg); border-spacing: 0px">
  <tr style="transform: translateY(0em)"> <!-- For first row, future rows get translated down -->
    <td style="transform: translateX(0em)"> <!-- For first column, future columns get translated down -->
      <div class="tile">
        <div class="background"></div>
      </div>
    </td>
  </tr>
</table>

使用以下 CSS:

.tile {
  transform: translate3d(0em, 0em, 0em);
  width: 4em;
  height: 4em;
}

.background {
  height: calc(28.75em);
  width: calc(28.75em);
  background-size: 100%;
  background-image: url("/tiles/robot2/facing_north.png"), url("/tiles/plain_4/facing_east.png");
}

它会产生一个站在瓷砖上的小机器人,如下所示:

enter image description here

但是,机器人偏离了中心。因此,为了将其居中,我添加了以下 CSS:

.background {
  background-position-y: -3em, 0em;
}

这会将机器人向上移动,但不会将瓷砖向上移动,这非常完美!除此之外,我似乎把机器人的头切掉了一些:

enter image description here

如何向上移动机器人,使其看起来位于图 block 的中心,而不会将其头顶剪掉?我尝试了 overflow:visible; 但没有成功。

示例:

.container {
  position: relative;
  z-index: 10;
}

.iso {
  transform: rotateX(60deg) rotateZ(45deg);
  position: absolute;
  border-spacing: 0px;
  left: 200.0px;
  top: 100.0px;
}

.tile {
  transform: translate3d(0em, 0em, 0em);
  width: 4em;
  height: 4em;
}

.background {
  transform: rotateZ(-45deg) rotateY(-60deg) translate3d(-1.1em, -4.8em, 0em);
  height: calc(23em);
  width: calc(23em);
  background-size: 100%;
  background-image: url("https://femto.pw/us7j.png"), url("https://femto.pw/r44h.png");
  background-position-y: -2.5em, 0em;
  background-repeat: no-repeat;
}
<div class="container">
  <table class="iso">
    <tbody>
      <tr class="row--5 row" style="transform: translateY(0em);">
        <td class="col--5 iso_td" style="transform: translateX(0em);">
          <div class="tile">
            <div class="background"></div>
          </div>
        </td>
        <td class="col--4 iso_td" style="transform: translateX(4em);">
          <div class="tile">
            <div class="background"></div>
          </div>
        </td>
      </tr>
      <tr class="row--4 row" style="transform: translateY(4em);">
        <td class="col--5 iso_td" style="transform: translateX(0em);">
          <div class="tile">
            <div class="background"></div>
          </div>
        </td>
        <td class="col--4 iso_td" style="transform: translateX(4em);">
          <div class="tile">
            <div class="background"></div>
          </div>
        </td>
      </tr>
    </tbody>
  </table>
</div>

最佳答案

.container {
  position: relative;
  z-index: 10;
}

.iso {
  transform: rotateX(60deg) rotateZ(45deg);
  position: absolute;
  border-spacing: 0px;
  left: 200.0px;
  top: 100.0px;
}

.tile {
  transform: translate3d(0em, 0em, 0em);
  width: 4em;
  height: 4em;
}

.background {
  transform: rotateZ(-45deg) rotateY(-60deg) translate3d(-1.1em, -4.8em, 0em);
  height: calc(23em);
  width: calc(23em);
  background-size: 100%;
  background-image: url("https://femto.pw/r44h.png");
  background-position-y: -2.5em, 0em;
  background-repeat: no-repeat;
  position: relative;
}
.background::before{
content: '';
position: absolute;
top: -80px;
bottom: 0;
left: 0;
right: 0;
background-image: url("https://femto.pw/us7j.png");
background-size: contain;
background-repeat: no-repeat;
}
<div class="container">
  <table class="iso">
    <tbody>
      <tr class="row--5 row" style="transform: translateY(0em);">
        <td class="col--5 iso_td" style="transform: translateX(0em);">
          <div class="tile">
            <div class="background"></div>
          </div>
        </td>
        <td class="col--4 iso_td" style="transform: translateX(4em);">
          <div class="tile">
            <div class="background"></div>
          </div>
        </td>
      </tr>
      <tr class="row--4 row" style="transform: translateY(4em);">
        <td class="col--5 iso_td" style="transform: translateX(0em);">
          <div class="tile">
            <div class="background"></div>
          </div>
        </td>
        <td class="col--4 iso_td" style="transform: translateX(4em);">
          <div class="tile">
            <div class="background"></div>
          </div>
        </td>
      </tr>
    </tbody>
  </table>
</div>

关于css - 从等距网格上的图 block 中剪出的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63521619/

相关文章:

使用 z-index 的 CSS 轮播

css - 多列布局中的列宽属性

javascript - chop 没有宽度的省略号

php - 如何将 GET 添加到 <a href> 标签?

python - 需要一种巧妙的方法来为 pygame/pyOpenGL 项目创建一个大列表

java - 如何在等距 libgdx 中触摸时获取图 block 位置

javascript - 当 div 显示为无时,jquery ui slider 滚动条不起作用

javascript - 等距 map 上的平滑角色移动

java - 等距排序的比较误差

java - 等距图 block 生成