您当前位于: 首页 >> 编程
5种方法立刻写出更好的CSS代码
当然,每个人都可以编写CSS代码,甚至你现在已经让它为你的项目工作了。但是CSS还可以更好吗?开始用这5个Tips改进你的CSS吧!
1.重置
首先,很认真的告诉你,总是要重置某些分类。无论你是使用 Eric Meyer Reset、YUI Reset或者你自己编写的重置代码,只要使用就对了。
它能很简单的移除所有元素的填充(padding)和边距(margin):
- html, body, div, h1, h2, h3, h4, h5, h6, ul, ol, dl, li, dt, dd, p, blockquote,
- pre, form, fieldset, table, th, td { margin: 0; padding: 0; }
几段值得初学者研究的PHP代码段
无意在网络上看到这篇文章,想起了相当年偶独自苦学PHP的过程,马克下!
经典循环例子
<HTML>
<HEAD>
<TITLE>经典循环例子</TITLE>
</HEAD>
<BODY>
<?
for($counter = 1; $counter <= 6; $counter++) //循环6次
{
print("<B>counter is $counter</B><BR>n"); //打印6次
}
?>
</BODY>
</HTML>
for的高级运用
<HTML>
<HEAD>
<TITLE>for的高级运用</TITLE>
</HEAD>
<BODY>
<?
/*
** 打印必要的说明文字
*/
print("<B>距离星期一还有几天?</B>n");
print("<OL>n");
for($currentDate = date("U"); //定义$currentDate时间格式
date("l", $currentDate) != "Monday"; //判断是不是当前系统时间是Monday
$currentDate += (60 * 60 * 24)) //当前时间加上1天
{
/*
** 打印时间名称
*/
print("<LI>" . date("l", $currentDate) . "n");
}
print("</OL>n");
?>
</BODY>
</HTML> 完整内容...
Reset CSS研究(八卦篇) by 玉伯
八卦为先
八卦是种优良品质,特别是用在技术上时。来看几个Reset CSS的八卦问题吧:
- 你知道世界上第一份reset.css在哪么?
* { margin: 0; padding: 0 }人品很坏吗?- Eric Meyer和YUI是情侣吗?
- Google有用reset.css吗?
- No CSS Reset的口号是谁最先提出来的?
类似问题或者说困惑还能列举很多,reset.css极其简单又极其不简单。继续挖掘八卦之前,请先关机遐思,或去如厕更衣透透气,想想后再读下文。
不是历史
2004年,遥远又如近在眼前的昨天,Tantek被不同浏览器下默认样式的差异搞烦了,于是琢磨中写了一个undohtml.css, 这就是第一个八卦问题的答案。
对于基于Gecko引擎的Firefox等浏览器,请在地址栏中输入resource://gre/res/html.css,默认样式就这样裸体着呈现在面前了。CSS界的Guru级人物Eric Meyer立刻就嗅探到了html.css的有趣性:Really Undoing html.css. 知道CSS好玩,实在没想到CSS居然这么好玩。比如style, script { display: block }就可以显示CSS和JS源码,在做代码演示的demo页时,就不用辛辛苦苦用pre或textarea了(虽然因为ie不支持导致不实用,不过这的确是个思路)。
继续八卦:CSS Negotiation and a Sanity Saving Shortcut. * { margin: 0; padding: 0 }的学名是Global White Space Reset. 从原文中可以看出这个方法刚问世时是非常火爆的,并且作者建议一定要先破后立,要将清扫差异和重置默认样式结合起来,这样才是正确的做法。
为何Global White Space Reset当初风光一时,如今却黯然销魂?* { margin: 0; padding: 0 }的成功之处在于,管你三七二十八,统统抹平,人人生而平等!然而其失败之处也正是因为其威力太大,虽然捣了蜂窝得了蜜,却惹来群蜂追尾,麻烦无限(因为被抹平的样式,你得再重新设置回来,比如input的padding等)。这就如西汉一代名将韩信哪,是成也萧何,败也萧何!
还有一个传说中的说法是,星号*选择符还会导致性能问题。由于一直没找到可靠的资料,我又不知道怎样才能测试CSS选择符的渲染性能(知道的请一定告诉我),这个传说中的性能问题就只能当它是传说了。
眨眼一瞬间,三年就过去了。2007年,Eric Meyer的一篇文章Reset Styles, 重新唤起了一股reset热潮。这篇文章里有第3个八卦问题的答案:Eric的reset.css是源自YUI的,可能是母子关系,但总之不是情侣关系。
很快,Eric发布了第二版:Reworked Reset. 后面的解释极具价值,很多属性值的设置在这里有详尽说明。
火爆的回复给了Eric源源不断的动力:Reset Reloaded. 看完这篇文章,有一种尘埃落定的感觉。
但上面的文章并不是最终版本,2008年2月份,Eric Meyer还更新了一次:CSS Tools: Reset CSS
说完Eric Meyer的心路历程,不得不提一下YUI Reset CSS. 创始人是Nate Kokechley. 去年北京D2论坛上还见过一面,前不久已离开YAHOO,让我的直觉里对YUI都有点担心起来了,唉。
上面是两个最有名的CSS Reset方案。但世界永远是多样化的,比如Less is more - my choice of Reset CSS. 这和Eric Meyer的期望其实是一致的:不同的应用环境下,应该选择自己的reset方案,而不是简单的copy过去。比如Google首页,在这种特定页面里,不用就是一种最好的用。
更多眼花缭乱的Reset方案请参看:A Killer Collection of Global CSS Reset Styles. 很标题党,内容就鱼龙混杂了。
最后,隆重揭晓最后一个八卦问题的答案:No CSS Reset. 提倡的核心思想也是Less is more. 原因很简单,* { margin: 0; padding: 0 }杀伤力太大,在某些场合下,Eric Meyer的方案杀伤力也还是太大了。有想法并说出来,总是好的。
有反对就会有支持:Why I Like (and Use) Reset CSS. 公说公有理,婆说婆有理,并非所有问题都需要一个确切的答案,有时过程本身,就是追求的结果。
Eric Meyer对No CSS Reset一文的回复:Crafting Ourselves. 读罢此文,明月松间照,清泉石上流。下面摘录两段,做为此八卦闲文的完结:
Because this isn’t a field of straightforward answers and universal solutions. We are often faced with problems that have multiple solutions, none of them perfect. To understand what makes each solution imperfect and to know which of them is the best choice in the situation—that’s knowing your craft. That’s being a craftsman/craftswoman. It’s a never-ending process that is all the more critical precisely because it is never-ending.
…It’s evidence that we continue to challenge ourselves and each other to advance our skills, to keep learning better and better how better to do what we love so much.
预告:下一篇是技术篇,将详细探讨淘宝目前使用的Reset CSS方案,欢迎各位提前准备好板砖,我已购买坚固头盔一顶…… 敬请期待。
从设计师的角度看网络设计。
从蓝色理想看到一篇文章,相当不错。
我不会说对与错,我这能说出我的理解,在于交流吧。
我是一个设计师,
具体一点我是ue-ui设计师,
我曾经做过平面设计师,
环境导示设计师,甚至也熟悉服装设计,
我不敢说设计行业是优越的行业,
首先我解释一些现实的设计行业知识
设计行业分为两部分,很多刚毕业的人可能不清楚,
一部分是广告公司,一部分是设计公司,
两者有什么不同呢?
典型的广告公司是广告行业,他们注重策略和创意执行,象奥美,达彼思,
而设计行业就小多了,一些中国公司也很著名但还是属于本土企业,还没有国际化的管理介入,象东道,正邦,
前者的作品典型的代表是报纸/公交站/地铁等发布的广告,那一些一般属于广告公司的设计,
而后者一般是象标志/VI/包装设计/书籍设计,
当然两者的业务有重合的地方,但是还是能很清晰的分出来,
比较两者的竞争力我们能更明白两者的区别:
广告公司=策略+创意+设计(最终执行)
设计公司=创意+设计
因此可以这样理解:
广告公司=策略+设计公司=策略+创意+设计(最终执行)
因为现实是:60%以上的设计公司,设计成为其60%以上的竞争力
同样现实是:60%以上的广告公司,策略成为其60%以上的竞争力
由于两者在创意行业产业链位置不一样,
就决定了,同样的劳动时间创造的市场价值是不一样的,
当然很多很小的广告公司基本和很小的设计公司是一样的,他们争夺的是一样的底端市场,
大的广告公司和大的设计公司的市场却基本不重合,广告公司占据着产业链的优势资源,设计公司实际上是在给广告公司作执行工作.
上述就是设计行业的现状:
优势的公司会有优势的待遇,优秀的人才会去优势的企业聚集,让强的更强,让弱的更弱,
广告公司会更强,设计公司会更弱,并且市场有限,也决定了设计公司不能做大,如果想做大必须转型.
年轻的设计师们?
你们的热请还有吗?
你感觉设计还是你的热爱吗?
你感觉到你的想法或者是创意在消失吗?
你是不是感觉身心俱疲惫呢?
是不是感觉得不到应该有的回报呢?
是不是想离开可是又不知道去哪里,感觉哪里都是一样的吗?
你是不是不甘心放弃一直得梦想,对设计,还有对自己呢?
我也这样的困惑和思索过
我想过怎么能突破自己,突破日益恶性循环的平面设计产业,
我总在寻找一种新的方式,让设计回归应该有的价值,地位,和商业的回报,
我面临的问题是个人的也是整个设计公司行业的,
我知道我改变不了什么,
改变不了客户对设计的廉价认识,改变不了别人对专业的尊重,改变不了自己的回报,
不管自己怎么努力,怎么纯净,怎么表达,
改变的是自己由满怀希望到失望,
我知道,我必须离开,如天使一样需要有飞翔的翅膀,
我会继续寻找让创意产业获得商业回报的途径,
并且现在一直在寻找.
朋友们
不要放弃,
你可以对设计行业失望,可以对设计本身失望,但是不能对自己失望,
不能对改变现状的可能失望,
因为我们能改变的就是自己,
自己去寻找发挥自己价值的方向,不仅仅是设计,不仅仅是作为一个设计师,
不仅仅局限在现在困境的行业,
我们可以有新的选择,我们一定会更优秀,
如果你改变让你延误的现状,那就用脚投票吧
离开,寻找新的开始,
我是怎么样开始的吗?
大家知道我做了方向的尝试,
我是在体会不同的设计方向,也是在寻求不同方向的突破,
结论是这样的:
平面设计-能不做就不做,如果做,去广告公司不要去设计公司,能去4a去4a,不能去4a就去比较大的.
如果去了设计公司,要去著名的设计公司,最多呆2年,并且争取往上走.
最好去网络公司,已开始实习就去,也许你很难适应,但是你会发现你可以接触的很广泛,并且这样的公司一般不会死抠,有很健全的流程保证你的工作.
很重要一点,你会永远年轻.
能去中国著名的网络公司,那么你不考研生都值得.
不管去哪里,时刻保持学习的欲望,做好前进的铺垫,不要为暂时的困境失望,因为那些人也是人,
人都是一样的,不会有天才,如果有那么就是你.
不要争做第一,先做中游,然后超过你前面的一般,然后再超过前面的一半,最后你就是第一.
不要为没有女朋友而伤心,如果那样,你即使找了女朋友也会让她伤心.
不要相信老板对你美好的承诺,如果有你要让他写在纸上,签上名字.
别人叫你是兄弟的时候,想想是不是你在为他打工,那么就不是兄弟.
朋友可能是同事,但是同事能成为朋友的很少.
不要寄希望于别人的帮助,以为别人同样那样认为.
你可以休息一整天,但不能郁闷超过一小时.
有信仰更要有信心.
转一份ASP与存储过程教程
存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL Server)。如果我们通过创建存储过程以及在ASP中调用存储过程,就可以避免将SQL语句同ASP代码混杂在一起。这样做的好处至少有三个:
第一、大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数。
第二、提高安全性。假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密。
第三、有利于SQL语句的重用。
在ASP中,一般通过command对象调用存储过程,根据不同情况,本文也介绍其它调用方法。为了方便说明,根据存储过程的输入输出,作以下简单分类:
1. 只返回单一记录集的存储过程
假设有以下存储过程(本文的目的不在于讲述T-SQL语法,所以存储过程只给出代码,不作说明):
/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go
以上存储过程取得userinfo表中的所有记录,返回一个记录集。通过command对象调用该存储过程的ASP代码如下:
'**通过Command对象调用存储过程**
DIM MyComm,MyRst
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
MyComm.CommandText = "getUserList" '指定存储过程名
MyComm.CommandType = 4 '表明这是一个存储过程
MyComm.Prepared = true '要求将SQL命令先行编译
Set MyRst = MyComm.Execute
Set MyComm = Nothing
存储过程取得的记录集赋给MyRst,接下来,可以对MyRst进行操作。
在以上代码中,CommandType属性表明请求的类型,取值及说明如下:
-1 表明CommandText参数的类型无法确定
1 表明CommandText是一般的命令类型
2 表明CommandText参数是一个存在的表名称
4 表明CommandText参数是一个存储过程的名称
还可以通过Connection对象或Recordset对象调用存储过程,方法分别如下:
'**通过Connection对象调用存储过程**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.open MyConStr 'MyConStr是数据库连接字串
Set MyRst = MyConn.Execute("getUserList",0,4) '最后一个参断含义同CommandType
Set MyConn = Nothing
'**通过Recordset对象调用存储过程**
DIM MyRst
Set MyRst = Server.CreateObject("ADODB.Recordset")
MyRst.open "getUserList",MyConStr,0,1,4
'MyConStr是数据库连接字串,最后一个参断含义与CommandType相同
2. 没有输入输出的存储过程
请看以下存储过程:
/*SP2*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
delete from dbo.[userinfo]
end
go
该存储过程删去userinfo表中的所有记录,没有任何输入及输出,调用方法与上面讲过的基本相同,只是不用取得记录集:
'**通过Command对象调用存储过程**
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
MyComm.CommandText = "delUserAll" '指定存储过程名
MyComm.CommandType = 4 '表明这是一个存储过程
MyComm.Prepared = true '要求将SQL命令先行编译
MyComm.Execute '此处不必再取得记录集
Set MyComm = Nothing
当然也可通过Connection对象或Recordset对象调用此类存储过程,不过建立Recordset对象是为了取得记录集,在没有返回记录集的情况下,还是利用Command对象吧。
3. 有返回值的存储过程
在进行类似SP2的操作时,应充分利用SQL Server强大的事务处理功能,以维护数据的一致性。并且,我们可能需要存储过程返回执行情况,为此,将SP2修改如下:
/*SP3*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
BEGIN TRANSACTION
delete from dbo.[userinfo]
IF @@error=0
begin
COMMIT TRANSACTION
return 1
end
ELSE
begin
ROLLBACK TRANSACTION
return 0
end
return
end
go
以上存储过程,在delete顺利执行时,返回1,否则返回0,并进行回滚操作。为了在ASP中取得返回值,需要利用Parameters集合来声明参数:
'**调用带有返回值的存储过程并取得返回值**
DIM MyComm,MyPara
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
MyComm.CommandText = "delUserAll" '指定存储过程名
MyComm.CommandType = 4 '表明这是一个存储过程
MyComm.Prepared = true '要求将SQL命令先行编译
'声明返回值
Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara
MyComm.Execute
'取得返回值
DIM retValue
retValue = MyComm(0) '或retValue = MyComm.Parameters(0)
Set MyComm = Nothing
在MyComm.CreateParameter("RETURN",2,4)中,各参数的含义如下:
第一个参数("RETURE")为参数名。参数名可以任意设定,但一般应与存储过程中声明的参数名相同。此处是返回值,我习惯上设为"RETURE";
第二个参数(2),表明该参数的数据类型,具体的类型代码请参阅ADO参考,以下给出常用的类型代码:
adBigInt: 20 ;
adBinary : 128 ;
adBoolean: 11 ;
adChar: 129 ;
adDBTimeStamp: 135 ;
adEmpty: 0 ;
adInteger: 3 ;
adSmallInt: 2 ;
adTinyInt: 16 ;
adVarChar: 200 ;
对于返回值,只能取整形,且-1到-99为保留值;
第三个参数(4),表明参数的性质,此处4表明这是一个返回值。此参数取值的说明如下:
0 : 类型无法确定; 1: 输入参数;2: 输入参数;3:输入或输出参数;4: 返回值
以上给出的ASP代码,应该说是完整的代码,也即最复杂的代码,其实
Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara
可以简化为
MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)
甚至还可以继续简化,稍后会做说明。
对于带参数的存储过程,只能使用Command对象调用(也有资料说可通过Connection对象或Recordset对象调用,但我没有试成过)。
163.com免费邮箱背后的传奇故事
163.com免费邮箱,是凡上网的人,几乎无人不知,无人不晓吧。可它的的来历,大家是否知道呢?可能大家都知道它是网易公司的产品。不过是如何来的,如何创建的,就说不出来了吧。下面网赚网就和大家闲聊一下163.com免费邮箱的前世今生。
首先谈谈它的创办人,没错,他就是大名鼎鼎的丁磊先生了。2003年中国大陆首富,2005年的中国首捐:个人向中国红十字会捐款120万美元(折合人民币1000万元),帮助海啸受灾地区重建家园。2006年又与段永平联手向浙江大学捐赠4000万美元,支持教育事业。
丁磊,1971年出生,浙江宁波人。毕业于成都电子科技大学。1993~1995年在宁波市电信局工作;1995年-1996年就职于Sybase广州公司;1996年-1997年就职于广州飞捷公司;1997年5月创办网易。
丁磊创办网易后,为了探求网易发展方向而整天冥思苦想的丁磊在发现Hotmail的时候,眼睛豁地亮了起来。网易准备借10万美元买一套Hotmail系统,在中国建免费邮箱站点。Hotmail先说不卖,后来答复280万美元一套,另外加收每小时2000美元的安装费。于是,丁磊找来自己的伙伴陈磊华研究Hotmail的结构,两个人最后决定自己做。一个月下来,他们俩的知识大增。几个伙伴经常为一个技术上的突破兴奋得手舞足蹈。[NextPage]
一边开发免费电子邮箱,一边想域名。丁磊认定免费电子邮箱要想成功一定得有一个朗朗上口的域名才行。怎样的域名才好记?丁磊几乎天天都在想这个问题。凌晨2点,丁磊突然想到可以用数字表示域名,中国数字的发音特别干脆,而且163、169在中国已经具有了指向Chinanet和电信局以及Internet的含义,上网的人每天都要拨163,对它熟悉得不能再熟悉了。
想到这,丁磊从床上跳了起来,拨163上网,查询了一下163.net和163.com这两个域名,谢天谢地,还没有被注册。注册下这两个域名,丁磊又去睡觉,却怎么睡也睡不着了,他越想越美,就又从床上跳起来一口气注册了188.net、188.com、166.net、166.com、126.net、126.com等一大串域名。
7个月后,功能强大的网易免费邮箱系统写好了,163的域名也有了,万事俱备,但当丁磊向电信局申请增加免费邮箱服务的时候,却碰到了困难。广州电信不容许网易独立经营免费邮箱业务。
丁磊非常着急,他拿着免费邮箱的可行性分析四处寻求合作,结果遇到最多的质疑就是“这个项目什么时候可以赚钱?”丁磊老实地告诉人家:“我不知道什么时候可以赚钱,但我知道这个项目很有前途。”这样的回答不能让人满意,不能立即赚钱的项目没有多少人关心。 [NextPage]
全国各地跑了一圈没有结果,丁磊不得不折回头再和广州电信局谈合作。此时已经心急火燎的丁磊抛出了“合作经营,不让电信局出一分钱,软硬件全由网易投入,而利润6∶4分成的方案(电信得6)”。这个方案提醒了电信局。广州电信提出要购买网易的免费邮箱,可丁磊的答复是:“不卖”。
又花了两个月的时间,丁磊依然没有找到合作伙伴。网易创业的50万元已经撑了好几个月,公司再不挣钱,日子将难以为继。此时的丁磊根本不知道什么是风险资金。而且,“我也不愿意负债经营,因为Internet风险很大,是否能成功,我也不敢肯定。”
就在丁磊四处碰壁的时候,Hotmail被微软3.5亿美元收购。1998年2月,丁磊最终答应将中文免费邮箱系统出售给广州电信。广州电信提出要同时附送163域名,丁磊想了想,“这一送,我也知道里面的价值含量有多少。广州电信建163.net,连硬件投资只用了100多万元,其中的硬件和数据库系统占整个投入的75%,我们税后利润很少,但网易的发展需要资金注入,不得不为之。”每次看到这个主页,不知丁磊心里是啥滋味[NextPage]
1998年2月16日,www.163.net开放使用,反应强烈,注册用户数以每天2000人左右的速度递增,至今用户已经达到35万。163.net成功后,很多公司纷纷打电话到网易要求购买该系统,这和一开始丁磊四处寻求合作伙伴却没人理睬的局面形成了鲜明的对比。
263、国中网、990、371、浙江金华188纷纷购买网易免费邮箱系统,免费邮箱一个产品就为网易挣了几百万元。有人质疑“中国人开发的软件哪能一套几十万元那么贵的”,丁磊反驳:“网易做的这个系统不比美国人做得差。”“大家都知道网易免费邮箱系统卖得很贵,但目前在中国还没有看到竞争性的产品。”尽管免费邮箱为网易挣了不少钱,但丁磊还是认为如果不卖,自己独家做免费邮箱站点会更成功。
失去了163.net,却成就了163.com,一天,受到一个国外大网络门户站点老板的启发,丁磊决心把163.com转为门户,果然一改就火,流量大增,广告收入也滚滚而来。当然,以邮件系统起家,也立志做中国hotmail的丁磊先生,自然不会忘记了免费邮箱的重要性。所以,163.com免费邮箱也在网易巨大影响力的推动下随理成章的推出了。126.com免费邮箱,188财富邮箱接踵而至。成就了网易中国hotmail的伟业。聊到此,我不仅感叹,成功是眼光、机遇、技能、意志、努力、人脉种种因素的综合作用呀。正是机遇是给有准备的人的。163.com免费邮箱的故事,肯定也能激励新一代的IT人为自己的理想去奋斗。