用CSS实现柱状图(Bar Graph)的方法(三)——复杂柱状图的实现
作者:dudo 来源:dudo博客 发布时间:2008-05-26 13:36:00
在前面的文章中,我分别介绍了基于列表元素柱状图和基于表格元素柱状图的实现方法,虽然方法比较简单,但是它却包含了基本的实现原理。在了解了前面两节的基础知识后,我们只以利用它来实现更加复杂的柱状图效果。
一、情景
假设有一家公司,要统计2007年1~4季度南北区域产品的销售状况,那么可能需要做类似下面的这张表:
其中Q1~Q4分别代表1~4季度,橙色和蓝色分别代表北方和南方的产品销售情况。现在我们又把这张Excel统计出来的数据表呈现在网页上。
二、准备
在仔细研究了上面的图形之后,我们发现,大体可以把这个柱状图分为以下几个部分,首先按季度分为四个组,然后再按区域划分两组,也是先分大组再分小组,组内分组。有了这样的印象之后,我们就可以开始构建页面元素。在选择页面元素时,不但要考虑代码片断最优还是考虑代码的语意和可读性。很显然,使用div来实现这样的总局可能不够简洁,因为是组内再分组的情况,而div没有子元素,所以会产生多层div嵌套的情况,因此不能作为首先。综合上面的考虑,我们可以使用列表元素来实现,首先,列表元素有子元素,而且从语意上说也比使用div更符合要求。这里我选择了使用无序列表<ul>(当然,你也可以考虑使用<ol>或者
" href="http://www.dudo.org/article.asp?id=98" target=_blank>dd dt dl元素)。
三、代码的构架
确定了网页使用的标签元素后,我们可以根据需要来编写下面的HTML代码片断(好的HTML代码结构可以使页面设计达到事半功倍的效果)。
<ul id="q-graph">
<li id="q1" class="qtr">Q1
<ul>
<li class="north bar" style="height:111px;">18</li>
<li class="south bar" style="height:99px;">16</li>
</ul></li>
<li id="q2" class="qtr">Q2
<ul>
<li class="north bar" style="height:198px;">32</li>
<li class="south bar" style="height:210px;">34</li>
</ul></li>
<li id="q3" class="qtr">Q3
<ul>
<li class="north bar" style="height:260px;">43</li>
<li class="south bar" style="height:198px;">32</li>
</ul></li>
<li id="q4" class="qtr">Q4
<ul>
<li class="north bar" style="height:111px;">18</li>
<li class="south bar" style="height:198px;">32</li>
</ul></li>
</ul>
上面这代代码的作用就是在一个<ul>中嵌套了另外一个<ul>,这样就实现了两次分组(代码中同时按照比例设定了li的高度)。
注意:在这段代码中,有id和class现时出现的情况,也有同时使用两个class的情况,至于何时使用class、何时使用id请参考这篇CSS Classes vs ID。
四、有了HTML代码后,我们就可以使用CSS来样式化结构了
1、首先,对Body进行设置如下:
body {
padding:0;
margin:40px;
font-size:9pt;
font-family:Helvetica,Geneva,sans-serif;
}
代码很简单,只是要说明一点的是,一定要记得在body中指定文字大小和等宽字体,这在含有英文和数字的页面布局中是十分必要的。
2、接下来要做的是,对ul元素进行布局。
遵行前面两节布局中使用的相对定位和绝对定位方法:首先把外围元素设置为relative,然后把内层需要定位的元素设置为absolute,此外还需要去除ul和li默认的样式(这一点很重要),并设定宽度和高度等:
/*ul*/
ul#q-graph {
border:2px solid #0063be;
background:#adfe12 url(fade-light.png) repeat-x scroll 0 0;
height:300px;
width:600px;
position:relative;
list-style:none;
margin:1.1em 1em 3.5em;
padding:0;
}
注意,一定要清除ul、li的默认样式,特别是padding和marging的值,因为在不同的浏览器中他们的值是不一样的,所以在一般情况下都应该是先清除再负值。
接下来,简单设置一下所有的li元素,主要是清空默认样式和使它们服从绝对定位(下面的样式对所有的li元素生效):
#q-graph li {
position:absolute;
text-align:center;
bottom:0;
padding:0
margin:0;
}
其中,bottom:0;是绝对定位,意即使所有的指定元素底部对齐。


猜你喜欢
- 题目输入一个正整数数组,把数组里面的所有属猪拼接起来成为一个数打印能拼接起来的所有数字中最大/最小的那个。思考直观想法就是求出这个数组中所有
- 用了这么多年的CSS,现在才明白CSS的真正匹配原理,不知道你是否也跟我一样?看1个简单的CSS:DIV#divBox p span.red
- 由于python2和python3在部分语法上不兼容, 导致有人打趣道:"Python2和Python3是两门语言"对于
- python实现四舍五入""" 四舍五入 :param
- //Paul Tero, July 2001 //http://www.tero.co.uk/des/ // //Optimised for
- 本文在上文的基础上重新实现支持多线程的服务器。以下为TCP客户端的程序代码:#!/usr/bin/env python3import sys
- HTTP请求是无状态的,我们通常会使用cookie或session对其进行状态保持,cookie存储在客户端,容易被用户误删,安全性不高,s
- 本文是通过深度学习框架keras来做SQL注入特征识别, 不过虽然用了keras,但是大部分还是普通的神经网络,只是外加了一些规则化、dro
- 导语哈喽!我是木木子,今天又想我了嘛?之前不是出过一期Python美颜相机嘛?不知道你们还记得不?这一期的话话题还是围绕上期关于颜值方面来走
- Django项目默认使用sqlite 数据库,但是我想用mysql数据库,应该如何配置呢。Django连接mysql数据库的操作,是通过根模
- 类常量是PHP面向对象程序设计中非常重要的一个概念,牢固掌握类常量有助于进一步提高PHP面向对象程序设计的水平。本文即以实例形式描述了PHP
- 目录实例演示1. axios上传普通文件:2. 大文件导入:结语这次我要讲述的是在React-Flask框架上开发上传组件的技巧。我目前主要
- 有时候,规划师(或需求、交互)把内容呈现的框架草图搭建好后,就直接“丢”给了设计师,让设计师在画好的框架里去美化内容,出来后的效果,往往达不
- N久没有开始写博客了,总觉得要随便记点东西,岁月蹉跎,曾经搞得一些东西、技术、工具,说丢也就丢了,点点滴滴还是要记录一下吧。。。在windo
- 一、介绍在做YOLOv3项目时,会需要将文本文件中的某部分内容进行批量替换和修改,所以编写了python程序批量替换所有文本文件 * 定部分的
- 问题描述我在用Keras的Embedding层做nlp相关的实现时,发现了一个神奇的问题,先上代码:a = Input(shape=[15]
- 最近在学习vue.js 碰到个ajax跨域请求的问题,之前知道可以用jsonp解决,但是一直没实践过,这次用发现里面好多问题,所以现在记录下
- 本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下游戏的实现本质是多个图片的快速切换,类似动画一样,达到动态的
- 1. 查看数据库的版本 select @@version 2. 查看数据库所在机器操作系统参数 exec master..xp_msver
- 今天,启动MySQL服务器失败,如下所示:[root@spark01 ~]# /etc/init.d/mysqld startStartin