2010-07-15

jquary導航的實作

最近手邊的網頁需要一個導航,
想了很久,可能用一個導航加上sub導航的方式會比較適合,
導航有AAA, BBB, CCC, DDD 四個大項目
下面各有aaa, bbb, ccc 三個小項目

AAA-->aaa, bbb, ccc
BBB-->aaa, bbb, ccc
CCC-->aaa, bbb, ccc
DDD-->aaa, bbb, ccc

我想用按下AAA後再出現aaa, bbb, ccc的方式進行,而被選中的項目下會有箭頭圖示
我覺得jquary的一些顯示方式還挺不錯 的~
試著自己做看看了

首先是要有一個jquary的文件
< src="js/jquery.js" type="text/javascript">< /script>

再來是代碼的部份
有bottom和subbottom兩個部份

< id="bottom">
< ul>
< li>< span>< a id="nav1" onclick="navTabs(1)">AAA< div>< /div>< /a>< /span>< /li>
< li>< span>< a id="nav2" onclick="navTabs(2)">BBB< div>< /div>< /a>< /span>< /li>
< li>< span>< a id="nav3" onclick="navTabs(3)">CCC< div>< /div>< /a>< /span>< /li>
< li>< span>< a id="nav4" onclick="navAppTab(4)">DDD< div>< /div>< /a>< /span>< /li>
< /UL>
< /div>

< div id="subbottom" style="display:none">
< ul id="sub1">
< li>< span>< a href="#">aaa< /a>< /span>< /li>
< li>< span>< a href="#">bbb< /a>< /span>< /li>
< li>< span>< a href="#">ccc< /a>< /span>< /li>
< /ul>
< ul id="sub2">
< li>< span>< a href="#">aaa< /a>< /span>< /li>
< li>< span>< a href="#">bbb< /a>< /span>< /li>
< li>< span>< a href="#">ccc< /a>< /span>< /li>
< /ul>
< ul id="sub3">
< li>< span>< a href="#">aaa< /a>< /span>< /li>
< li>< span>< a href="#">bbb< /a>< /span>< /li>
< li>< span>< a href="#">ccc< /a>< /span>< /li>
< /ul>
< ul id="sub4">
< li>< span>< a href="#">aaa< /a>< /span>< /li>
< li>< span>< a href="#">bbb< /a>< /span>< /li>
< li>< span>< a href="#">ccc< /a>< /span>< /li>
< /ul>
< /div>



希望的效果是,點下AAA後展開aaa, bbb, ccc的選單,
而閒置一段時間後會自動縮回。

< script type="text/javascript">
var timeID;
function navTabs(id) {
clearTimeout(timeID);
$('#subbottom').slideDown();
$('#homebottom').slideUp();
$('#nav0,#nav1,#nav2,#nav3,#nav4').removeClass('mainNavSel');
$('#nav'+id).addClass('mainNavSel');
$('#sub1,#sub2,#sub3').hide();
$('#sub'+id).show();
timeID = setTimeout("hideAll()", 4000);
}
function hideAll() {
$('#subbottom').slideUp('slow');
$('#homebottom').slideDown('slow');
$('#nav0,#nav1,#nav2,#nav3,#nav4').removeClass('mainNavSel');
}
< /script>

按下AAA觸發navTabs(1)
--> #subbottom展開
--> #homebottom收起
--> 先全部除移除class="mainNavSel"這是箭頭
--> 再把被觸發項目下加上class="mainNavSel"加上箭頭
--> sub導航先收起來
--> 被觸發的sub導航展開
--> 設定timeout時間

setTimeout觸發另一個function hideAll() ,會把所有subbottom都收起來,
但是有一個問題最後觸發的 Timeout會累加,
所以再按下另一個navTab的時候必須清除之前計算的時間,
在上面加上 clearTimeout(timeID);
打完收工~~

基于vertical-align的表单元素垂直对齐方式研究

人人網FED看到這篇文章,相當開 心
基于vertical-align 的表单元素垂直对齐方式研究

這問題也困擾我一段時間,
尤其在製作表單的時候,
單選框和複選框與文字的對齊非常難搞,
看完這邊文章後,我馬上修改了手邊 的CSS,
修改後相當滿意~

大致解決方案如下:

單選框和複選框的對齊方式和文字的算法不同,
所以利用方塊元素 label or span 來作為容器,
這 樣對齊的時候會以這兩樣同等的元素來宣染,
所以遇到單選框和複選框加文字的時候,
文字外一率加 上 label or span ,
並在CSS的設定上,
input, span, label { margin:0;padding:0; vertical-align:middle;}
這樣就能完美的顯示居中對齊的畫面。

CSS的圓角問題

IE就不理他了~~

網頁製作上圓角運用得當在視覺上相當好看優雅~
當然如果四邊都用圖片也是可以做到
不過在效能上會差很多了

介紹一下CSS圓角的屬性

-moz-border-radius: 5px; <--FireFox
-webkit-border-radius: 5px; <--chrome、Safari
border-radius: 5px; <--CSS3屬性

基本上這三個就可以完美達成了

簡寫的話(左上、右上、右下、左下):

-moz-border-radius: 5px 5px 5px 5px;
border-radius: 5px 5px 5px 5px;

-webkit-border-radius 不支援這樣的寫法,要分開寫

-webkit-border-top-right-radius:5px;
-webkit-border-top-left-radius:5px;
-webkit-border-bottom-right-radius:5px;
-webkit-border-bottom-left-radius:5px;

大家可以試試唷~

--------------------------不華麗的分隔線--------------------------

IE的圓角問題有解決辦法了~(開心)
http://css3pie.com/demos/tabs/
這邊提供了解決辦法~~

可以使用圓角、漸層背景甚至是陰影效果~
只要在網頁上多加載一個.htc文件,並在CSS中使用就OK了

behavior: url(PIE.htc);

不過還是有一些些小小的bug需要處理
例如在外層DIV內有圓角的設定
裡面的css必須多一個position:relative才會顯示出來
http://css3pie.com/documentation/known-issues/


關於字型

最近有個朋友在問,"大家在做中文網頁時,用什麼字體顯示一般用字最美麗呀?"

我之前在做網站時也遇到這個問題?
我自己是用繁體winXP的FF
工程師用簡體winXP的Opera
主管用繁體 macPro的Chrome
還有就是在繁體介面看簡體時的破字 (有些字會特別瘦小)

要兼顧跨瀏覽器、跨繁簡、跨作業軟體
複雜的需求產生了

Mac上一般都是黑體字型,非常好看~
之前看到一篇文章介紹mac上的字型 Hiragino Sans GB
顯示起來相當好看~
所以特別加上這一個字型

再來必須解決繁體IE瀏覽器看簡體字 型會特別瘦小
所以必須統一使用宋体來顯示
字型需加上宋体

我目前的設定是這樣的:

body {

font-family: "Hiragino Sans GB", "lucida grande", "\4E3D\9ED1 Pro",arial, tahoma, verdana, sans-serif, \5B8B\4F53, "simsun";

}

另外網頁需加上語言的宣告

< xmlns="http://www.w3.org/1999/xhtml" lang="zh" lang="zh">

使用zh-CN,IE就會使用宋体,使用zh-TW,IE會使用細明體
目前先使用zh,繁簡都是宋体,可以保持統一性

注:有一些CSS表中事不能出現中文字體的,尤其 是 {}中,所以我們要轉換成英文名、unicode、unicode2

"\4E3D\9ED1 Pro" 是儷黑 Pro
"\5B8B\4F53"是華文宋体

目前看起來能兼顧Mac、PC和繁簡的問題
也許能在試試其他的作法


-----------------------------------不華麗的分隔線-----------------------------------

2010/7/13網友補充:
嗯,Hiragino Sans GB有点像微软雅黑,第一眼讨好,时间长了不耐看字体控们都认可的苹果中文字体是 华文细黑.ttf / STXihei.ttf,端庄,经得起时间
http://zh.wikipedia.org/zh-hk/华文细黑


關於UED

UED (User Experience Design)


“什么是UED?”
UED的本意是用户体验设计,是英文User Experience Design的缩写。通常的理解,我们做的一切都是为了呈现在您眼前的页面。
但,远远不止这些,我们关心您的操作,关心您的感受。为了您更好的购 物体验,为了您每月达成更多的交易,为了您的满意——我们一直在努力。

------淘寶網UED------

我们来自人人网,FED是“Front End Develop and Design”的缩写。
我们是人人网历史最悠久的团队之 一,也是距离用户最近的团队,这个没有之一。
我们每天试图通过代码来提升人人网的用户体验,所谓“提升用户体验”,简单的说,就是要让我们的用户 用得更爽。

------人人网FED------

泛用户体验平台,是以‘用户体验’为核心的跨专业分享平台。英文缩写为:UFO
“U”,是User Experience,代表用户体验;
“F”,为Front End Research and Development,意为前端技术;
“O”,指one,代表着我们每一个人,寓意为:想像、未来、领先、科技、神奇与分享。

我们始终坚持以用户为核心,将提升产品体验做为终 极目标

------百度UFO------

在CN這邊稍具規模的網路公司都有研究UED的技術團隊
姑且不論他們叫什麼,或取了什麼名稱..
我可以了解這些技術團隊的背後
對 整個互聯網技術的提升有多大推波助瀾的影響
能稱上"能力越強,責任愈大"嗎? ~呵呵~

正因為用戶有千千萬萬種使用行為
才讓這樣的使用體驗設計有討論的空間
也因為網路技術的進步和無限可能
才能有這樣團隊的產生

你可以說CN都是山寨,都是抄襲
但是在這樣的環境下,CN的競爭力卻是扶搖直上的

在CN這邊合作的工程師常常把這句話掛在嘴邊
"只有想不到,沒有做不到~"

台灣我還沒有遇到幾個會這樣 說的

介紹大家:

淘宝UED
百度泛用户体验
人人网FED

這些團隊真的很棒~
不只影響他們的用戶,更影響整個互聯網

有關CSS hack的問題

因為多家的瀏覽器本身解析的關係(總之就是沒有一套標準)
導致必須在一個CSS的樣式下加上許許多多的特例
別問我怎麼 會這樣~我也不希望阿

我整理一下我常用的CSS hack給大家:
也幫自己做個筆記

在頁面內可以使用這樣的方式

< !--[if IE]>
  < rel="stylesheet" type="text/css" href="ie-stylesheet.css">
< ![endif]-->

對不同的會有以下

< !--[if IE 6]> - targets IE6 only -->
< !--[if gt IE 6]> - targets IE7 and above -->
< !--[if lt IE 6]> - targets IE5.5 and below -->
< !--[if gte IE 6]> - targets IE6 and above -->
< !--[if lte IE 6]> - targets IE6 and below -->

這樣可以對不同瀏覽器導入不同的CSS

!important IE6 不支持
可以用於區別IE6、 IE7、其他瀏覽器

IE6專用*html
*html body {background: red;}

屬性內可以使用 \9,*, _ (書寫順序有規定)
.element {
background: red; /* modern browsers */
background: red \9; /* IE8、IE7、IE6*/
*background: green; /* IE7、IE6 */
_background: blue; /* IE6 */
}

上面幾個可以解決大部分的問題
其他還有比較複雜的版本我有機會再研究了
另外像是firefox、opera、chrome、 Safari大多很友善,版本的更新也很好~~

但為什麼還是有這麼多的IE6用戶
我自己推想有幾種可能:
1.盜版問題: 最根本的就是盜版導致無法升級,或是害怕去升級,反正能用就用了吧
2.在中國有許多IE6的用戶,佔了全用戶的一半以上,很杯具,有很多銀行的軟 體都以IE6的引擎去開發~不用IE6就不能使用
3.中國有很多自己開發的瀏覽器,也全是用IE的系統~
4.感覺是網站本身大多無法拋棄 過去的用戶,且說是姑息吧! 不過許多網站也開始聲名或是拋棄IE6了,很值得鼓掌!

網頁的技術一直在進步,我們為了過去的技術限制
讓我們無法讓用戶體驗更好的使用行為
我覺得是設計師的悲哀~

如何修正DIV float之后导致的外部容器不能撑开的问题

請原諒我在標題上使用了簡體~

我不是CN的設計師,只不過在這邊上班

讓我驚訝的是這邊的技術層次的討論的確比TW要豐富一些

也許是環境或是市場的因素

網路(互聯網)企業比TW要發達很多~~





回到標題的討論

自從開始接觸CSS開始,對排版上有很多的疑問都無法自己解決

開始仿效別的網站或是看書自己學習

對於float的結束是最頭痛的~~(還不是因為IE的關係)

我最早都是在浮動DIV結束前加上DIV class="c"

使用 .c {clear:both}

來結束浮動,不過在編碼上看到很多這樣空空的DIV,令我很頭痛!!!

這樣的html交給工程師,我覺得挺不禮貌的~

過了一年

我才看到這篇文章
如何修正DIV float之后导致的外部容器不能撑开的问题





太棒了~我心中的大石終於放下

也分享給大家

-------------------------------------------------

.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
/* Hides from IE-mac \*/
* html .clearfix {height: 1%;}
/* End hide from IE-mac */

-------------------------------------------------

在浮動視窗外部的div加上class="clearfix"吧~

減少一些div~我想在交付網頁給工程師codeing的時候,這樣是比較禮貌的~