这个问题的真正答案——不涉及新的静态大小,但实际上允许 CSS 有效——是以下选项之一:
- 在 CSS 中,您可以覆盖单个属性并使用 !important; 跟随它们。这样做的缺点是任何进一步的定义也必须使用 !important 否则它们将被忽略:
[width], [height], [style]
{
width: 100vw!important;
min-height: 100vh!important;
}
- 使用 JQuery,您可以将内联属性值设置为空字符串。您大概可以在没有 JQuery 的情况下实现这一点,但我将把它作为练习留给您。
Javascript(JQuery):
$('[style]').attr( 'style', function(index, style){ return ''; });
$('[height]').attr( 'height', function(index, height){ return ''; });
$('[width]').attr( 'width', function(index, height){ return ''; });
CSS:
*, *:before, *:after
{
box-sizing: border-box;
}
body
{
width: 100vw;
min-height: 100vh;
padding: 0;
margin: 0;
}
.canvas-container,
canvas
{
width: inherit;
min-height: inherit;
}
canvas.lower-canvas
{
position: absolute;
top: 0;
}
之后,CSS 将按预期应用。
显然也有必要将更改告诉 Fabric:
function sizeCanvas()
{
var width = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
var height = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
canvas.setHeight( height )
canvas.setWidth( width )
}
window.addEventListener('resize', draw, false);
function initDraw()
{
// setup
}
function draw()
{
canvas.renderAll();
}
sizeCanvas();
initDraw();
这会将 Fabric 配置为视口大小,并在调整大小时保持相应大小。
值得注意的是,这个问题的出现有两个原因:
有人认为使用内联样式是一个好主意,应该受到严厉的谴责,因为在任何情况下这是不合适的做法。
Fabric 更改了 DOM 排列并将原始画布嵌套在具有第二个嵌套画布的新 div 中,这可能会导致意外。