用CSS3和Canvas来画网格

我们经常使用一些excel表格来处理数据,在html中,我们可以用table来制成表格。今天来看一下一些不同的方法。

方法一:使用CSS3的background的linear-gradient属性

linear-gradient表示一种线性渐变,指定好开始的坐标,以及线性渐变的参数,就可以实现背景颜色的多变。

先来看效果图:

看html代码:

<div class="grid"></div>

CSS代码:

        div,canvas{
            width: 400px;
            height: 280px;
            margin: 10px;
            border: 1px solid #000000;
        }
        .grid{
            background: -webkit-linear-gradient(top,transparent 39px,blue 39px,blue 41px,transparent 41px,transparent 79px,red 80px),
                        -webkit-linear-gradient(left,transparent 39px,yellow 39px,yellow 41px,transparent 41px,transparent 79px,green);
            background-size: 81px 81px;
        }

非常简单,如果仔细看,你就能看出它的使用规律。这里要注意,我使用的是chrome浏览器,如果在兼容多种浏览器,需要在linear-gradient加上相对应的前缀,比如IE:-ms-linear-gradient,firefox:-moz-linear-gradient,opera:-o-linear-gradient。

另外,我们注意到,虽然在CSS代码中,我们是先写横线的样式,再写竖线的样式的,但是,当纵向的线和横向的线相交时,在相交部分,横向的线是在纵向的线之上的。反之,则纵向的线会在横向的线之上。(什么原因暂时还不清楚)。

现在我们用canvas的方法实现一遍,效果如上图所示。

html代码:

<canvas></canvas>

JS代码:

        var canvas = document.getElementsByTagName(‘canvas‘)[0];
        canvas.width = 400;
        canvas.height = 280;
        if(canvas.getContext){
            var ctx = canvas.getContext("2d"),
                width = canvas.width,
                height = canvas.height;
            ctx.lineWidth = 2;       //先画横线
            for( var i = 1; i * 40 < height; i++ ){
                ctx.strokeStyle = i % 2 ? ‘blue‘ : ‘red‘;
                ctx.beginPath();
                ctx.moveTo(0,i * 40);
                ctx.lineTo(width,i* 40);
                ctx.stroke();
            }
       //再画纵线
            for( var j = 1; j * 40 < width; j++ ){
                ctx.strokeStyle = j % 2 ? ‘yellow‘ : ‘green‘;
                ctx.beginPath();
                ctx.moveTo(j * 40, 0);
                ctx.lineTo(j * 40, height);
                ctx.stroke();
            }

        }

在JS代码中,我们通过画简单的直线来实现了这个效果,但是注意,这里的效果暂时还和预期的有点出入:

横线和纵线相交时,纵线在上,这是因为我们在代码中,先画横线,再画纵线,所以很自然就会有这样的效果。

如果我们要达到预期的效果,有两种解决方案:

方案一:将画线的两个for循环的顺序调转过来,变成先画竖线,再画横线,则可以达到预期的效果。

方案二:使用 ctx.globalCompositeOperation属性,具体的做法:在原来的代码中,在画横线的for循环之前,加上一句:

ctx.globalCompositeOperation = ‘destination-over‘;

它表示,当线与线之间出现重叠时,重叠部分采用后来画的线的样式。

具体ctx.globalCompositeOperation的用法可以参考 这个

参考资料:使用CSS3绘制网格线

<- 本文完 ->

时间: 2024-11-09 01:49:12

用CSS3和Canvas来画网格的相关文章

css3 画网格

<!DOCTYPE><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>css画网格</title><link rel="stylesheet" href="http://wow.techbrood.com/css/normalize.css

[原创]css3简单几步画一个乾坤图

效果如上,鼠标移上去会有动画. 代码如下非常简单: 1 <html> 2 <head> 3 <style> 4 .outer{height:100px;width:200px;border-radius:100px 100px 0px 0px;border:solid 1px #666;border-bottom:none; margin:0 auto;background:#fff;overflow:hidden;} 5 .inner{width:300px;heig

Html5新特性 &lt;canvas&gt;画板画直线

 下面例子为用canvas标签画多条直线 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht

css3简单几步画一个乾坤图

原文:[原创]css3简单几步画一个乾坤图 效果如上,鼠标移上去会有动画. 代码如下非常简单: 1 <html> 2 <head> 3 <style> 4 .outer{height:100px;width:200px;border-radius:100px 100px 0px 0px;border:solid 1px #666;border-bottom:none; margin:0 auto;background:#fff;overflow:hidden;} 5 .

WinForm画网格并填充颜色

因为研究CodeCombat上的最后一题,自己尝试分解题目,然后想到需要画网格,还有最优化的方法 源代码如下 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace D

[转]html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法

前面的文章我已经讲了3种在canvas中画曲线的方法:arc,arcTo以及quadraticCurveTo.他们都有一个共同点,就是他们画的曲线都只能偏向一边,今天讲的bezierCurveTo与他们最大的不同点就是有两个控制点,即可以画出S形的曲线了. bezierCurveTo,也就是所谓的贝赛尔曲线了,如果你学过某些画图工具,就能马上理解. bezierCurveTo的语法如下: ctx.bezierCurveTo(x1,y1,x2,y2,x,y);他的参数我照例解释一下,其中的(x1,

[转]html5 Canvas画图教程(9)—canvas中画出矩形和圆形

本文讲一下在canvas中画出矩形和圆形的办法,他们属于基础图形.当然,基础图形本来不止他们,但在canvas中,只有画矩形与圆形不需要用其他方法模拟. canvas画矩形 1,fillRect与strokeRect fillRect可以直接填充出一个矩形,填充样式是你当前设置的样式:同理strokeRect就是直接描边一个矩形 他们的参数是一致的,依次是(起点x坐标,起点y,矩形的宽,矩形的高).这里的起点,注意,是指矩形的左上角那个点. 我们通常用他们来做简单的事,他们也只能做简单的事.为什

[转]html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法

继续讲canvas中画曲线的方法,今天讲quadraticCurveTo. 说实话这个方法有点吓人,单从函数名称上都可以初体验.话说,我觉得有必要把这个函数名缩短. quadratic的意思是二次,即数学中二次元方程那个二次.而ctx.quadraticCurveTo的参数如下: 代码如下: ctx.quadraticCurveTo(x1,y1,x,y); 其中x,y是终点的坐标,而x1,y1是曲线控制点的坐标?什么?你问我起点在哪里?起点在此之前用moveTo确定. 我之所以把控制点的坐标带上

[转]html5 Canvas画图教程(5)—canvas里画曲线之arc方法

在canvas画线条这篇文章中,我讲了画直线的方法,按理这篇画曲线的文章早该发了,但由于canvas画曲线比较特殊,我还没摸透,所以要一步步尝试. canvas里画曲线的难点之一,就在于他连曲线的函数就有4个!分别是arc,arcTo,quadraticCurveTo,bezierCurveTo.我从最简单的arc方法讲起吧. arc的作用是画一个正规的圆弧,可以是一个完整的圆,也可以是一个圆的某一段弧线. arc的语法如下: 代码如下: context.arc(x, y, radius, st