存档

文章标签 ‘主题’

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

主题集成彩色标签

2010年8月19日 1 条评论

最近很看好彩色标签,在几个网站上都已经启用了。博客因为主题风格原因就没有使用,界面效果请见 Wheat Notes

建议大家也不要盲从花哨的元素,根据自己的整站内容和主题风格,添加合适得体的功能和效果。界面很重要,但我还是觉得是“内容为王”的。具体操作步骤如下:

1. 在主题 functions.php 中添加:

//Start of colorful tag cloud
function colorCloud($text) {
 $text = preg_replace_callback('|<a (.+?)>|i', 'colorCloudCallback', $text);
 return $text;
}
function colorCloudCallback($matches) {
 $text = $matches[1];
 $color = dechex(rand(0,16777215));
 $pattern = '/style=(\'|\")(.*)(\'|\")/i';
 $text = preg_replace($pattern, "style=\"color:#{$color};$2;\"", $text);
 return "<a $text>";
}
add_filter('wp_tag_cloud', 'colorCloud', 1);
//End of colorful tag cloud

其中,颜色是随机的,可以自行修改

$color = dechex(rand(0,16777215));

这行来修改范围。

2. 主题相应位置添加:

<?php wp_tag_cloud( 'smallest=8&largest=24&number=50' ); ?>

8 是最小的 tag 的字体大小(用的最少的 tag),24 是最大的(用的最多的 tag),50 是 tag 的数目,可以自行修改。

类似这样集成在侧栏里的一些 widgets ,对于追求网站速度使用缓存技术的朋友,可以将整栏使用 php 的 Output Control Functions 缓存;或者借助 widgets cache 和 php widgets 插件进行缓存,以此来加快网站页面打开速度。如果是侧栏较多的网站,这个方法会大大减少你的数据库查询次数!

分类: wordpress 标签: , , ,

WordPress 3.0来了,你的主题准备好了吗?

2010年6月8日 1 条评论

目前WordPress 3.0 RC已发布,新版增加了许多功能,可能喜欢尝鲜的朋友已迫不及待地升级了自己博客,其中在主题选项中多出一个Menus功能,一个可以方便灵活地向导航菜单添加自定义内容的新功能。但当你打开这个选项时会提示 "The current theme does not natively support menus, but you can use the "Custom Menu" widget to add any menus you create here to the theme's sidebar." 主要意思就是当前的主题不支持菜单功能,不过我们依然可以添加自定义菜单到主题侧边栏中,也就是小工具。然而当你启用3.0版默认主题Twenty Ten后,这个提示就消失了,看来是新的默认主题针对3.0功能进行了优化。

原来在默认主题functions.php中有一句:

// This theme uses wp_nav_menu() in one location.
register_nav_menus( 
array(
'primary' => __( 'Primary Navigation', 'twentyten' ),
) );

把这句代码添加到当前主题functions.php模板文件中,提示也消失了,关键就是这句了。

也可以用:

// This theme uses wp_nav_menu()
if ( function_exists( 'register_nav_menus' ) ) 
{ 
register_nav_menus( 
 array( 
 'foot_menu' => 'My Custom Footer Menu', 
'sidebar_menu' => 'Super Sidebar Menu' 
 ) ); 
}

或者更简单的代码(Wheat Notes正在使用):

// This theme uses wp_nav_menu()
add_theme_support( 'nav-menus' );

详细函数语法参照:http://codex.wordpress.org/Function_Reference/register_nav_menus

但只修改这里,并不会真正在主题导航菜单上启用这个功能,只会在侧边小工具中多出custom menu小工具一项,还需修改导航部分代码,才会体验到新的功能。

一般主题导航部分代码为:

<?php wp_list_pages('title_li='); ?>

或者类似:

<?php wp_list_categories('sorderby=name&depth=4&title_li='); ?>

需将其修改为 wp_nav_menu() 函数直接输出导航菜单:

<?php wp_nav_menu($args); ?>

该函数可传递一个数组进去,指定该菜单的各项参数,比如调用哪个菜单、如何排序、给菜单指定一个div层等等。具体的各参数取值请见官方说明文档

当你使用

<?php wp_nav_menu(); ?>

时,将调用第一个导航菜单。如果你想调用其它菜单,可以通过菜单的 id, slug, menu 名称来指定:

例如:

<?php wp_nav_menu(array('id'=>5));  ?>
or
<?php wp_nav_menu(array('menu'=>'Test Menu'));  ?>
or
<?php wp_nav_menu(array('slug'=>'testmenu'));  ?>

介绍个WOPUS推荐的:

<?php wp_nav_menu( 'id=navbar' ); ?>

也可以根据自己使用的主题功能修改为类似(Wheat Notes正在使用):

<?php wp_nav_menu( 'id=navbar&menu_class=headermenu' ); ?>

详细函数语法参照:http://codex.wordpress.org/Function_Reference/wp_nav_menu

主题改造完成,下面简单介绍一下这个Menus功能的使用方法:

打开Menus设置页面,在+区域输入menu name后点击creat menu添加一个新的自定义菜单。

在左侧选择准备显示在导航菜单的分类标题或页面,也可以添加一个链接,然后点击“add to menu”添加到新的自定义菜单中,保存菜单。

官方操作说明:http://codex.wordpress.org/Appearance_Menus_SubPanel

刷新博客页面,看看新的导航菜单是不是出来了。

总结:个人感觉这是3.0版一个非常不错的新功能,可以灵活方便地变更主题导航菜单内容,不受主题本身限制,但之前所有主题都不支持这个功能,需手动修改模板文件,建议新手更改前备份主题。

分类: wordpress 标签: , ,

为WP主题添加“网页加载中”特效

2010年6月7日 3 条评论

为了加强浏览者的体验,不在等待页面加载时感到枯燥,从而关闭网页,很多网站都会制作一个“网页正在加载中”的提示效果或显示加载进程,加载完成后提示消失,今天我们把这一特效添加到Wordpress主题中。要实现该特效同样要用到jquery,而我们目前用的大部分主题,为了实现其它特效已提前加载了jquery,那么正好充分利用jquery的强大功能,添加此特效何乐而不为呢?当然仅仅为了实现这个特效,而去加载50几K的jquery就有点得不偿失了。

实现方法:

打开header.php模板文件

第一步:加载jquery.min.js

外链接格式:

<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.2.3.min.js"></script>

内链格式:

<script type="text/javascript" src="<?php bloginfo('stylesheet_directory'); ?>/js/jquery.min.js" ></script>

第二步:在前添加一段JS代码

<script type="text/javascript">
jQuery(function(){
jQuery('#loading-one').empty().append('页面加载完毕.').parent().fadeOut('slow');
});</script>

第三步:在后添加显示效果样式

<div id="loading" style="position:fixed !important;position:absolute;top:0;left:0;height:100%; width:100%; z-index:999; background:#000 url(这里输入一个图片地址) no-repeat center; opacity:0.6; filter:alpha(opacity=60);font-size:14px;line-height:20px;" onclick="javascript:turnoff('loading')">
<p id="loading-one" style="color:#fff;position:absolute; top:50%; left:50%; margin:50px 0 0 -50px; padding:3px 10px;" onclick="javascript:turnoff('loading')">页面载入中,请稍候……</p>
</div>

图片大小格式不限,不加图片也可以,到此该特效添加完毕。

分类: wordpress 标签: , , ,

Sandbox Theme的基本结构

2010年5月10日 6 条评论

由著名的Wordpress主题制作站Wpdesigner.com的small potato编写。

div#wrapper [.hfeed]
#header
h1
div#blog-description
div#access
div.skip-link
sandbox_globalnav() [div#menu]
div#container
div#content
div#nav-above [.navigation]
div.nav-previous
div.nav-next
div#post-the_ID() [sandbox_post_class()]
h2.entry-title
div.entry-date
div.entry-content
div.entry-meta
span.author (.vcard)
span.cat-links
span.comments-link
div#nav-above [.navigation]
div.nav-previous
div.nav-next
div#primary [.sideabar]
ul.xoxo
li#pages
li#categories
li#archives
div#secondary [.sidebar]
ul.xoxo
li#search
li#rss-links
li#meta
div#footer
span#generator-link
span#theme-link

延伸阅读:Charles的SandBox 何去何从?

分类: 分 享 标签: , , , ,

黄山归来,天下无山!

2010年4月1日 没有评论

最近在另一个WP站上安装使用了K2,作为WordPress界公认的强大主题之一,K2简洁的界面、对细节的周全考虑、漂亮的代码优化、强大的功能与易用性的完美结合成就了这部伟大的作品。没有任何一款主题如此完美的运用了AJAX技术并提供了如此丰富的自定义内容,也没有一款主题如此恰到好处的为各种主流WP插件预留了接口,甚至没有一款主题像它那样用如此精巧的构思简化代码书写工作。

K2给其体验者带来的是一种“黄山归来,天下无山”的感觉,K2的出现,令其他WordPress主题黯然失色。它完全颠覆了主题的传统定义,正如Michael所言:

It won’t make you coffee, sing songs of sweet regret or sit at your bedside when you’re ill, but it might make life just a tad bit easier for you.

K2一直在疯狂的更新,你可以通过SVN得到最新的版本。有空也可以去官方论坛看看,那里有更多的K2 fans和更多的MOD。

关于K2的主题功能介绍大家可以点击这里查看Xiaorsz童鞋的文章。

分类: wordpress 标签: , ,

随机显示header图片

2009年10月17日 6 条评论

关于随机显示图片的方法很多,这里主要向大家介绍2个基于 php rand() 函数来实现的方法,由此我们在 wordpress 上通过简单改动就可以实现背景图片随机切换显示的功能。下面以 wordpress 中 header 部分图片为例介绍其实现方法,当然如果你愿意,代码稍加改动就可以把该功能应用于任何地方。

random header — 守望的麦子

实现方法一:
1.选择一系列尺寸合适的图片,比如3张
2.把图片上传到你的主题图片文件夹中
3.在你的主题 header.php 文件中使用如下代码:

1
2
3
$num = rand(1,3); //Get a random number between 1 and 3, assuming 3 is the total number of header images you have
<div id="header" style="background: url(images/.jpg) no-repeat left top">
</div>

打开博客页面,刷新测试效果!

解释:使用PHP 函数 rand() 为变量 $num 从1和10之间获取一个随机数字作为初始值,然后我们将 $num 的值使用到主题的 header.php 文件背景图片路径中。

random header — 守望的麦子

实现方法二:
在你的 header.php 中使用代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$result_random=rand(1, 99);
 
if($result_random<=33){ ?>
    <div id="header" style="background:transparent url(images/header1.jpg) no-repeat top left;">
<?php }
 
elseif($result_random<=66){ ?>
    <div id="header" style="background:transparent url(images/header2.jpg) no-repeat top left;">
<?php }
 
elseif($result_random<=99){ ?>
    <div id="header" style="background:transparent url(images/header3.jpg) no-repeat top left;">
<?php } ?>
 
<!-- Header code goes here -->
</div>

解释:rand() 函数将在1-99中提取一个随机数值,如果随机数值≤33,则显示第一张图片,如果随机数值≤66,则显示第二张图片……

分类: wordpress 标签: , , , , ,

暂不升级

2009年8月8日 22 条评论

主题已经用了快1年了,每次登陆后台都可以看到提示升级主题,刚才看见 iNove 已经被 MG12 升级到1.4.6了!我用的是最初的1.0版本……对主题的升级和更改我会很谨慎,每次 MG12 有新的动作我都会去看他的CHANGELOG,然后对于较大的变动我会结合他的日志去手动做相应的更改,步入1.4以来,关于 iNove 的更新好多都是在优化小细节和整合一些功能。可以说 iNove 写的非常漂亮,感谢 MG12 对 iNove 做出的努力……

对于最新版本的一些功能和细节问题已经在自己的主题上改动了,暂时不会对主题进行全面升级,等到1.5吧……

分类: 随 笔 标签: , , ,

tomorrow is another day...

2009年8月2日 3 条评论

记得在高中的时候看过的 — tomorrow is another day,当时的一个译者给出的翻译是“明天自有明天的风吹”(我想这肯定是一个大胆而前卫的译者),不知道为什么现在会想起这句话……

准备睡觉了……明天的风?在这里做个标记……囧

什么是囧?

囧字的读音:

囧字普通话读jiǒng,粤语读JWING。

囧的意思:

在古代表示窗户明亮,透明透光引申为明亮之意,或是光明、明亮,多在诗词中出现,常以冏和囧互通。也有人认为囧就是“光明、辉煌、太阳”等的意思。

在网络语言中,囧中囗=脸型,八=两个下垂的眼睛,口(眼睛下面的)=嘴巴,囧代表了惊吓而使表情变形,比方说,

甲:我昨天早上醒来发觉身上有100只蟑螂。

乙:囧。

如何打出囧字呢?

五笔:LWMV,仓颉:WCB,笔顺编号:2534251,四角号码:60227,UniCode:CJK 统一汉字 U+56E7,拼音:jiǒng。

为什么网络上频繁的使用囧字呢?

囧和ORZ有不可分的关系,Orz是什么?Orz就是“失意体前屈”。

失意体前屈,是一种源自于日本的网络象形文字(或心情图示),并且在2004年时在日本、中国, 香港与台湾俨然已经成为一种新兴的次文化。常写作orz、Oro、Or2、On_、Otz、OTL、sto、Jto、○| ̄|_等。但仍以“orz”最为常用。并有混合型,表示无可奈何的“囧rz”。

Orz随著使用的广泛,其涵意逐渐增加,除了无可奈何或失意之外,开始引申为正面的对人“拜服”“钦佩”的意思。另外,也有较反面的“拜托!”“被你打败了!”“真受不了你!”这类意思的用法。

它的内小“八”字视为眉眼,“口”视为嘴。它的内涵就是

1、作为头。表达沉重的思想。

2、作为脸。表达浪漫与激情。而在失意体前屈文化中,它的作用是前者。

更多囧字用法

囧rz 这是念"窘"

崮rz 这是囧国国王

莔rz 这是囧国皇后.

商rz 这是戴斗笠的囧

冏rz 楼上的他老婆吗

orz 这是小孩(因为小写)

OTZ 这是大人(因为大写)

OTL 这是完全失落

or2 这是屁股特别翘的

or2=3 这是放了个屁的

Or2 这是头大身体小的翘屁股

Or? 这也是头大身体小的翘屁股

orZ 这是下半身肥大

OTz 这是举重选手吧

○rz 这是大头

●rz 这是黑人头先生

Xrz 这是刚被爆头完

6rz 这是

魔人布欧(...)

 On 这是婴儿

crz 这是机车骑士

卣rz ←轰炸超人

曾rz ←假面超人

益r2 闭起眼睛,很痛苦且咬牙切齿的脸;另一说法为无敌铁金刚

口rz ← 豆腐先生

__Drz ← 爆脑浆

prz ← 长发垂地的orz

@rz ← 呆滞垂地的orz

srQ ← 换一边并舔地的orz

圙rz ← 这是老人家的面

囼rz ← 这个是没眼睛的

囜rz ← 没有眼和口的

圀rz ← 这是歪咀的

囶rz ← 这是无话可说的

苉rz ← 这是女的

Ora ←衍伸用法,不过脚是跪著状态。

or7 ←尖屁股

Oroz ←这是有小腹

Orz~ ←这是赛亚人失意体前屈

:◎:rz ←这是张大嘴巴嚎啕大哭的失意体前屈

oΩ: ←背部隆起的

子怡姐姐的囧表情很有喜感啊。