我是一名经验丰富的.net开发人员,但我们都有可以从改进中受益的领域。我觉得我严重缺乏HTML/CSS技能,我正在努力在这方面自学。
我正在尝试为监控本地网络带宽消耗的应用程序创建HTML布局。我设想布局由4个元素组成:
+--------------------------+
+ Controls +
+--------+-----------------+
+ Legend + Graph +
+ + +
+ + +
+ + +
+ + +
+--------+-----------------+
+ Log +
+--------------------------+
-
控制
-这是一个狭窄的区域,允许清除、暂停和以其他方式控制图形。它还允许显示和隐藏日志区域。这意味着布局需要适应隐藏的日志区域。
-
传奇
-是一个
table
这将在图表上列出所有系列。它将显示序列颜色以及与序列关联的一些数字数据。如果图例中有更多行适合屏幕,则可以垂直滚动图例区域。该区域不需要水平滚动,假设它总是足够窄。这个
height
“图例”(和“图形”)应占据“控制”区域和“日志”区域未使用的所有剩余空间。这个
width
传说将等同于自然
桌子
宽度
.
-
图表
-这里将有一个在HTML上绘制的图形
canvas
。这将在水平和垂直方向上占用所有可用空间。
-
日志
-这里将显示两三行日志。如果要显示的行数超过3行,则此区域应有一个垂直滚动条。这个区域需要能够隐藏。这个
身高
这个区域的面积可以被修复。(在
100px
-
200px
).
布局应适应窗口重新调整大小,并在窗口变小时保持下降(当然要到一定程度)。除非窗口太小,否则它不应该有外部水平和垂直滚动条。
不幸的是,我在几个地方都做不好。
这是我的代码:
<html>
<head>
<style>
* {margin:0;padding:0;height:100%;}
html, button, input, select, textarea {
font-family: sans-serif;
font-weight: 100;
letter-spacing: 0.01em;
}
.container {
min-height:100%;
position:relative;
}
.control {
background:green;
width:100%;
height:auto;
margin-top: 0;
}
.content {
width:100%;
margin:0;
margin-top:0;
margin-bottom:0;
}
.legend {
position:relative;
background:blue;
float:left
}
.graph {
background:red;
}
.log {
background:yellow;
width:100%;
height:auto;
position:absolute;
margin-top: 0;
margin-bottom: 0;
bottom:0;
left:0;
}
.table {
border-collapse: collapse;
border-spacing: 0;
empty-cells: show;
border: 1px solid #cbcbcb;
}
.table td,
.table th {
border-left: 1px solid #cbcbcb;
border-width: 0 0 0 1px;
font-size: inherit;
margin: 0;
overflow: visible;
padding: 0.5em 1em;
}
.table thead {
background-color: #e0e0e0;
color: #000;
text-align: left;
vertical-align: bottom;
}
.table td {
background-color: transparent;
}
.table-odd td {
background-color: #f2f2f2;
}
</style>
</head>
<body>
<div class="container">
<div class="control">header1<br/>header2</div>
<div class="content">
<div class="legend">
<table class="table">
<thead>
<tr>
<th>#</th>
<th>Make</th>
<th>Model</th>
<th>Year</th>
</tr>
</thead>
<tbody>
<tr class="table-odd">
<td style="background-color: #FFB300">1</td>
<td>Honda</td>
<td>Accord</td>
<td>2009</td>
</tr>
<tr>
<td style="background-color: #803E75">2</td>
<td>Toyota</td>
<td>Camry</td>
<td>2012</td>
</tr>
<tr class="table-odd">
<td style="background-color: #FF6800">3</td>
<td>Hyundai</td>
<td>Elantra</td>
<td>2010</td>
</tr>
<tr>
<td style="background-color: #A6BDD7">4</td>
<td>Ford</td>
<td>Focus</td>
<td>2008</td>
</tr>
<tr class="table-odd">
<td style="background-color: #C10020">5</td>
<td>Nissan</td>
<td>Sentra</td>
<td>2011</td>
</tr>
<tr>
<td style="background-color: #CEA262">6</td>
<td>BMW</td>
<td>M3</td>
<td>2009</td>
</tr>
<tr class="table-odd">
<td style="background-color: #817066">7</td>
<td>Honda</td>
<td>Civic</td>
<td>2010</td>
</tr>
<tr>
<td style="background-color: #007D34">8</td>
<td>Kia</td>
<td>Soul</td>
<td>2010</td>
</tr>
</tbody>
</table>
</div>
<div class="graph"><canvas></canvas></div>
</div>
<div class="log">log1<br/>log2</div>
</div>
<script>
function resize() {
var canvas = document.querySelector('canvas');
canvas.style.width = '100%';
canvas.style.height = '100%';
canvas.width = canvas.offsetWidth;
canvas.height = canvas.offsetHeight;
ctx = canvas.getContext('2d');
ctx.strokeStyle='yellow';
ctx.beginPath();
ctx.moveTo(0,0);
ctx.lineTo(canvas.width,canvas.height);
ctx.stroke();
}
resize();
window.addEventListener('resize', resize, false);
</script>
</body>
</html>
这是相应的
JSFiddle
我面临的特殊问题:
-
为什么?
帆布
正在封闭外部呈现
div
? 这对我来说很奇怪,我不知道为什么。
-
我如何制作
桌子
自然地被隔开?特别地:
-
为什么第一行这么高?
-
我如何制作
桌子
不要全部拿走
身高
? 是包围潜水
height:100%
,不是桌子,为什么它这么高?
-
如果它不适合
身高
?
-
图例/图形区域似乎延伸到日志区域下方。为什么?我该如何预防?
-
最后,如何使日志区域具有固定高度并可滚动?
对不起,我知道这个问题很难回答,我会感激地接受任何帮助和/或建议。我确实意识到我缺乏基本的理解,但这正是我要努力克服的。今天晚上,我花了大部分时间研究这个话题,并寻找能够让我至少把这个不起作用的例子放在一起的来源。我对JavaScript很熟悉,我主要需要帮助的是HTML/CSS。我研究了关于不同DOM对象的属性的文档,但很难弄清楚
什么
要使用的属性以及如何使用。