先写HTML?还是先写CSS?

关于这个问题,各人有各人的习惯吧,以前在公司的时候,有位同事的风格习惯很不一样,搞得有点相互不兼容,呵呵。

在构建一个页面的时候,是先写好HTML代码呢?还是先写好CSS呢?按标准来说,是先把HTML页面写好,再写CSS来定义,而且看起来很酷!但是在实际操作中,几乎不可能一次性把HTML先写好而不用修改的,也许因为构建思路的问题、或者一些事先没预料到的特殊问题、又或者因为浏览器兼容的问题……都有可能再去改动到HTML代码。当然,这样的改动是小意思了,主要是这样的方法不方便测试,在你的CSS没有写完之前,页面里会有很多还未定义的标签,预览的话页面有可能会乱,而且也不便于问题的排察。

大多数情况下,我还是建义HTML跟CSS同时进行,每写了一段之后用多个浏览器进行测试。至于写多少测试一下就要看各人的经验水平了。本人习惯的写法步骤是这样的:

写先好页面的布局部分,也就是外套,头部,中间部分以及中间部分的左、中、右,以及版权部分。我一般是先定义样式,然后再在DW里把该样式插入。

然后再写各部分的内容。比如说头部,我们可以在里面加LOGO部分,以及NAV部分等等。而NAV里我们有可能还会定义sub……就这样一层层地由外至内。

在这里,本民工也只是说说个人的一些见解,欢迎指正,共同学习、共同提高。

AS3+ASP+ACCESS的FLASH留言版教程(二)

接上一篇,现在说说AS的写法了。在AS中主要要实现的功能就是对XML的读取以及表单数据的提交,只要实现了这两个功能,其余的表现手法什么的都可以自由发挥咯。

在这里我只把主要的帖出来说一下,稍后我会附上源码的。

先是读取XML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private function loadxml() {
   var Requesturl:URLRequest=new URLRequest("getinfo.asp?page="+page+"&"+Math.random()* 10);//路径可以是绝对也可以是相对,后面加随机数是解决数据刷新问题。
   loader=new URLLoader(Requesturl);
   loader.addEventListener(Event.COMPLETE,xmlcomplete);
  }
  private function xmlcomplete(e:Event) {
   listxml=new XML(e.target.data);
   add_list();
   listxml.@page>1 ? add_page() : 0;//如果页数大于1,显示分页
  }
private function add_list() {//list_block为一个元件,里面有分别命名为book_title,book_name,book_date的三个动态文本。
   for (var i=0; i<listxml.item.length(); i++) {
    list_block=new list_mc;
    list_block.y=25* i;
    list_block.visible=false;
    list_block.book_title.text=listxml.item.@book_title[i].toString();
    list_block.book_name.text=listxml.item.@book_name[i].toString();
    list_block.book_date.text=listxml.item.@book_date[i].toString();
   }
  }

当然,在显示列表的时候可以加一些视觉效果,这个就可以自行发挥咯。

接下来是表单提交的部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private function send_book(e:MouseEvent) {
   //在这里可以先对表单进行验证
    var request:URLRequest=new URLRequest("sendinfo.asp");
    var variables:URLVariables=new URLVariables();
    variables.book_name=input_boxs.input_name.text;
    variables.book_qq=input_boxs.input_qq.text;
    variables.book_mail=input_boxs.input_mail.text;
    variables.book_title=input_boxs.input_title.text;
    variables.book_info=input_boxs.input_info.text;
    request.data=variables;
    var loader:URLLoader=new URLLoader();
    loader.dataFormat=URLLoaderDataFormat.TEXT;
    loader.addEventListener(Event.COMPLETE,send_complete);//提交成功后运行send_complete
    loader.load(request);
   }
  }

一个完整的留言版也会牵涉到很多东西,在这里附上源码,由于写得比较急,也没加什么注释,欢迎大家指正以及讨论。

源文件下载:guestbook.rar

AS3+ASP+ACCESS的FLASH留言版教程(一)

有不少朋友问起flash留言版的问题,其实说白了flash跟数据库的交互并不是什么高深的技术,只要掌握了原理,便可一通百通。我很少写教程,也不太会写,我是属于那种会做但不太会说的人,但现在网络上相关的资料也不多,我也试着写一个吧。一个简易的AS3留言版

大家应该都知道,flash与数据库交互的话要借助第三方语言,在这里我们需要的是一个生成XML格式的动态页。本例用的是ASP+ACCESS,因为本民工只对ASP比较熟罢了,熟悉PHP的朋友完全可以改成PHP+MYSQL的,因为AS3读的只是XML的格式,至于用何种语言来生成都没有关系。ACCESS我就不讲了,相信大家都会用,对照一下下面的字段名就好了。

先建配置文件
conn.asp

1
2
3
4
5
6
<% on error resume next
datapath = "date/book_data.mdb"//数据库的路径
set conn=Server.Createobject("adodb.connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;"&amp;"Data Source=" &amp; Server.MapPath(datapath)
conn.open connstr
%>

接下来是获取数据的动态页,也就是生成XML的页面
getinfo.asp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!--#include file="conn.asp"-->
<%
set rs=server.createobject("adodb.recordset")
sql="select * from book order by book_id desc"
rs.open sql,conn,1,1
rs.pagesize=8
i=1
mypage=request("page")
if mypage="" then
mypage=1
else
mypage=cint(mypage)
end if
pages=rs.pagecount
rs.absolutepage=mypage
%>
<?xml version="1.0" encoding="utf-8"?>
<guestbook page="<%=pages%>">
<% do while not rs.eof%>
<item book_name="<%=rs("book_name")%>" book_mail="<%=rs("book_mail")%>" book_qq="<%=rs("book_qq")%>" book_title="<%=rs("book_title")%>" book_time="<%=rs("book_time")%>" book_date="<%=rs("book_date")%>" ><![CDATA[<%=rs("book_info")%>]]></item>
<%
if i=rs.pagesize then exit do end if
i=i+1
rs.movenext
loop
%></guestbook>

在这里把分页功能也做了进来,也就是在AS3中通过加载getinfo.asp?page=XX来获取分页。而留言内容部分用CDATA,是为了能正常显示一些特殊字符。生成的XML格式如下

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<guestbook>
<item book_name="姓名" book_mail="16955732@qq.com"
book_qq="16955732" book_title="标题名称" book_time="2009-1-13 下午 10:36:21" book_date="2009-1-13" ><![CDATA[留言内容]]></item>
</guestbook>

最后是把从flash里传递出来的表单参数写入数据库的页面
sendinfo.asp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!--#include file="conn.asp"-->
<%
Dim book_name,book_qq,book_mail,book_title,book_info
 book_name=request("book_name")
 book_qq=request("book_qq")
 book_mail=request("book_mail")
 book_title=request("book_title")
 book_info=request("book_info")
 
 set rs = server.createobject("adodb.recordset")
 sql = "select top 1 * from book"
 rs.open sql,conn,1,3
 rs.addnew
 rs("book_name") = book_name
 rs("book_qq") = book_qq
 rs("book_mail") = book_mail
 rs("book_title") = book_title
 rs("book_info") = book_info
 rs.update
 rs.close:set rs = nothing
%>

现在准备工作都做好了,下一篇再讲解在AS3中的应用。

总结下CSS布局中浮动元素的闭合方法

我想只要是跟DIV+CSS打交道的朋友,肯定都碰到过闭合浮动元素的问题,或者叫做清除浮动元素。因为按照CSS的规范,浮动的元素(float)会被移出文档流,当它的高度超出其父容器的高度时,父容器不会自动伸长以闭合浮动元素。这就是我们所碰到的闭合浮动元素的问题。

解决此问题的方法有很多,下面一一分析一下。

一、额外标签法。

这是最常见是一种方法,也是W3C推荐使用的一种方法。此方法的做法就是在内容的末尾加上一个空标签,常用的做法是:
.clearfloat {clear:both;}
然后在内容的末尾加上
<br class="clearfloat" />
或者
<div class="clearfloat"></div>

当然你也可以使用其它的块级元素,但是用<br>的话,在IE中能清除浮动但不能闭合元素。额外标签法的标准写法应该是这样的:
.clearfloat {
clear:both;
height:0;
font-size: 1px;
line-height: 0px;
}

这样基本上就能适应所有的状况了。

此方法最为通用,但是由于增加了一个空标签,某些有“洁僻”的朋友会觉得HTML代码显得不够简洁。

二、使用after伪类

使用after伪类的做法就是在指定的现在内容末尾添加新的内容,通常是加一个小“.”,并把它隐藏,可以通过它来闭合浮动元素。但是,Win/IE6并不支持after伪类,所以还不得不单独针对Win/IE6进行hack处理。
.clearfloat {
display:inline-block;
}
/* Hack Begine \*/ 这里出现的反斜杠(\)是为了区分Win/IE跟Mac/IE,只针对Win/IE进行hack
* html .clearfloat {
height:1%;
}
.clearfloat {
display:block;
}
/* End Hack */

把此类加在浮动元素的父容器上就可以清除浮动。但本民工不喜欢用这种方法,因为我觉得用hack方法太烦琐不好掌握,而且又远离标准。

三、设置父容器的overflow

把父容器的overflow属性设为hidden或auto同样也能清除浮动,但是单单设置overflow属性在IE6中会不起作用,需要触发一下layout,一般可以指定一个维度,或者是用zoom:1;。
#clearfloat {
overflow:auto;
height:1%;
}

此方法用起来也很方便的,但是overflow有可能会影响到浏览器的表现,所以用此方法时多调试一下。另外,此方法能在浏览器表现正常,但是在Dreamweaver中浮动元素还是会乱。

四、浮动外部元素,float-in-float

给浮动元素的父容器也加上浮动属性,浮动元素能闭合浮动元素。此方法很方便,效果也好,但缺点也很明显,父容器并不是想浮动就浮动,相邻元素有可能会发生变化,再嵌套一层DIV的话又会觉得有些烦琐,所以此方法有可能会给布局增加难度。

总结

想要兼容浏览器闭合浮动元素的方法还是很多的,具体情况具体分析,在这里说的也未必详尽,如果哪位朋友有更好的方法或不同的意见,欢迎讨论与分享!

一个简易的AS3留言版

这是前阵子弄的一个简易的留言版,也当做是对XML的一个练习,在AS3中对XML的支持比以往提高了很多。不过不得不说一下,界面做得的确不怎么样,让我感觉到如果有位美工帮忙该有多好。

AS3不能直接与数据库通信,所以做留言版的话需要借助第三方语言,而具体用哪一种都是一样的。像本例是通过XML读取数据,那么不管是用ASP还是PHP还是别的什么,只要是生成一个输出XML格式的动态页就可以了。数据的传递也并不是一定要用XML,比如说数据量不大的时候,直接flashvar传参数也可以,这些都看具体情况了。

本例的分页是给动态页传递参数实现的,另外在提交表单时也加了些验证,但可能还会有BUG存在,欢迎大家来测试。

DIV+CSS布局中常用的列表元素(ul ol li dl dt dd)详解

虽然DIV不像TABLE那要需要把容器内的内容都加载了才能显示,但是为了标准化,当然还是越少嵌套越好。

常用的列表元素有ul ol li dl dt dd,其中ul li用得比较多。先说说ol与ul,其实两者是一样的。

<ol>是有序列表

1
2
3
4
5
6
7
8
9
<ol>
<li>……</li>
<li>……</li>
<li>……</li>
</ol>
页面显示为:
1……
2……
3……

<ul>是无序列表
页面显示为li前是大圆点而不是123……

dl dt dd的用法

1
2
3
4
5
<dl>//dl为内容块
<dt>内容标题</dt>//dt为内容块的标题
<dd>内容1</dd>//dd为内容
<dd>内容2</dd>
</dl>

dt 和dd中可以再加入 ol ul li p等标签。熟练运用这些列表元素,可以在布局时减少DIV的嵌套。