閑聊js5: 創建一個演示用的渲染庫3(尺寸這些事)

本篇主要關注css尺寸和元素尺寸
通過兩個Demo實驗,我們:
解決了一個問題: 由誰決定元素的顯示大小
提出另一個問題: 為什么會變形?


1. 通過一個實驗了解canvas元素尺寸與css尺寸之間的關系:

1. 沒有指定尺寸: (紅色) 
    <canvas  style="border: 1px solid red">

2. 指定元素尺寸不指定css尺寸(綠色) : 
    <canvas width="200" height="400" style="border: 1px solid green">

3. 同時指定元素尺寸和css尺寸(藍色): 
   <canvas style="border: 1px solid blue;width:150px;height:150px" width="200" height="400"></canvas>
canvas_size_demo.png

結論(chrome/firefox/ie11/edge/opera):

顯示結果 elem size css size
red: [300,150] no no
green: elem size決定 yes no
blue: 由css size決定 yes yes

2. 第二個實驗:

先強調如下要點:

  • css 的width/height 必須帶px/cm等單位
  • 元素的width/height 的單位只能是px,所以可以不寫單位

測試代碼如下(注意:只指定了css尺寸,沒指定elem尺寸):

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>隨風而行之青衫磊落險峰行JSDemo-RenderSurface</title>
    <script src="BLFES6Lib.js"></script>
</head>

<body>

    <canvas id="myCanvas" style="border: 1px solid blue;width:300px;height:500px">你的瀏覽器還不支持哦</canvas>

    <script>
        "use strict";
        let canvas = document.getElementById("myCanvas");
        let context = canvas.getContext('2d');
        let render = new BLFRender(context);
        let rect = new BLFRectSprite();
        rect.render(render);

        alert("1. elm size = [" + canvas.width + "," + canvas.height + "]");
        alert("2. css size = [" + canvas.style.width + "," + canvas.style.height + "]");
    </script>
</body>

</html>

你會發現如下事實:


嚴重形變.png
  • 沒有指定elem size,elm size 缺省值= [300,150] (上表結論,此處證實)
  • 元素顯示的區域大小由css size決定,顯示區=[300px,500px]
  • css size必須帶單位,而elem size不用帶單位,因為一定是像素表示(大家可以做個實驗,修改elem size.width = 100px/cm后,alert的結果和顯示的效果可以證實: 不管帶單位與否,或者單位是px還是cm...,dom都解釋為像素表示?。?!)
  • 渲染內容發生了嚴重的形變,這個才是我們需要了解的重點內容?。。?/strong>

通過上述兩個實驗,我們:

解決了一個問題: 由誰決定元素的顯示大??!
提出另一個問題: 為什么會變形?

下一篇,就了解為什么會變形以及盡量避免這個問題。涉及圖形學背后的一些原理,還是蠻好玩的(例如渲染表面,后備緩沖區,位塊傳輸等等)。

如果感覺有興趣,請毫不猶豫的給我點個贊.

忍不住show一下我的超帥裝備:

兩樹莓派套裝.jpg

1. 樹莓派3B操作系統的安裝(視頻)

我錄的樹莓派安裝視頻,有興趣的同學可以看看。很好玩的東西。我主要用來玩linux編程,也玩玩gpio編程。以后會多拍點樹莓派視頻。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容