存档

文章标签 ‘HTML’

CSS clear 属性到底是什么?

2011年6月30日 1 条评论

定义和用法

clear 属性规定元素的哪一侧不允许其他浮动元素。

说明

clear 属性定义了元素的哪边上不允许出现浮动元素。在 CSS1 和 CSS2 中,这是通过自动为清除元素(即设置了 clear 属性的元素)增加上外边距实现的。在 CSS2.1 中,会在元素上外边距之上增加清除空间,而外边距本身并不改变。不论哪一种改变,最终结果都一样,如果声明为左边或右边清除,会使元素的上外边框边界刚好在该边上浮动元素的下外边距边界之下。

浏览器支持

所有主流浏览器都支持 clear 属性。

via http://www.w3school.com.cn/css/pr_class_clear.asp

代码说明

<html>
<body>
<p style="float:left;width :200px;">这个是第1</p> 
<p style="float:left;width :400px;">这个是第2</p> 
<p style="clear:both;">这个是clear列</p>
</body>
</html>

试试把clear列的style去掉和不去的区别就知道了!

分类: Internet 标签: , , ,

让层居中于浏览器窗口

2011年2月16日 1 条评论

层垂直居中于浏览器,一直是新手朋友比较头疼的问题。 其实解决的思路是这样的:首们需要 position:absolute; 绝对定位。而层的定位点,使用外补丁margin负值的方法。负值的大小为层自身宽度高度除以二。 如:一个层宽度是400,高度是300。使用绝对定位距离上部与左部都设置成50%。而margin-top的值为-150。margin-left的值为-200。这样我们就实现了层垂直居中于浏览器的样式编写。

<style type="text/css">
<!-- 
div {
	position:absolute;
	top:50%;
	left:50%;
	margin:-150px 0 0 -200px;
	width:400px;
	height:300px;
	border:1px solid #008800;
	}
-->
</style>
<div>让层居中于浏览器窗口</div>
分类: wordpress 标签: , ,

兼容多浏览器的 div、p、td 强制不换行及强制换行

2011年2月15日 没有评论

关于强制不换行、强制换行的话题在网上已经被讨论了无数次,但都不够全面,没有充分考虑各种浏览器、各种标签等情况,以致不兼容,所以再来说说。由于 div 和 p 在本文的讨论中,效果相同,所以省略 p。

文中“没有指定宽度的 td”是指:为 table 指定了宽度,但没有给 td 指定宽度。

强制不换行

div,
td
{
    white-space:nowrap;
}

这点在 Firefox 的 div 和 td 中,以及 IE 的 div 中,均没有问题。在 IE 的 td 中却很复杂:

如果没有为 td 指定宽度,则上述代码仍然有效。
如果为 td 指定了宽度,并且文字中无标点、无空格,上述代码不再有效。可以加 word-break:keep-all; 解决,这是 CSS3 的内容,不过是 IE 最先提出的,所以 IE6 中也支持。
如果为 td 指定了宽度,并且文字中有标点或空格。可以在文字与 td 之间套一层 div 加以解决。

综合起来,为了简单,使用:

div
{
    white-space:nowrap;
}

只是为了兼容 IE 的 td 的不同情况,在文字与 td 之间套一层 div。

强制换行

强制换行是为了遇到一些超长的连续字符串(比如 aaaaaaaaaaaaa)时不撑大布局。

div,
td
{
    word-break:break-all;
}

word-wrap:break-word; 兼容性不够广,所以我们使用的是 word-break:break-all;。上述代码兼容于 IE、Chrome 的 div、指定宽度的 td、没有指定宽度的 td,非常不错,遗憾的是 Firefox 中不支持这个属性,所以无效果,为了不让其挤乱表格,可以加 overflow:hidden 来凑合着解决。

知其然知其所以然

上面介绍了三种属性:

white-space : normal | nowrap
word-wrap : normal | break-word
word-break : normal | break-all | keep-all

white-space

空白的处理方式,不止两个属性值,但在 IE6 中只支持这两个,所以不介绍其他的。

normal 多个连续英文空格压缩为一个英文空格显示,在空白处可换行。
nowrap 强制在同一行内显示所有文本,直到文本结束或者遭遇 br 对象。

word-wrap

内容超过容器边界时是否断开转行。

normal 允许(只是允许,不是必须)内容顶开指定的容器边界。
break-word 内容将在边界内换行。

word-break

换行的方式。

normal 英文在标点和空白处换行,中文在任何地方换行。
break-all 英文和中文都在任何地方换行,比如从一个英文单词的中间拆开换行。
keep-all 英文和中文都在标点和空白处换行。

分类: wordpress 标签: , , ,

DIV元素和SPAN元素的区别

2011年1月18日 2 条评论

标准布局中DIV元素和SPAN元素的区别和应用

首先讲两个概念,SPAN元素是行内元素,DIV元素是块级元素。行内元素是指该元素标记的内容不不会对现在的结构造成影响,属于应用样式,辅助应用样式表等作用;而DIV元素即块级元素为一个块状,单独占据一行,相当于在一个该元素前后各加一个换行。

两者最明显的区别是:DIV(division)是一个块级元素,可以包含段落、标题、表格,乃至诸如章节、摘要和备注等。而SPAN是行内元素,SPAN的前后是不会换行的,它没有结构的意义,纯粹是应用样式,当其他行内元素都不合适时,可以使用SPAN。DIV元素即块元素相当于内嵌元素在前后各加一个
换行。其实,块元素和行内元素也不是一成不变的,只要给块元素定义display:inline,块元素就成了内嵌元素,同样地,给内嵌元素定义了display:block就成了块元素了。

代码示例:

<style> 
div,span{border:1pxsolid#000;margin:2px;}  
</style> 
<div>div1</div><div>div2</div> 
<span>span1</span><span>span2</span> 
<br> 
<divstyledivstyle="display:inline">div3</div> 
<divstyledivstyle="display:inline">div4</div> 
<spanstylespanstyle="display:block">span3</span> 
<spanstylespanstyle="display:block">span4</span>

技巧:有些朋友会说DIV是层标签,其实HTML里是没有层这个说法的,只不过是为了易于理解,Dreamweaver里才这样写的,每个对象都可以成为“层”,只需要给对象定义position属性(值为absolute或relavite)。例如,要让图片成为“层”,可以这样写代码:

<imgsrcimgsrc="demo.gif" style="posibion:absolute;left:20px;top:20px">

特别提示

为了更能说明问题,这里给块元素和内嵌元素都加了1像素宽的黑色实线边框,DIV元素默认为块元素,定义display属性值为inline后以内嵌元素显示,而SPAN默认为内嵌元素,定义display属性值为block后则以块元素显示。

SPAN元素标记有一个重要而实用的特性,即它什么事也不会做,它的唯一目的就是围绕你的HTML代码中的其它元素,这样你就可以为它们指定样式了。

分类: wordpress 标签: , , , ,

WP提速 - “化解”HTML中的小图标

2010年10月5日 4 条评论

HTTP 请求是很费时间的,主要花费在建立连接的过程中。其实真正传输 1K 和 10K 数据的时间相差无几,但哪怕你请求的是一个仅有几字节的小文件,一样需要花费一定的连接时间。

这个时候 CSS Sprites (tools via1 via2) 和 Inline Images with Data URLs 就可以帮上大忙了。

CSS Sprites 的思想是把很多张小图片(如:图标)整合为一张大图,再利用 CSS 的 background-position 属性在正确的地方显示正确的图标。这样的好处就是把原来的 n 个 HTTP 请求减少至 1。

Inline Images with Data URLs 的思想是干脆直接把装饰性的小图片写在 CSS 或 HTML 中,不需要 HTTP 请求。当然不能直接在文本中写二进制的 0101,但经过 base64 编码后就可以了。基本的用法是:

data:[<mediatype>][;base64],<data>

例:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGvSURBVDjLpZO7alZREEbXiSdqJJDKYJNCkPBXYq12prHwBezSCpaidnY+graCYO0DpLRTQcR3EFLl8p+9525xgkRIJJApB2bN+gZmqCouU+NZzVef9isyUYeIRD0RTz482xouBBBNHi5u4JlkgUfx+evhxQ2aJRrJ/oFjUWysXeG45cUBy+aoJ90Sj0LGFY6anw2o1y/mK2ZS5pQ50+2XiBbdCvPk+mpw2OM/Bo92IJMhgiGCox+JeNEksIC11eLwvAhlzuAO37+BG9y9x3FTuiWTzhH61QFvdg5AdAZIB3Mw50AKsaRJYlGsX0tymTzf2y1TR9WwbogYY3ZhxR26gBmocrxMuhZNE435FtmSx1tP8QgiHEvj45d3jNlONouAKrjjzWaDv4CkmmNu/Pz9CzVh++Yd2rIz5tTnwdZmAzNymXT9F5AtMFeaTogJYkJfdsaaGpyO4E62pJ0yUCtKQFxo0hAT1JU2CWNOJ5vvP4AIcKeao17c2ljFE8SKEkVdWWxu42GYK9KE4c3O20pzSpyyoCx4v/6ECkCTCqccKorNxR5uSXgQnmQkw2Xf+Q+0iqQ9Ap64TwAAAABJRU5ErkJggg==" />

可以借助 Motobit Software 在线生成 base64 的图片内容。

Inline Images with Data URLs 的局限:

1. IE 5-7 不支持,IE 8 支持。为了兼容 IE,可以把这些部分单独写入 IE 专用的 CSS 文件中。
2. 文本形式的图片占用比二进制更多的字节。Base64 格式比二进制大 39%~45%,在 gzip 压缩后,这个比例减小至 8%~9%。最好在 base64 编码之前优化图片本身。
3. 浏览器对 inline 图片有大小限制。Opera 最大支持 4,100 字节,Firefox 最大支持 100K。所以最好只应用在小图片上。

补充一点:CSS SpritesInline Images with Data URLs 是可以同时使用的。

「推荐」纯CSS打造下拉菜单

2010年8月20日 3 条评论

实现 submenu 的方法很多,很多人在使用结合JavaScript的下拉菜单,不过我还是喜欢单纯的CSS代码打造的下拉效果。在微软 Microsoft Expression Web 的相关站点上看到这个纯CSS下拉菜单的时候,我觉得很酷。这应该是最精简、最干净的纯CSS下拉菜单了。

先看一下效果:

下面是实现方法:

首先是菜单的XHTML代码:

<ul>
  <li><a href="#">菜单一</a></li>
  <li><a href="#">菜单二</a>
    <ul>
      <li><a href="#">子菜单一</a></li>
      <li><a href="#">子菜单二</a></li>
      <li><a href="#">子菜单三</a></li>
    </ul>
  </li>
  <li><a href="#">菜单三</a></li>
  <li><a href="#">菜单四</a>
    <ul>
      <li><a href="#">子菜单一</a></li>
      <li><a href="#">子菜单二</a></li>
      <li><a href="#">子菜单三</a></li>
    </ul>
  </li>
  <li><a href="#">菜单五</a></li>
</ul>

不设置任何CSS类,实在是干净到极点了(当然,考虑到实际应用的复杂性,我估计你不可能真的什么都不加。要么把这段代码放到一个特定的容器里,要么给第一层的ul加一个id或者class。

假设这是在一个新的HTML文档里,那么我们现在没有任何的CSS定义,这时候的网页显示效果是这样的:

在我们的下拉菜单中,不需要内补丁、外边距这些东西,即使需要,我们也要自己重新设置,所以我们首先添加第一条规则:

ul {
    margin: 0px;
    padding: 0px;
}

为了跨浏览器兼容,必须同时把外边距和内补丁都设置为0,因为有的浏览器默认使用外边距,有的则默认使用内补丁。这样设置以后,页面上可以看到两层列表项前面的缩进都没了,实心和空心的列表符号也不见了。然后设置第二条规则:

ul li {
    float: left;
    display: inline;
    font: 0.9em Arial, Helvetica, sans-serif;
    height: 30px;
    width: 100px;
    list-style: none;
}

这是让原本各占一行的li元素变成嵌入式(inline)显示,另一种说法是把list-item元素变成行内元素。总而言之就是让li不要各占一行,并列起来,这样才能成为菜单。设置后,效果如下:

这样就得到了下拉菜单的雏形,当然了,外观很丑陋,下拉功能也还没实现。这里要说明的是,最好给菜单项设置高度和宽度,否则有可能出现不可预料的结果(取决于页面或容器的宽度)。为了让菜单项看起来像菜单,我们继续添加规则:

ul li a {
    color: #FFF;
    text-decoration: none;
    line-height: 29px;
    width: 91px;
    margin: 0px;
    padding: 0px 0px 0px 8px;
    display: block;
    border-right: solid 1px #ccc;
    border-bottom:solid 1px #ccc;
    background: #808080;
}

这一条规则比较长,从作用上说呢,就是加上背景和菜单间的隔离线,把默认有下划线蓝色的文字变成白色无下划线。增加了规则后的效果:

从外观上,这就已经是我们最终的下拉菜单样式了。不过,我们还要在细节上修饰一下,比如让子菜单和一级菜单的样式有所区别(当然了,由于字体设置的 0.9em,所以在文字大小上已经有区别了,但是还不够,而且对于中文来说,很多时候我们未必能通过文字大小来区别,因为适合中文的常规文字大小就 12px和14px而已),所以我们修改一下子菜单的背景色,并且让子菜单比一级菜单的高度要小一些。规则:

ul li ul li { height:25px; }
ul li ul li a {
    background: #666;
    line-height:24px;
}

这里包含两条规则,第一条是将子菜单的列表项目高度由之前统一设置的30px减小为25,第二是将子菜单项的背景改为#666,并且文字行高对应地减小到24设置完成后(列表项高度-1,减去的1正好是上边框的1像素),效果如下:

通常我们鼠标滑过某个菜单项的时候,要让它跟其它项目有所区别(表示当前菜单处于激活状态,术语叫“高亮” ,所以我们对一级菜单的鼠标滑过样式做一下定义:

ul li a:hover { background: #666; }

注意,这里为鼠标滑过时设置的背景色和子菜单的背景色一样,原因?看效果就知道了:

这里的第二个菜单项就是鼠标滑过时候的样式,这样就跟弹出的(现在还不会弹出)子菜单背景色一致了。现在整个菜单的样式都设置完了,但是,这只是静态的菜单啊,我们要的是会动的。所以工作还没完成。接下来是什么呢?当然是默认情况下把二级菜单隐藏起来。我们要写JS来隐藏他们吗?No!样式如下:

ul li ul { visibility: hidden; }

这样,子菜单并不是像 display:none 一样不显示,它还是在那个位置,文档结构什么的都没有发生任何改变,只是看不到它而已,而且下拉菜单中的链接当然也没不可以点击。

最后一条规则,让鼠标滑过有下拉项的时候,显示下拉菜单。当然我们实际设置的是:如果某一个下拉菜单的父级元素(一级菜单项)被鼠标滑过,那么就让该下拉菜单可以被看见:

ul li:hover ul { visibility: visible; }

这样就完成了整个设置下拉菜单制作,当然你还可以进一步修饰这个菜单,比如我们应该让子菜单中的项目在鼠标滑过的时候也变色:

ul li ul li a:hover { background: #333; }

最终效果:

要强调的一点:这个下拉菜单在各主流浏览器(IE6以下的版本除外)中的外观及行为都是完全一致的。兼容性非常好。

如果IE6的兼容性对你的站点来说非常重要,那么你可以参考这篇文章「Whatever:hover – 无需javascript让IE支持丰富伪类」 :http://wukangrui.com/2009/06/22/whatever-hover-pseudo-class-without-javascript.html

站点演示效果请访问 Wheat Notes http://www.wheatnotes.com

参考文章:
whatever:hover http://www.xs4all.nl/~peterned/csshover.html
使用 Expression Web 以无代码方式实现纯 CSS 水平下拉菜单 http://www.microsoft.com/china/expression/newsletter/2008-11/article05.aspx

你的网站能在6秒之内打开吗?

2009年8月29日 34 条评论

互联网上有一个6秒定律:如果你的网站在6秒之内还没有被打开,那么绝大多数的人不会再继续等待,而是选择关闭,去浏览别的网页。所以保证良好、稳定的加载速度对于访客来说是非常重要的,无论你是要获得更多的读者还是要留住原有的访客这都是需要注意的重要元素之一。

要获得更快的加载速度,首先主机的选择很重要。比如说你的访客主要在国内,那么你的主机是否可以在国内各个线路获得良好的速度,你可以事先通过该主机商的现有用户网站检测一下。其次就是我们自身要对网站做好相关的优化了,我们以 WordPress 程序为例,随着你使用 WordPress 时间的增长,安装了不少插件、主题&页面中添加了图片,虽然你的WP功能越来越强大,但是速度似乎开始变慢……

拖慢WP加载速度的主要原因:
1.PHP命令的执行
2.图片,Javascript 的加载
3.从数据库调用信息
4.无用的代码

针对这几点,为你的WP提速可以采用以下6个方法:

1. 减少不必要的PHP请求
由于你所使用的主题作者写这个主题是给很多blogger使用的,因此通过这个php语句来统一调用,而作为我们使用者来说,把它替换成自己的静态HTML代码可以提高加载速度。

比如:

1
<link rel=”stylesheet” type=”text/css” media=”screen” href=”<?php bloginfo(’stylesheet_url’); ?>“/>

我们就可以替换成:

1
<link rel=”stylesheet” type=”text/css” media=”screen” href=”http://www.wheatime.com/wp-content/themes/style.css”/>

WP主题中通常 head.php foot.php sidebar.php 中的引入CSS、导航菜单、分类选项、页脚信息等都可以采用相应的 html 替换。

2. 删除不必要的插件
除了一些常用的插件,减少不必要插件的使用。另外,如果你的插件类表中有安装了但没有使用的插件,那么建议把它删除,因为即使那些没有被激活,加载的时候也会被检查。

3. 减少服务器请求
如果你提供一些资源供大家下载,比如图片,视频,电子书等建议不要放在自己的空间中,选择 Youtube flickr 等平台存放则是不错的做法。

4. 使用插件提速
比如 Object Cache, WP Widget Cache, Autoptimize, DB Cache, WP Super Cache 等
可以参考本站文章:两个让你的WP更快的插件

5. 优化博客中的图片
博客中图片的优化对于提高加载速度也很重要,图片文件大小,贴在网页中的图片不能过大,这样会延缓页面读取时间。因此每一张贴进网页的图片都需要进行瘦身和格式转换(转为Gif可以有效减少空间占用)。
另外对于图片欣赏类的文章,图片比较大,又不想降低质量影响效果,建议尽量外链到图片站上,贴进文章后调整图片在日志中的显示尺寸。(这一点主要针对空间不大的博主)

6.压缩精简你的代码
使用一些工具对 CSS JavaScript 等代码进行精简压缩,比如 Format CSS JS Compressor 等。

本文只是对优化的几个方面做了一个大概的介绍,具体的操作步骤可以使用Google搜索,如果你有其他的优化方法欢迎投稿或者留言与我交流。

将图片转为html文件的软件

2009年5月31日 6 条评论

这个软件可以将图片以网页形式(用一堆各种颜色的字符,类似于马赛克)来展现。具体可以看看下面这个例子。

这是原图:

这是效果截图:

注:

1.使用中文做字符时请勾选“使用双字节字符”并在页面编码处选择“GBK”。

2.转换后的Html会附带一些软件信息,可以用网页编辑软件自行去除。

下载地址:麦子 @ SuccessFul! 提供

分类: 分 享 标签: , ,

在HTML中使用 SVG

2009年5月26日 没有评论

如何在HTML中使用SVG文档?有多种方法可以完成:可以使用HTML iframe;可以在XHTML中直接使用 SVG 代码 (前提要正确设置命名空间);但最常用的方法是通过HTML object 元素。 HTML object 的一个很大的优点是作者可以设置备用HTML内容,若浏览器不支持SVG,则将显示备用内容。下面是一个例子:

<html>
<body>
<object type="image/svg+xml" data="foo.svg">
<!-- fall-back HTML content goes here -->
<p>Sorry! Your browser does not support SVG!
Please use a modern browser.</p>
</object>
</body>
</html>

如果你能关闭浏览器的 SVG-渲染功能 (在 Firefox中,在 about:config中双击 svg.enabled) ,然后刷新上面代码可以查看其效果。

可以在 object 中添加任意 HTML 内容作为备用内容。例如,指向SVG插件或支持SVG的浏览器的链接。我们的 SVG 相片簿将显示 HTML 版本作为后备内容。也就是说我们的备用内容是 HTML img 元素。

Break On Through To The Other Side

在HTML中嵌入SVG很有用,但是更有趣的是能通过脚本连接两个文档。记住 SVG 支持脚本而且也拥有 DOM。这意味着可以通过脚本在SVG中改变HTML,反之亦然:

在 HTML 中控制 SVG:HTMLObjectElement 的 contentDocument 属性就是 SVG 文档 (例如,SVGDocument 接口)。

在 SVG 中控制 HTML:SVG DOM中的Window 接口的frameElement 属性即是 HTML object 元素。注意只有使用内嵌SVG时此属性才有值。如果单独浏览 SVG 文件 (非内嵌),则frameElement 属性为空。

HTML-至-SVG 接口

该图显示了如何在DOM中控制所有元素 (window, document, object等)。HTML 文档 (左上角) 通过HTML object 元素包含一个内嵌 SVG 文档 (右下角) 。HTML object的contentDocument 属性指向 SVG DOM的document。类似的,也可以在上图中查找如何通过DOM控制其他属性和对象。

分类: 分 享, 技 术 标签: ,