이 Codepen은 페이지를 4 등분 사분면으로 나누는 그리드의 사용법을 보여줍니다. 각 사분면에는 캔버스 요소가 포함되어 있습니다. 이 기능을 사용하려면 Chrome에서 '실험용 웹 플랫폼 기능'을 사용하십시오.CSS 디스플레이로 내용 크기를 정의하는 방법 : 격자를 수용하는 것이 아니라
목표는 그리드의 크기와 레이아웃을 기반으로 캔버스의 크기를 조정할 수 있도록하는 것입니다. HTML :
<div class="wrapper">
<div class="box"><canvas></canvas></div>
<div class="box"><canvas></canvas></div>
<div class="box"><canvas></canvas></div>
<div class="box"><canvas></canvas></div>
</div>
CSS :
html,
body {
margin: 0;
padding: 0;
height: 100vh;
width: 100vw;
}
.wrapper {
height: 100%;
box-sizing: border-box;
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(2, 1fr);
}
.box {
border: 2px solid #aaaaaa;
border-radius: 5px;
}
JS :
const els = Array.from(document.querySelectorAll('.wrapper div'))
const drawCanvases = function (els) {
els.forEach(el => {
const can = el.querySelector('canvas')
can.width = can.parentElement.clientWidth
can.height = can.parentElement.clientHeight-4
var ctx = can.getContext("2d")
ctx.clearRect(0, 0, can.width, can.height)
ctx.font = "30px Arial"
var mx = can.width/2
var my = can.height/2
ctx.fillText(`${can.width}px, ${can.height}px`,mx,my)
})
}
window.addEventListener('resize', e => {
drawCanvases(els)
})
drawCanvases(els)
문제는 캔버스 위와 같이 부모 div 요소로 크기를 설정 한 경우, 그리드 것이다 열/행 크기를 더 작게 만들 수 없습니다. 요소의 중앙에 캔버스 크기를 표시하는 Codepen을 시도하십시오. 캔버스 요소를 끌어서 만들 수는 있지만 결코 축소 할 수는 없습니다.
캔버스에 설정해야하는 크기를 수동으로 다시 계산하지 않고도이 작업을 수행 할 수 있습니까?
절대적으로 캔버스를 상대적 div로 설정할 수도 있습니다. 따라서 크기를 축소하는 동안 캔버스가 절대 오지 않게됩니다. 문제를 보여주는 기본적인 스 니펫이나 jsfiddle을 설정할 수 있습니까? :) 아이디어를 설명하는 데 유용 할 수 있습니다. –
여기에 문제를 설명하는 [Codepen] (http://codepen.io/blomcode/pen/ryewjb)이 있습니다. 아래 @BrettDeWoody를 기반으로합니다. 창을 작게 시작하고 중간에 인쇄 된 각 캔버스의 크기를 확인하십시오. 드래그하여 창 크기를 늘리거나 캔버스 크기가 커지지 만 크기를 작게 만들 수는 없습니다. :) 요점은 내가 그리드가 모든 레이아웃과 배치를 할 수있게하고 싶다는 것이며, 캔버스는 부모에게 크기를 조정하려고 시도한다는 것입니다 (분명히 clientWidth/Height는 여기에 맞지 않습니다.) –
나는 문제를보다 명확하게하기 위해 질문을 편집했고 아래의 @BrettDeWoody가 제공 한 예제 코드를 많이 기반으로하는 코드 예제를 제공합니다. –