ime-mode 的行為

我在看 CSS3 UI 的時候,發現到 ime-mode 這個屬性目前現有的敘述[1]... 非常
的含糊,應該說基本都是抄 MDN [2]的吧。這裡問幾個問題,看有沒有人對
ime-mode 有比較多的認識,或是幫個忙做個實驗(目前只有 IE 跟 FF 支援)。
這些實驗結果都該寫進規範裡面才不會造成下一個人的困擾...

1. 適用範圍

規範裡的表格中,提到:

  # 適用於:     文字欄位

這是真的嗎?在一般元素在有 @contenteditable 的情況下這個屬性難道不能用
嗎?另外,文字欄位包不包括密碼欄位?

如果這個屬性目前的實作不適用於所有元素,那是不是還是適用於所有元素比較
好?還是因為這是一個爛功能,而且理論上並不應該屬於 CSS 所以為了要減少損
害擴散,只限制用在文字欄位?

我微博搜還搜到不少提 ime-mode 的,所以我想這個屬性要丟棄不太可能,畢竟向
後兼容還是很重要。

2. auto 跟 normal 的差異

現在的描述是

  # auto
  # 不更改現在輸入法的狀態。預設值。
  # normal
  # 輸入法狀態應該為正常 ― 此值可以在使用者樣式表裡面使用,以覆蓋頁面設定。

到底什麼是「正常」?我看了 MDN 裡的解釋(竟然還會發生 MDN 裡的資訊比規範
還多的情形,真可悲)後面那個 input[type=password] { ime-mode: auto
!important; } 的例子,好像是說 auto 的話就是在密碼欄位不能用輸入法,在其
他地方可以?所以 normal 指的是在哪裡都可以正常的用輸入法的意思嗎?有沒有
人可以證實一下?

在看 MDN 這個解釋之前,我一直以為 auto 才是在哪裡都可以正常的用輸入法。
MDN 說 IE 不支援 normal 而且不支援在密碼欄設置這個屬性,所以我猜它是用這
個解釋,再配上 UA 樣式 input[type=password] { ime-mode: disabled
!important; } (類似 FF 的 noscript: display:none; !important),這樣應
該就不需要 normal 這個值。我個人覺得少一個沒用的屬性質也是少一個好...

總之我不知道 normal 這個值到底跟 auto 有什麼不同....

3. 動態調整

假如說我現在的焦距在一個文字欄未上,輸入法未開。這時候假如有一個腳本設置
了 ime-mode: active,這時候輸入法會打開嗎?隨便打點東西之後(但是不把焦
距移到別的地方),輸入法會打開嗎?(這可以用 setTimeout 測)

這個屬性現在只有 IE 跟 FF 實作而已(據說),有興趣的人幫忙測測看這幾個問
題,當作 CSS3 UI 的回饋。


當然,最後比較不細節的高層次問題就是 — 如果可能的話,是不是廢棄這個屬性
必較好,等待類似[3]的 HTML 解比較好?或是有沒有什麼好方法可以讓這個屬性
變得更可以用?

[1] http://www.w3.org/html/ig/zh/wiki/Css3-ui#input-method-editor
[2] https://developer.mozilla.org/zh_tw/CSS/ime-mode
[3] https://www.w3.org/Bugs/Public/show_bug.cgi?id=12885


此致

Kenny

Received on Wednesday, 15 February 2012 04:27:00 UTC