我正在寻找一种使用CSS(和必要时JS)在div内绘制网格的方法(例如http://www.artlex.com/ArtLex/g/images/grid.gif)。感觉应该相对直接,但我还没有弄清楚。非常感谢您的建议。
提前致谢, Lenny
提前致谢, Lenny
这里有一个简单的 CSS 纯解决方案,使用线性渐变:
html,
body,
.grid {
height: 100%;
width: 100%;
margin: 0;
}
.grid {
background-image:
repeating-linear-gradient(#ccc 0 1px, transparent 1px 100%),
repeating-linear-gradient(90deg, #ccc 0 1px, transparent 1px 100%);
background-size: 71px 71px;
}
<div class="grid"></div>
这里有一个使用 jQuery 的简单解决方案。该脚本将尝试填充尽可能多的网格元素而不会溢出。函数接受一个参数,定义网格的大小。
function createGrid(size) {
var ratioW = Math.floor($(window).width()/size),
ratioH = Math.floor($(window).height()/size);
var parent = $('<div />', {
class: 'grid',
width: ratioW * size,
height: ratioH * size
}).addClass('grid').appendTo('body');
for (var i = 0; i < ratioH; i++) {
for(var p = 0; p < ratioW; p++){
$('<div />', {
width: size - 1,
height: size - 1
}).appendTo(parent);
}
}
}
还需要一个简单的CSS样式:
.grid {
border: 1px solid #ccc;
border-width: 1px 0 0 1px;
}
.grid div {
border: 1px solid #ccc;
border-width: 0 1px 1px 0;
float: left;
}
这里有一个简单的演示:http://jsfiddle.net/yijiang/nsYyc/1/
下面是使用原生 DOM 函数的代码。我还应该更改初始比率计算来使用 DOM 函数,但我无论如何都不能让 已经修复了:window.innerWidth
返回准确的数字
function createGrid(size) {
var ratioW = Math.floor((window.innerWidth || document.documentElement.offsetWidth) / size),
ratioH = Math.floor((window.innerHeight || document.documentElement.offsetHeight) / size);
var parent = document.createElement('div');
parent.className = 'grid';
parent.style.width = (ratioW * size) + 'px';
parent.style.height = (ratioH * size) + 'px';
for (var i = 0; i < ratioH; i++) {
for (var p = 0; p < ratioW; p++) {
var cell = document.createElement('div');
cell.style.height = (size - 1) + 'px';
cell.style.width = (size - 1) + 'px';
parent.appendChild(cell);
}
}
document.body.appendChild(parent);
}
createGrid(10);
这基本上是jQuery代码的直接翻译。如果需要更高的性能,您可以切换到使用推送到数组中的字符串来生成框:
arr.push('<div style="width:', (size - 1), 'px;height:', (size - 1), 'px;"></div>');
最后
parent.innerHTML = arr.join('');
function drawGrid(width, height) {
var grid = '<div id="grid">',
cell_html = '',
i = 0, j = 0;
for( ; i < width; i++) {
cell_html += '<div class="cell"></div>';
}
for( ; j < height; j++) {
grid += '<div class="row">' + cell_html + '</div>';
}
grid += '</div>';
return grid;
}
(这是上面得票最高的 答案 的变种。)
body { box-sizing:border-box; margin:0; height:100%; width:100%; background-size:100px 100px;
background-image: repeating-linear-gradient(0deg, transparent, transparent 99px, #ccc 99px, #ccc 100px),
repeating-linear-gradient(-90deg, transparent, transparent 99px, #ccc 99px, #ccc 100px);
}
.gridlines { display: none; position:absolute; background-color:#ccc; }
JavaScript/jQuery:
function createGrid(size) {
var i,
height = $(window).height(),
width = $(window).width(),
ratioW = Math.floor(width/size),
ratioH = Math.floor(height/size);
for (i=0; i<= ratioW; i++) // vertical grid lines
$('<div />').css({
'top': 1,
'left': i * size,
'width': 1,
'height': height })
.addClass('gridlines')
.appendTo('body');
for (i=0; i<= ratioH; i++) // horizontal grid lines
$('<div />').css({
'top': 1 + i * size,
'left': 0,
'width': width,
'height': 1 })
.addClass('gridlines')
.appendTo('body');
$('.gridlines').show();
}
createGrid(50);
<!DOCTYPE html>
<html>
<head>
<style>
html, body {
margin: 0;
}
#main {
height: 11in; /* Double this and print at 50% */
position: relative;
width: 8.5in; /* Double this and print at 50% */
}
.grid {
background-image: repeating-linear-gradient(0deg,transparent,transparent 69px,#88F 69px,#88F 70px),
repeating-linear-gradient(-90deg,transparent,transparent 69px,#88F 69px,#88F 70px);
background-size: 70px 70px;
height: 100%;
position: absolute;
width: 100%;
}
.smallgrid {
background-image: repeating-linear-gradient(0deg,transparent,transparent 13px,#CCF 13px,#CCF 14px),
repeating-linear-gradient(-90deg,transparent,transparent 13px,#CCF 13px,#CCF 14px);
background-size: 14px 14px;
height: 100%;
position: absolute;
width: 100%;
}
</style>
</head>
<body>
<div id="main">
<div class="smallgrid"></div>
<div class="grid"></div>
</div>
</body>
</html>
这是一个演示代码的网站: http://jsfiddle.net/ykotfuaw/5/