存档

文章标签 ‘CSS’

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 标签: , , ,

「推荐」纯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

兼容所有主流浏览器的CSS间隔竖线

2010年7月7日 2 条评论

有时候需要使用 | 间隔网站选项,当然有很多的选择,你会怎么实现呢?是不是使用下面的代码:

<a href="http://www.wheatime.com/">首页</a>|<a href="http://www.wheatime.com/about">关于</a>

我们来看看taobao和paipai的实现方式,这两个站首页罗例产品分类时,都使用了这种样式:

paipai的实现:

a{
border-left: 1px solid #D9D9D9;
margin-left: -1px;
padding-left: 5px;
}

taobao的实现:

a{
border-left: 1px solid #B7D0E4;
display: inline-block;
margin-left: -1px;
padding: 0px 0px 0px 3px;
}

这段CSS很巧妙的将margin-left设为-1,将第一个border隐藏了起来,而且兼容所有的主流浏览器。这样,就不用给第一个或者最后一个样式做特殊样式处理了。如果间隔需要大些,可以很方便的通过设置padding-left和padding-right来控制。

分类: 技 术 标签: , , ,

My Sweet Titles

2010年6月28日 没有评论

在看过无数博友的Sweet Titles文章介绍后,终于忍不住在另一个站点上使用了这个酷炫的显示!发现因为IE对alt代码标签的识别,会导致在IE下出现alt内容和Sweet Titles重叠的显示。说下我的解决办法,OK,从头开始:

1. 在站点上载入jQuery库
2. Sweet Titles效果JS代码:

var sweetTitles = {
	x : 10,								// @Number: x pixel value of current cursor position
	y : 20,								// @Number: y pixel value of current cursor position
	tipElements : "a",	    			// @Array: Allowable elements that can have the toolTip,split with ","
	init : function() {
		$(this.tipElements).mouseover(function(e){
			this.myTitle = this.title;
			this.myHref = this.href;
			this.myHref = (this.myHref.length > 30 ? this.myHref.toString().substring(0,30)+"..." : this.myHref);
			this.title = "";
			var tooltip = "<div id='tooltip'><p>"+this.myTitle+"<em>"+this.myHref+"</em>"+"</p></div>";
			$('body').append(tooltip);
			$('#tooltip')
				.css({
					"opacity":"0.8", // 0.8 为透明度可自行根据喜好调整数字
					"top":(e.pageY+20)+"px",
					"left":(e.pageX+10)+"px"
				}).show('fast');	
		}).mouseout(function(){
			this.title = this.myTitle;
			$('#tooltip').remove();
		}).mousemove(function(e){
			$('#tooltip')
			.css({
				"top":(e.pageY+20)+"px",
				"left":(e.pageX+10)+"px"
			});
		});
	}
};
$(function(){
	sweetTitles.init();
});

3. Sweet Titles的CSS样式

body div#tooltip { position:absolute;z-index:1000;max-width:240px;width:auto !important;width:240px;background:#000;text-align:left;padding:5px;min-height:1em;}
body div#tooltip p { margin:0;padding:0;color:#fff;font:12px verdana,arial,sans-serif; }
body div#tooltip p em { display:block;margin-top:3px;color:#f60;font-style:normal;font-weight:bold; }

4. 禁止IE显示图片alt标签的js代码(需放在所有图片后)

function RemoveAllAlt(){
	var oimg = document.getElementsByTagName("img");
	for(var i=0;i<oimg.length;i++){
		oimg[i].setAttribute("alt","");
	}
}
window.onload = RemoveAllAlt();

具体效果,请移步至 http://about.wheatime.com

分类: wordpress 标签: , , , ,

WP插件是如何调用JS和CSS的

2009年9月23日 13 条评论

稳健的程序代码和丰富的插件扩展造就了WP的今天,也有的人说用WP就是玩插件,可见WP插件的重要性!如今越来越多的插件借助JS和CSS来实现强有力的功能扩展。将插件中的javascript和css放置到分离的文件中是非常重要的,因为那样做会使插件维护起来更加容易。那么WP插件是如何调用javascript和CSS文件的呢?

在WordPress 2.8出来后,很多插件出现了兼容性的问题,根本原因就在于引入JS文件的时候出现了问题。

WordPress中如果要引入script有两个相关函数:

1
wp_register_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false );

wp_register_script函数的作用是注册要调用的脚本,而且可以设置脚本所依赖的框架(必须是WordPress默认注册的框架)。

handle是一个惟一的名字,如果以后再要引用这个脚本,则必须使用这个名字。唯一的参数。

src是脚本文件的绝对路径,这个参数也是必须置顶的。

deps是一个数组,表明你的脚本需要依赖哪些库,比如jquery,prototype等。此为可选参数

ver是一个字符串,标明脚本的版本。也是可选的。

in_footer是WordPress2.8里面才添加的参数,默认为FALSE,链接放在head里面。如果为TRUE的话,那么脚本链接将添加在页面的底部,如果脚本比较大的话,能够加快页面的加载速度,提高用户的浏览体验。

举一个例子:

1
wp_register_script( 'kay_js', WP_PLUGIN_URL. 'kay/js/script.js', array('jquery'), '1.0');

wp_register_script函数只注册脚本,在运行的时候并不会让脚本装载到页面。我们还需要wp_enqueue_script函数:

1
wp_enqueue_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false );

wp_enqueue_script函数除了src参数为可选外,其它的参数都是一样的。如果提供了src参数的话,则会自动为你自动注册该脚本,相当于先调用了wp_register_script。

1
wp_enqueue_script( 'kay_js');

这样就可以在加载的队列里面加入该脚本了。由于wp_enqueue_script会自动注册,上面两条语句可以合做一条:

1
2
wp_enqueue_script( 'kay_js', WP_PLUGIN_URL. 'kay/js/script.js',
array('jquery'), '1.0');

在合适的时候调用这些函数就是一个最关键的问题了,在WordPress 2.7.1中注册到wp_head中可以执行,但是在2.8里面就无法正常运行了。查阅了文档发现对于脚本来说应该注册到wp_print_scripts才能够确保执行。

代码如下:

1
2
3
4
5
6
7
8
class kay {
    function add_jsfile() {
        wp_register_script( 'kay_js', WP_PLUGIN_URL. 'kay/js/script.js', array('jquery'), '1.0');
        wp_enqueue_script( 'kay_js');
    }
}
$kay = new kay();
add_action('wp_print_scripts', array(&$kay, 'add_jsfile'));

这样在页面就可以正常加载js文件了。对于css文件来说,与js文件完全类似,只不过函数名称稍微变化一下,没有依赖的框架而已。如:

1
2
3
4
5
6
7
8
class kay {
    function add_cssfile() {
        wp_register_style( 'kay_css', WP_PLUGIN_URL. 'kay/js/script.js', array('jquery'), '1.0');
        wp_enqueue_style( 'kay_css');
    }
}
$kay = new kay();
add_action('wp_print_styles', array(&$kay, 'add_cssfile'));

此外还有一种笨办法可以使页面加载文件,那就是在wp_head文件里面直接echo了,如:

1
2
3
4
5
6
function echo_js() {
    echo "<script src="url-to-your-js-file.js" type="text/javascript"></script>";
        echo "<link href="url-to-your-css-file.css" type="text/css"/>";
        echo "<style type="text/css">.btn{border-width:1px}</style>"
}
add_action('wp_head', echo_js);

最后这种方法还是不推荐的,能够选用前面的方法还是选用前面的方法,兼容性更好。

分类: wordpress 标签: , , , ,

CSS中背景图片定位方法

2009年8月10日 14 条评论

越来越多的网站开始将多个图标放在一个图片里,这样做的好处一是减少与服务器的连接次数,二是可以让部分未用到的图片预先加载;最大的缺点就是图片难以定位了,不过如果你的图片规则,排列的井然有序,这个缺点也就不存在了。

在CSS中,背景图片的定位方位有3种:

1)关键字:background-position: top right;
2)像素:background-position: 0px 0px;
3)百分比:background-position: 0% 0%;

上面这三句语句,都将图片定位在背景的左上角,表面上看效果是一样的,实际上第三种定位机制与前两种完全不同。

前两种定位,都是将背景图片左上角的原点,放置在规定的位置。请看下面这张图,规定的位置是“20px 10px”和"60px 50px",都是图片的原点在那个位置上,图中用X表示。

但是第三种定位,也就是百分比定位,不是这样。它的放置规则是,图片本身(x%,y%)的那个点,与背景区域的(x%,y%)的那个点重合。比如,如果放置位置是“20% 10%”,实际结果如下图,可以看到这个点是在图片本身的“20% 10%”的位置上。

下面是一个有趣的例子。

背景图片是四个边长为100px的方块叠在一起:

请问怎样才能将其横过来:

答案是,在网页中先设置四个div区域:

<div>
</div>

<div">
</div>

<div>
</div>

<div>
</div>

然后,这样编写CSS:

.box1, .box2, .box3, .box4 {
float:left;
width:100px;
height:100px;
position:relative;
background: #F3F2E2 url(1234.png) no-repeat;
}

.box1 {
background-position:0% 0%;
}

.box2 {
background-position:0% 33.33333%;
}

.box3 {
background-position:0% 66.66666%;
}

.box4 {
background-position:0% 100%;
}

点击这里查看最后的效果。可以看到第二和第三个方块的设置,并不是一般想象中的“0% 25%”和“0% 75%”。

不过说实话,这个例子用像素设置法更容易一些。使用百分比设置的主要优势在于,当页面缩放的时候,背景图片也会跟着一起缩放,具体请参考下面“延伸阅读”中的第二篇文章。

[延伸阅读]

1. CSS: Using Percentages in Background-Image

2. Creating Liquid Faux Columns

3.为什么将多个图片放在一个图标里?

分类: 分 享 标签: ,

Hoverbox 图片集CSS代码

2008年12月10日 没有评论

一个纯净的基于CSS的图片集,鼠标悬停缩略图就会显示放大效果。

效果演示

源代码下载

via: http://sonspring.com/journal/hoverbox-image-gallery

分类: 分 享 标签: , ,