input隱形按鈕在IE6的問題與解決方法

有時候版面設計會把按鈕作成圖片、而且讓造型上跟輸入欄結合在一起。這時候我通常會用比較偷懶的方法:把輸入欄、按鈕切成同一張圖。然後把輸入欄跟按鈕的input用隱形的方式壓在圖片上。

輸入欄的部份隱形沒有問題,但是input按鈕隱形的時候,在IE6會有問題,最近剛好碰到兩次,寫一下原本的作法跟解決方法。

如果不考慮IE6,IE7以上以及非IE瀏覽器可以用下面這段css把input變成隱形按鈕
<input type=”submit” name=”button” id=”button” value=”送出” />

#button{
width:10px; // 因為要隱形、要自訂寬
height:10px; // 因為要隱形、要自訂高
text-indent:-300px; //讓按鈕裡面的字超出按鈕範圍之外
overflow:hidden; //將超出範圍的字隱藏
border:none; //把按鈕框隱藏
background:transparent; //把背景變透明
}

但是在IE6下,只要把按鈕背景變透明,就只有按到字的時候,才能按到按鈕,偏偏我又設定把字也隱藏了,所以根本按不到。這個時候有兩種解法

解法一:把原本放input的位子改成放一張透明的gif,在該gif上下超連結
解法二:把<input type=”submit” name=”button” id=”button” value=”送出” />改成<input type=”image” src=”透明圖片gif的路徑” name=”button” id=”button” value=”送出” />

我第二次遇到的時候實際上還碰到另外一個狀況,就是該父元素的bg是用png,在ie6底下用fliter的方式修復。但是造成按鈕無法按,父元素加了position:relative;還是無效。所以後來只好針對ie6用gif圖檔背景,然後配合上述修改才處理掉按鈕在ie6無法按到的問題。

UL、OL在Firefox和IE下的差異

參考文章:UL在Firefox和IE下的不同表現

詳細的內容直接看參考文章囉。
簡單來說,ul、ol在firefox跟ie底下的預設值不同。在firefox預設有padding沒margin。在IE預設有margin沒padding。

我覺得要個別處理很麻煩,所以通常都會導入一個reset.css。在裡面把大部份預設有margin、padding的元素(例如body、h1~h6、p、ul、ol)直接都設定為0。有需要的時候才手動給值。這樣比較單純。

條件注釋相關說明

參考文章:關于條件注釋的幾個實例代碼

如果要針對IE6、IE7、IE8下不同的css,有很多種方法,目前我是用特殊字元的方式(在樣式前面加上*、_、 或尾巴加\8)。因為做起來最省事。但是這種作法的缺點是無法通過W3C CSS驗證

那如果想要通過驗證,就得用【條件注釋】的方法來做。

應用方式如下
<link rel=”stylesheet” media=”all” type=”text/css” href=”style.css” />
<!–[if lte IE 6]>
<link rel=”stylesheet” media=”all” type=”text/css” href=”style-ie6.css” />
<![endif]–>
<!–[if lte IE 7]>
<link rel=”stylesheet” media=”all” type=”text/css” href=”style-ie7.css” />
<![endif]–>
<!–[if lte IE 8]>
<link rel=”stylesheet” media=”all” type=”text/css” href=”style-ie8.css” />
<![endif]–>

因為條件注釋只有IE看的懂,所以別的瀏覽器不會讀後面的那些樣式檔。

 

 

CSS中link與import比較

參考文章:CSS中link與import比較

link使用範圍:
因為是HTML語法,所以只能用在HTML網頁中

import使用範圍:
屬於CSS語法,所以可用於網頁中的樣式定義,也可用於樣式檔案中

link瀏覽器載入樣式表時機:
讀到標籤時不會載入樣式檔,待讀到使用樣式的標籤時,才載入樣式檔內容

import瀏覽器載入樣式表時機:
讀到@import指令即立該載入樣式檔內容

參考資料:
最新PHP+MySQL+AJAX網頁程式設計(旗標出版)

CSS white-space 属性

參考文章:CSS white-space 属性

normal:(預設)多個半形空白只會顯示一個空白,一定要有br才會換行,遇到邊界會自動換行

pre:同<pre>標籤,保留多個半形空白、無br的換行(在段落裡只是換行但沒用br,顯示出來還是會有換行)、一段內容如果超過一行,遇到邊界不會自動折行,

nowrap:不保留多個空白(多個半形空白會只顯示1個半形空白)與無br的換行,一段內容如果超過一行遇到邊界不會自動折行。除非有br才會折行

pre-wrap:保留多個半形空白、無br的換行,但是一段內容如果超過一行,遇到邊界會換行

per-line:不保留多個空白,但是保留無br的換行,且一段內容超過一行,到邊界會換行

inherit:從父層元素繼承wite-space 屬性

PNG在IE6透明的方法

參考文章:PNG在IE6透明的方法讓IE支持PNG透明的最好用的方法

重點整理

  1. 如果圖片是用img放在html內,使用css引入ie6png.htc的方式解。但是這方法不知道是我用的時候有問題還怎樣,用不太起來,不過我確實有在別的系統看過這樣的解法,而且好像是連用背景圖都可以這樣解。
  2. 所以如果同1的狀況,我使用的解法是在頁面導入pngfix.js。參考文章:
    PNG in Windows IE: How To Use,裡面有這個js可下載
  3. 內容圖、背景都可以用的修法是IE PNG fix,不過如果要修不同位置,要調整多個htc。參考文件:IE PNG Fix 2.0 Alpha 4
  4. 如果是css使用背景圖,在IE6底下可改用fliter,如下
    background-image: none;
    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=’images/test.png’, sizingMethod=’crop’);
  5. 但是在IE6底下用PNG背景會有另外一個問題:如果該元素內有放文字、放超連結,會無法選取,當然連結也無法點選,就好像有個透明的東西蓋住讓你不能按。原因不明,總之在png背景的物件上在加上position:relative;即可

以JQuery+Thickbox實現Ajax版的點小圖看大圖

參考文章:以JQuery+Thickbox實現Ajax版的點小圖看大圖介紹幾套關於 Box Window 的 jQuery Plugins

其他圖片放大效果(放大鏡)
http://www.bondlink.com.tw/webdesign/tech/page/cloud-zoom/
http://www.kaiwo123.com/js-flash/show_39/
http://zoomy.me/Home.html
http://css-tricks.com/examples/AnythingZoomer/index.php