css - IE11 在表格中的绝对位置

标签 css internet-explorer html-table html5-canvas css-position

我发现了类似的线程(此处),但无法制定出解决方案。

在我测试过的每个浏览器(Opera、Chrome、Edge、Firefox)中,我所做的都有效。在 IE11 中:完全没有。

这是我的 HTML:

<!DOCTYPE html>
<html style="margin: 0; padding: 0; height: 100%; width: 100%; overflow: hidden;">

<head>
  <script type="text/javascript">
    var img = new Image;
    img.src = "http://2.bp.blogspot.com/-UBq5Nb082x0/Tw7KfsY6EWI/AAAAAAAABwE/Joe2aqsoI0k/s1600/maltese_puppy.jpg";

    function start() {
      var canvas = document.getElementById('imageCanvas');
      if (canvas == null) {
        return;
      }
      if (canvas.getContext) {
        var ctx = canvas.getContext('2d');
        ctx.imageSmoothingEnabled = false;
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
      }
    }
  </script>
</head>

<body onload="start();" style="margin: 0; padding: 0; height: 100%; width: 100%; overflow: hidden;">
  <table cellspacing="0" cellpadding="0" style="margin: 0; padding: 0; width: 100%; height: 100%;">
    <tr>
      <td style="width: 100%; height: 1px;">
        Hi, I'm cute!
      </td>
    </tr>
    <tr>
      <td style="position: relative;">
        <div style="position: absolute; top: 0; bottom: 0; right: 0; left: 0; overflow: hidden;">
          <canvas id="imageCanvas" oncontextmenu="return false;" style="border: solid 5px red; margin: 0; padding: 0; width: 100%; height: 100%;">
    Your browser does not support the <code>canvas</code> element.
    </canvas>
        </div>
      </td>
    </tr>
  </table>
</body>

</html>

这是一个 jsfiddle:https://jsfiddle.net/krsevs46/

我要做的就是让图片完全“填满”(除了我在 WinForms 编程中使用的东西之外,找不到其他表达方式)。

这意味着当您调整浏览器的大小时,不会裁剪任何图片。您应该始终看到整个画面,从爪子到头顶。

我读到我所要做的就是交换 td 标签上的 position: relative;,并将其替换为 div 带有 position: relative 的标签,但围绕着我的另一个 div 标签。那可悲惨地失败了。我束手无策(我在另一个线程中的后续问题是为什么 Canvas 绘制的这张照片与原始照片相比如此糟糕!但我离题了)。

编辑:进一步阐述我所说的停靠填充图像的意思:

这是 Chrome,正在运行(第一行只占用足够的空间来容纳文本,然后表格的第二行用图像填充所有剩余空间):enter image description here

当我调整它所在的窗口大小时,图像仍然“填充”:enter image description here

现在,使用 IE,同样的代码,我看不到任何图像。但是如果我使用静态定位(删除相对位置和绝对位置),IE 不会停靠填充图像:enter image description here

当你缩小窗口时,你不再看到图像的一部分(爪子和下半部分),我希望它被挤在那里:enter image description here

编辑2:

Vadim 的答案很接近,但是当窗口达到大约 100 像素时,它开始切碎而不是填充。这是“最后一英里”,我花了这么长时间!因为我将显示一张缩小到 50-100 像素的图像。

enter image description here

最佳答案

移除绝对定位,canvas 将按预期显示。您也可以删除多余的包装器并添加 box-sizing: border-box。演示:

* {
  /* add this to include borders and padding in width and height */
  box-sizing: border-box;
}
<!DOCTYPE html>
<html style="margin: 0; padding: 0; height: 100%; width: 100%; overflow: hidden;">

<head>
  <script type="text/javascript">
    var img = new Image;
    img.src = "http://2.bp.blogspot.com/-UBq5Nb082x0/Tw7KfsY6EWI/AAAAAAAABwE/Joe2aqsoI0k/s1600/maltese_puppy.jpg";

    function start() {
      var canvas = document.getElementById('imageCanvas');
      if (canvas == null) {
        return;
      }
      if (canvas.getContext) {
        var ctx = canvas.getContext('2d');
        ctx.imageSmoothingEnabled = false;
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
      }
    }
  </script>
</head>

<body onload="start();" style="margin: 0; padding: 0; height: 100%; width: 100%; overflow: hidden;">
  <table cellspacing="0" cellpadding="0" style="margin: 0; padding: 0; width: 100%; height: 100%;">
    <tr>
      <td style="width: 100%; height: 1px;">
        Hi, I'm cute!
      </td>
    </tr>
    <tr>
      <td>
          <canvas id="imageCanvas" oncontextmenu="return false;" style="border: solid 5px red; margin: 0; padding: 0; width: 100%; height: 100%;">
    Your browser does not support the <code>canvas</code> element.
    </canvas>
      </td>
    </tr>
  </table>
</body>

</html>

关于css - IE11 在表格中的绝对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45473644/

相关文章:

html - 如何在网页上设置当前选定字段的样式

PHP session 不适用于 IE

html - 如何在 CSS 中垂直居中动态高度的单元格?

html - 基于 <div> 的结构中的 Colspan 替代方案

HTML如何获取此文件夹

css - 为什么当 Box 2 float 时,Box 3 的宽度、高度和背景就消失了?

ssl - 需要 IE/IIS 故障排除帮助

internet-explorer - 将 redux 存储传递到新窗口在 IE 中不起作用

不同客户端窗口大小的 HTML 表格大小

css - 使用 css 自定义默认工具提示