【问题标题】:Square HTML canvas with pure CSS带有纯 CSS 的方形 HTML 画布
【发布时间】:2014-10-23 13:40:36
【问题描述】:

假设我有一个尺寸为 500 x 500 的 HTML 画布。以下 CSS 代码创建了一个填充宽度并将高度设置为相同值的画布,使其保持为方形画布。

canvas {
    width: 100%;
    height: auto;
}

有人会认为将其更改为以下 CSS 代码会使画布填充高度并设置等效宽度,使其保持正方形。 (这将用于横向模式等情况)

canvas {
    width: auto;
    height: 100%;
}

但事实并非如此。画布恢复到原来的 500 x 500。这是一个 JFiddle 示例:http://jsfiddle.net/0qp5zkgu/ 示例中的画布是 50 x 50,因此更容易看出差异。

【问题讨论】:

  • 你能举个合适的例子吗?
  • jsfiddle.net/0qp5zkgu 我将画布大小更改为 50 x 50,以便更容易看到差异。
  • 在调整窗口大小时查看this fiddle 中的控制台...车身高度是您的问题。
  • 它实际上就像 10 行代码。什么会导致身高不正确?
  • 您从未明确设置正文(和 html)的高度。这并不是说身体的高度是错误的......这是为 any 元素处理百分比高度的方式。它检查为其父级指定的高度。

标签: html css canvas


【解决方案1】:

您将不得不使用 javascript 来设置宽度和高度。

这是一个例子::

HTML:

<div id="main" role="main">
    <canvas id="respondCanvas" width="100" height="100">
        < !-- Provide fallback -->
    </canvas>
</div> 

CSS:

#main{
    display:block;
    width:100%;
} 

JS:

$(document).ready( function(){

//Get the canvas & context
var c = $('#respondCanvas');
var ct = c.get(0).getContext('2d');
var container = $(c).parent();

//Run function when browser  resize
$(window).resize( respondCanvas );

function respondCanvas(){
    c.attr('width', $(container).width() ); //max width
    c.attr('height', $(container).width() ); //set the height to the width to make a square

    //Redraw & reposition content
    var x = c.width();
    var y = c.height();             
    ct.font = "20px Calibri";

    ct.fillStyle = "#DDDDDD"; //black
    ct.fillRect( 0, 0, x, y); //fill the canvas

    var resizeText = "Canvas width: "+c.width()+"px";
    ct.textAlign = "center";
    ct.fillStyle = "#333333"; //white
    ct.fillText(resizeText, (x/2), (y/2) );
}

//Initial call
respondCanvas();
});

小提琴:: http://jsfiddle.net/dp40Lbux/1/

【讨论】:

  • 为什么 CSS 会给我们一个选项而不是另一个...我不想在 JS 中这样做...
  • 你必须使用javascript,因为画布的大小总是以像素为单位。
  • 好的,但是制作一个需要 JS 来帮助调整大小的响应式网页真的很烦人......
  • 你在创造什么需要画布?
  • 一款游戏。这将是一个方形画布。画布周围会有其他 css/html 标签和按钮等,这就是为什么我需要正确调整大小/放置它的原因。
猜你喜欢
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
相关资源
最近更新 更多