让我们考虑以下代码:
.canvas {
width:150px;
height:150px;
}
canvas {
box-sizing:border-box;
border:5px solid;
}
<canvas height="150" width="150"></canvas>
<canvas class="canvas"></canvas>
我们canvas
定义了两个具有相同的宽度/高度,相同的边框和box-sizing:border- box
。我们可以清楚地看到,使用CSS属性的画布是尊重的box-sizing
(边界从宽度/高度减小),但是用属性定义的第一个忽略box- sizing
(边界被添加到宽度/高度)。
我首先认为这与属性的使用有关,但似乎与使用img
or 时不一样iframe
。
.canvas {
width:150px;
height:150px;
}
iframe,img {
box-sizing:border-box;
border:5px solid;
}
<iframe height="150" width="150"></iframe>
<iframe class="canvas"></iframe>
<img height="150" width="150" src="https://picsum.photos/200/300?image=1069">
<img class="canvas" src="https://picsum.photos/200/300?image=1069">
为什么这样的行为与canvas
元素?
经过一番搜索,我发现应该避免在画布上使用width / height属性,因为它将缩放画布并且不会像我们想象的那样调整其大小。
var canvas = document.querySelector("canvas"),
ctx = canvas.getContext("2d");
ctx.fillRect(0, 0, 150, 150);
canvas {
width: 150px;
height: 150px;
border:1px solid red;
}
<canvas ></canvas>
直观地讲,上面的代码应该产生一个150x150
正方形,但是我们以一个矩形结尾!这是因为最初是画布300x150
(默认尺寸),而正方形是在内部绘制的。然后,我们像对图像一样缩放整个思维,并获得了不想要的结果。
但是,使用attribute将创建所需的结果:
var canvas = document.querySelector("canvas"),
ctx = canvas.getContext("2d");
ctx.fillRect(0, 0, 150, 150);
canvas {
border:1px solid red;
}
<canvas height="150" width="150"></canvas>
这以某种方式解释了为什么浏览器box- sizing
为了避免缩小效果而忽略它,但仍然保持直觉,因为它可能导致之外的其他有害问题canvas
。如果这是原因,那么浏览器也应该这样做,img
因为它们面临相同的收缩效果。
再说一遍,为什么会这样?为什么浏览器决定忽略box-sizing
而不是缩小画布?
最重要的问题: 这种行为在哪里定义?
我找不到规范的哪一部分正在处理此问题。
推测一下,我会说这是规范中的这一段。
当其canvas上下文模式为none时,canvas元素不具有渲染上下文,并且其位图必须为完全透明的黑色,其固有宽度等于该元素的width属性的数值,而其固有高度等于该元素的width属性的数值。
height属性,这些值将以CSS像素进行解释,并在设置,更改或删除属性时进行更新。
那就是 位图 必须取自height和width属性。大小调整不起作用。
另请注意,HTML5呈现部分指出:
嵌入,iframe,img,对象或视频元素上的width和height属性,以及在Image
Button状态下具有type属性并且表示图像或用户期望最终表示图像的输入元素,映射到尺寸属性分别在元素上的宽度和高度。
那里没有提到帆布。
问题内容: HTML 元素可以具有 width / height 属性,还可以具有CSS width / height 属性: HTML属性和CSS属性之间有什么区别,它们应具有相同的效果吗? 问题答案: 可以在此处找到有关该主题的热门讨论:图像标签和CSS的Width属性 把它们加起来: 声明宽度值和高度值(可能不是图像的原始物理尺寸)或css声明(例如width:[valueX]; heigh
本文向大家介绍在不可替换元素上使用width/height/margin/padding会有什么样的表现?相关面试题,主要包含被问及在不可替换元素上使用width/height/margin/padding会有什么样的表现?时的应答技巧和注意事项,需要的朋友参考一下 display:block/inline-block 4个属性均能生效 display:inline 只有margin,paddin
问题内容: 因此,首先要设置场景: HTML CSS 这将在所有现代浏览器中生成如下所示的内容: CSS内部宽度测试,显示内箱超出了容器 现在,我知道这是符合标准的行为(正如我之前所知道的,但在本文中再次确认,并且我还知道是否在内部CSS声明中包含以下代码: …它将采用“边界框”模型,并得到对我来说似乎更直观的行为,但我只是发现自己试图从逻辑上论证为什么这样做是合理的,而我却无法做到。 对于我来说
本文向大家介绍HTML5 Canvas元素有什么用?相关面试题,主要包含被问及HTML5 Canvas元素有什么用?时的应答技巧和注意事项,需要的朋友参考一下 Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在HTML上进行图形操作,
本文向大家介绍box-sizing常用的属性有哪些?分别有什么作用?相关面试题,主要包含被问及box-sizing常用的属性有哪些?分别有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 box-sizing常用的属性有 content-box 和 border-box。 content-box 盒子的宽度不包含 border和padding,border-box盒子的宽度包含border 和
本文向大家介绍input元素size属性和width 的区别是什么?相关面试题,主要包含被问及input元素size属性和width 的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 size:在MDN的定义: 控件的初始大小。以像素为单位。但当type 属性为text 或 password时, 它表示输入的字符的长度。从HTML5开始, 此属性仅适用于当 type 属性为 text, s