Ответ 1
Это центрирует холст горизонтально:
#canvas-container {
width: 100%;
text-align:center;
}
canvas {
display: inline;
}
HTML:
<div id="canvas-container">
<canvas>Your browser doesn't support canvas</canvas>
</div>
Как разделить страницу с HTML5 canvas
так, чтобы canvas
Занимает 80% ширины
Имеет соответствующую высоту и ширину пикселей, которые эффективно определяют отношение (и пропорционально поддерживаются, когда холст растянут до 80%)
Центрируется как по вертикали, так и по горизонтали
Можно предположить, что canvas
- единственное, что есть на странице, но не стесняйтесь инкапсулировать его в div
, если это необходимо.
Это центрирует холст горизонтально:
#canvas-container {
width: 100%;
text-align:center;
}
canvas {
display: inline;
}
HTML:
<div id="canvas-container">
<canvas>Your browser doesn't support canvas</canvas>
</div>
Глядя на текущие ответы, я чувствую, что нет простого и чистого исправления. На всякий случай кто-то проходит мимо и ищет правильное решение. Я довольно успешно с помощью некоторых простых CSS и javascript.
Центральное полотно до середины экрана или родительского элемента. Нет обертывания.
HTML:
<canvas id="canvas" width="400" height="300">No canvas support</canvas>
CSS
#canvas {
position: absolute;
top:0;
bottom: 0;
left: 0;
right: 0;
margin:auto;
}
JavaScript:
window.onload = window.onresize = function() {
var canvas = document.getElementById('canvas');
canvas.width = window.innerWidth * 0.8;
canvas.height = window.innerHeight * 0.8;
}
Работает как проверенный шарм: firefox, chrome
Проверено только на Firefox:
<script>
window.onload = window.onresize = function() {
var C = 0.8; // canvas width to viewport width ratio
var W_TO_H = 2/1; // canvas width to canvas height ratio
var el = document.getElementById("a");
// For IE compatibility http://www.google.com/search?q=get+viewport+size+js
var viewportWidth = window.innerWidth;
var viewportHeight = window.innerHeight;
var canvasWidth = viewportWidth * C;
var canvasHeight = canvasWidth / W_TO_H;
el.style.position = "fixed";
el.setAttribute("width", canvasWidth);
el.setAttribute("height", canvasHeight);
el.style.top = (viewportHeight - canvasHeight) / 2;
el.style.left = (viewportWidth - canvasWidth) / 2;
window.ctx = el.getContext("2d");
ctx.clearRect(0,0,canvasWidth,canvasHeight);
ctx.fillStyle = 'yellow';
ctx.moveTo(0, canvasHeight/2);
ctx.lineTo(canvasWidth/2, 0);
ctx.lineTo(canvasWidth, canvasHeight/2);
ctx.lineTo(canvasWidth/2, canvasHeight);
ctx.lineTo(0, canvasHeight/2);
ctx.fill()
}
</script>
<body>
<canvas id="a" style="background: black">
</canvas>
</body>
чтобы центрировать холст в окне + "px", следует добавить в el.style.top
и el.style.left
.
el.style.top = (viewportHeight - canvasHeight) / 2 +"px";
el.style.left = (viewportWidth - canvasWidth) / 2 +"px";
поместите холст в теги абзацев следующим образом:
<p align="center">
<canvas id="myCanvas" style="background:#220000" width="700" height="500" align="right"></canvas>
</p>
Учитывая, что холст ничем не отличается от JavaScript, используйте JavaScript также для определения размера и позиционирования (вы знаете: onresize
, position:absolute
и т.д.)
Изменение размера холста с помощью css - не очень хорошая идея. Это должно быть сделано с помощью Javascript. См. Приведенную ниже функцию, которая делает это
function setCanvas(){
var canvasNode = document.getElementById('xCanvas');
var pw = canvasNode.parentNode.clientWidth;
var ph = canvasNode.parentNode.clientHeight;
canvasNode.height = pw * 0.8 * (canvasNode.height/canvasNode.width);
canvasNode.width = pw * 0.8;
canvasNode.style.top = (ph-canvasNode.height)/2 + "px";
canvasNode.style.left = (pw-canvasNode.width)/2 + "px";
}
здесь: http://jsfiddle.net/9Rmwt/11/show/
.
Те же коды от Nickolay выше, но проверены на IE9 и хром (и удалены дополнительные рендеринга):
window.onload = window.onresize = function() {
var canvas = document.getElementById('canvas');
var viewportWidth = window.innerWidth;
var viewportHeight = window.innerHeight;
var canvasWidth = viewportWidth * 0.8;
var canvasHeight = canvasWidth / 2;
canvas.style.position = "absolute";
canvas.setAttribute("width", canvasWidth);
canvas.setAttribute("height", canvasHeight);
canvas.style.top = (viewportHeight - canvasHeight) / 2 + "px";
canvas.style.left = (viewportWidth - canvasWidth) / 2 + "px";
}
HTML:
<body>
<canvas id="canvas" style="background: #ffffff">
Canvas is not supported.
</canvas>
</body>
Верхнее и левое смещение работает только при добавлении px
.
Обертка с помощью div должна работать. Я тестировал его в Firefox, Chrome на Fedora 13 (демонстрация).
#content {
width: 95%;
height: 95%;
margin: auto;
}
#myCanvas {
width: 100%;
height: 100%;
border: 1px solid black;
}
И холст должен быть заключен в тег
<div id="content">
<canvas id="myCanvas">Your browser doesn't support canvas tag</canvas>
</div>
Сообщите мне, если это сработает. Приветствия.
Что касается предложения CSS:
#myCanvas {
width: 100%;
height: 100%;
}
По стандарту CSS не имеет размер системы координат холста, он масштабирует содержимое. В Chrome упомянутый CSS масштабирует холст вверх или вниз, чтобы он соответствовал макету браузера. В типичном случае, когда система координат меньше размеров браузера в пикселях, это фактически снижает разрешение вашего чертежа. Это, скорее всего, приводит к непропорциональному рисованию.
Простой:
<body>
<div>
<div style="width: 800px; height:500px; margin: 50px auto;">
<canvas width="800" height="500" style="background:#CCC">
Your browser does not support HTML5 Canvas.
</canvas>
</div>
</div>
</body>