2013年2月19日 星期二

Imgae這個TAG在IE8之前版本會有藍色框框的問題

好比底下的HTML

<a href="http://www.google.com/">
    <img src="/img/ball.png">
</a>


在IE8之前的版本(之後不確定)會因為圖片是可點的連結,所以會被藍色框框包起來。在Crome跟FireFox則不會。
為了避免藍色框框出現,可以這麼做
要在Style中(可能在CSS檔或同一檔案中)設定:


img
{
    border:hidden;
}

2013年2月6日 星期三

Html中,元件位置的控制,Position屬性

位置的控制,Position屬性有四個設定值,整理如下表:


position參數
absolute
relative
static(預設值)
fixed
中文意義
絕對位置
相對位置
靜態位置
固定位置
位置參考基準
父元素內容區邊界
在顯示流中相對其他元件的位置
不變
螢幕視窗最大可視範圍邊界(備註)
移動參考基準
文件
文件
文件
螢幕視窗最大可視範圍
可改變顯示位置
是
是
否
是
可調整大小
是
display為block:可display為inline:否
display為block:可display為inline:否
是
從顯示流中去除
是
否
否
是



一、什麼是fixed ? 最簡單的理解方式,就是很多大陸網站,會有廣告,會跟著你畫面,無論你滑鼠怎麼上下滾,廣告永遠出現在那個位置,那就是fixed的最直接示範。


二、什麼是跟absolute?跟fixed差不多,在畫面上元件都放在固定的位置,但會跟著捲軸的捲動,而跟著上下跑,這就是所謂的absolute。但是,你所設定的位置(left, top是根據你的父親容器來決定,不是螢幕範圍,而且,這個父親還必須具備「位置參數有設定為absolute或relative,如果父親容器沒有設定absolute或relative那就再看上一層父親元件,若沒有這種父親容器,則位置參考就會依據螢幕範圍。)


三、什麼是static?原本瀏覽器預設的就是static,就是按照原本的顯示流來排版,完全不能改變位置(下CSS指令無效)。


四、什麼是relate?比static略有彈性,就是在原本的顯示流上,然後作位置的調整,比方原本的位置流應該要讓元件B放在元件A下方位置,比方在x=20px, y=300px。而指定了left:30px, top:100px的話,就會讓位置出現在x=50px, y=400px了。



備註:


通常用fixed都會指定想放置的位置才對,但是如果你對某個元件沒有指定位置,他會依照顯示流中相對其他元件的位置來放置,但是,畫面捲動時又會固定住位置,不會隨著捲動,然後偶而又會被別的元件蓋住,行為難以理解。



顯示流說明參考:
http://my-web-design.blogspot.tw/2007/10/css-divposition.html



從10種位置範例設定來瞭解:
http://www.barelyfitz.com/screencast/html-training/css/positioning/

2013年1月24日 星期四

Input元件的Width, Size, MaxLength, InputTyoe


文字輸入框在HTML中算是很常用的元件
這裡介紹一些簡單的屬性


<input maxlength="12" size ="12" type="password" value=""/>

其中的type,可以設定為text,可以設定為password,更可以設定為button,submit ........
今天針對text跟password來說明一下,也就是功能跟顯示上為文字輸入框

能輸入幾個文字,由maxlength來決定,而寬度,可以由size來決定,會根據font-size加上這裡的size屬性,決定出寬度,當然,你也可以不用這樣設定,而是在CSS當中直接設定width。

另外,當你設定為password來讓使用者輸入密碼的時候,預設會用「‧」來當成遮蔽字元,但是這個字元會根據不同的字型,在不同的瀏覽器可能會有大小差很多的情況,比方,用微軟粗黑體,那在Firefox底下看到的這個小圓點會變成大圓點。字型改為Arial則不會有這種情形了。

Html下拉選單ComboBox的Width不精準的問題

這是個目前沒有好解法的問題,這相信一般人碰到機會或許不到,因為現在大多數的人排版網頁應該會用相對位置,而非絕對位置,也不太會有老闆跟我老闆一樣,要你一個Pixel也不能歪掉的對齊。(拿尺在螢幕上量是家常便飯)不過既然發生了,我就記錄一下,以免後來忘記。


ComboBox下拉式選單在HTML4的語法是這樣

<select name="thelist" class="Language">
  <option>English</option>
  <option>繁體中文</option>
  <option>簡体中文</option>
</select> 


在HTML5的語法是這樣

<input type=text list=browsers >
<datalist id=browsers >
   <option> Google
   <option> IE9
</datalist>


而HTML5的作法相當彈性,如果按照這個初始值來設定,出來的下拉選單會非常的陽春,而且只是個DropDown元件,可編輯,外觀看起來又像是TextInput元件,所以我採用HTML4的作法。

而我做出這個元件之後,由於要對齊於背景圖,採用絕對位置,所以我需要在JavaScript去計算Left位置,所以我需要去透過JQuery去抓Language這個select元件的寬度,一抓,發現各家瀏覽器抓出來的數值差很大,Chrome跟IE比較接近,但稍有幾個Pixels的誤差,而Safari差的可多了,造成計算位置大錯誤。
解法:

我原本是不設定此物件的寬度,由文字個數跟Font-Size來決定寬度就好,而上述的抓寬度出來的數值錯誤,只好改為,我在CSS當中自己先設定了Width,(當然,這裡要實驗個幾次,在各瀏覽器確實都能正確顯示,這寬度才合適),然後在JavaScript就不用透過JQuery去抓寬度,而是直接用剛剛的固定寬度來計算就好,這樣才能得到正確的位置。

2013年1月10日 星期四

Label如何將文字水平跟垂直都能置中對齊

<Label>的文字水平對齊方式超簡單,在CSS檔, 或Style區段內設定一行text-align:center(left, right);一行搞定,但垂直對齊呢?說真的,對不知道的人來說,還真的很難,甚至還有人說:「can't , Impossible」。

後來終於爬到文章了,中間雖然有些人提到可以用margin-top, margin-left來控制,但是,我發現很困難控制位置,而最佳的解法應該就是底下這樣:

首先,有個首要條件:
position:absolute;
這樣就需對你的Label設定left, top, width, height,然後加入底下這兩行,就能讓文字垂直置中對齊。


vertical-align:middle;
line-height: 50px; (這裡的高度,設定跟<Label>的height一樣高)



我的應用上,是在image物件上,擺上一個<Label>,整個當按鈕來控制。所以每一個<Label>的left, top, width, height都設定成跟<Image>一樣,然後加上上面兩行的垂直置中對齊,就搞定了。

你有可能想到:「為什麼不直接讓<Label>的top數值都比<Image>多個10點或15點就可以達到置中」啦?但,實際做的時候,會發現,在Chrome跟IE底下看到結果會不同(哭哭),在Chrome會比較高,在IE看到同樣設定的數值卻會比較低,上述的方法還是比較穩定些的。

JQUERY引入時的兩三事


JQuery真的很方便,不過,引用的時候有時候會忘記小細節
比方底下的案例:

<script type="text/javascript" src="sample.js"></script>
<script type="text/javascript" src="jquery-1.7.1.min.js"></script>

如果你的 jquery-1.7.1.min.js (如果以後有更新版本,那數字部分可能不相同)並非第一個引入,那你在sample.js想用JQuery的語法,就會被告知: '$' 未經定義



大多數人應該不會犯這樣的錯誤
但是偶而如果發現,寫好的涵式、事件沒有被正確觸發,而DEBUG的時候發現這樣的訊息,應該第一個可以研判,是引入的順序有錯了。