javascript - CSS 透视图 : fit the trapezoid inside container bounds

标签 javascript css webkit-perspective

我有这个片段,其中包含整页 <canvas>使用 CSS 将元素转换为 45 度视角。然而,转换后的 Canvas 超出了页面的边界并被剪裁:

window.onload = window.onresize = function() {
  // draw a gradient on the canvas
  var canvas = document.querySelector('canvas');
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;
  var ctx = canvas.getContext('2d');
  var grad = ctx.createLinearGradient(0, 0, 0, canvas.height);
  grad.addColorStop(0, '#ff0000');
  grad.addColorStop(0.5, '#ffff00');
  grad.addColorStop(1, '#00ff00');
  ctx.fillStyle = grad;
  ctx.fillRect(0, 0, canvas.width, canvas.height);
};
body {
  margin: 0;
  overflow: hidden;
}

canvas {
  transform-style: preserve-3d;
  transform: rotateX(45deg);
}

.container {
  width: 100%;
  height: 100%;
  perspective: 50vw;
  perspective-origin: 50% 0%;
}
<div class="container">
  <canvas></canvas>
</div>

如何确保整个 Canvas 保持在页面边界内(梯形底边的宽度应与页面完全相同),同时保持透视效果? CSS 或 JavaScript 解决方案都可以,只要它们适用于任何页面大小。

最佳答案

使用 translateZ 向后翻译

在 CSS 中寻找注释

window.onload = window.onresize = function() {
  // draw a gradient on the canvas
  var canvas = document.querySelector('canvas');
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;
  var ctx = canvas.getContext('2d');
  var grad = ctx.createLinearGradient(0, 0, 0, canvas.height);
  grad.addColorStop(0, '#ff0000');
  grad.addColorStop(0.5, '#ffff00');
  grad.addColorStop(1, '#00ff00');
  ctx.fillStyle = grad;
  ctx.fillRect(0, 0, canvas.width, canvas.height);
};
body {
  margin: 0;
  overflow: hidden;
}

canvas {
  transform-style: preserve-3d;
  /* added translation here */
  transform: translateZ(-50vmax) rotateX(45deg);
}

.container {
  width: 100%;
  height: 100%;
  perspective: 50vw;
  perspective-origin: 50% 0%;
  
}
<div class="container">
  <canvas></canvas>
</div>

关于javascript - CSS 透视图 : fit the trapezoid inside container bounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51802195/

相关文章:

javascript - 如何检查元素类子项是否具有特定类

javascript - 使用 <a> 标签加载 Ajax 页面

css - Safari 上的内容闪烁

transform - Safari 透视变换截断文本

javascript - 转换表单中的特定值以避免 1.0 不等于 1

JavaScript 函数未定义 IE11

javascript - 使用 Ajax 返回加载的内容时功能不起作用

javascript - AngularJS 在 ngClass 更改后执行作用域函数

javascript - JQuery UI 工具提示 - 调用 ajax 后不透明度被破坏。

css - 如何使用 javascript 动态修改 CSS 标签值