国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

實現"輸入框"獲得焦點時外邊框變藍

e10101 / 1266人閱讀

摘要:背景之前做了一個網頁,網頁中的所有輸入框都被設計為獲得鼠標焦點時外邊框不變藍。而且輸入框的邊框設置在了父元素上,所有當輸入框獲得焦點時,看到的應該是父元素上的邊框變藍,而不是里面的的邊框變藍。

背景

之前做了一個網頁,網頁中的所有輸入框都被設計為“獲得鼠標焦點時外邊框不變藍”。突然某一天,產品覺得這樣用戶體驗不好,不能很明顯地告訴用戶當前鼠標停在哪里,于是要求改為“當輸入框獲得鼠標焦點時,外邊框自動變藍;失去焦點時外邊框恢復原樣”。

瀏覽器自動會給輸入框inputtextareaoutline 屬性設置一個默認值,效果就是當輸入框獲得鼠標焦點時外邊框會自動帶上顏色,失去焦點時外邊框顏色消失。由于不同瀏覽器outline 屬性的默認值不同,導致外邊框的顏色也不同。如果不想要瀏覽器的outline默認設置,只需要將 outline 屬性設置為none 即可。

所以一開始聽到這個需求,感覺特別簡單,不就是純 CSS 的問題嘛!我只要將所有輸入框的 outline 屬性設置為瀏覽器默認的值就好了,但我想的太天真了。。。。

1、如何復制瀏覽器默認的 outline 樣式

由于網頁中已有的輸入框的樣式遍布在各個文件中,有一種非常機械的辦法,那就是到每個文件中去刪除掉輸入框的 outline:none樣式,這樣輸入框就會使用瀏覽器默認的 outline 樣式了。但是這樣做要改的地方太多了,會瘋掉的!再想想有沒有更省事的方法,有了!在最基本的base.css樣式文件中給輸入框添加一個focus時候的outline樣式不就解決了么。那么問題來了,該將outline 設置何值,才能自動使用瀏覽器默認的outline樣式呢?

我第一個想到的方法是將 outline設置為auto,但發現只有webkit 內核的瀏覽器才支持這個屬性值,firefox 不支持,因為auto 并不是標準的outline 值。所以要想直接復制瀏覽器默認的outline樣式是做不到的。難道我要針對每個瀏覽器設置不同的outline 值,為了這么一點破需求費那么大工夫?!算了,省事點的方式還是直接摒棄瀏覽器的默認outline樣式,統一將outline設置為一種樣式好了。

2、避開 outline,選擇 border

但我發現了新問題,通過設置outline樣式為輸入框添加外邊框,效果并不好。因為 outline 沒有類似 border-radius的屬性來改變邊角的弧度。這樣就導致了一個問題:當輸入框設置了border顏色,同時border-radius3px以上時,能明顯的看到outline 外邊框并沒有和border 重合。看來設置 outline 來達到邊框變藍效果并不是最好的選擇,為什么不選用設置 border 來達到同樣的效果呢?只要將border再設置下 border-shadow,那么看起來也是和outline效果一樣的,而且border還能設置border-radius,顯示效果更滿足需求。

3、如何讓任何一個元素都能 focusable

通過設置 border 解決了大多數輸入框,但發現又有了新問題。

網頁中有些輸入框其實并不是單一使用 input/textarea來實現的,這類“輸入框”看起來和一般輸入框并無兩樣,但其實 HTML 結構是一個 div 里面包含著一個 input/textarea 來實現的。而且輸入框的邊框設置在了父元素 div 上,所有當輸入框獲得焦點時,看到的應該是父元素 div 上的邊框變藍,而不是里面的input/textarea 的邊框變藍。

要想獲得焦點時父元素 div的邊框變藍,肯定可行的方法是通過 JS 來實現:給input/textarea 綁定一個 focus 和 一個blur事件,在focus 事件處理函數中將父元素div的邊框置藍,在blur事件處理函數中將父元素div的邊框恢復原樣。這種方法時絕對可行的,但是我總覺得應該有更簡單的,純粹使用 css 實現的方法。

如果想單純通過css 實現,首先想到的是用選擇器div:focus。但是發現div上無法使用:focus偽類。于是我就猜想:可能并不是所有的元素都是 focusable的,那么得找一份說明哪些元素 focusable的規范。

哪些元素是 focusable的?

搜索結果:

根據 DOM Level 2 HTML規范,focusable 的DOM元素都會有一個原生的focus()方法,只有 focusable 的DOM 元素才有 focus 事件,才能使用:focus偽類。擁有原生的focus()方法的DOM元素包括幾種:HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement and HTMLAnchorElement。很明顯,規范中遺漏了HTMLButtonElement and HTMLAreaElement。

雖然規范這么定義,但瀏覽器在實現時卻是另外一套。瀏覽器給任何一個 HTMLElement 都定義focus()方法,但并不是任何一個HTMLElement 都能獲得焦點(獲得焦點術語叫 active, 具體請參考:http://help.dottoro.com/ljqmdirr.php)。一般來說,任何一個時刻HTML 文檔中只會有一個active元素,但并不是任何一個元素都能成為active元素。能成為active 的元素包括:

表單元素(form controllers):input/option/textarea/button

鏈接元素(links):a標簽、area標簽(必須要帶 href 屬性,包括 href 屬性為空)

可以被編輯的元素(包括通過添加 contenteditable = "true"屬性變成可編輯的情況)

設置了 tabindex 屬性(tabindex 值非-1)的元素

window:當頁面窗口從隱藏變成前置可見時,focus 事件就會觸發

根據搜索結果,要想將父元素div變成focusable,只需要在元素上設置 tabindex 屬性,然后通過:focus偽類設置父元素div 獲得焦點時的border樣式。但我發現當鼠標點擊里面的 input 元素時,父元素div并沒有獲得焦點,獲得焦點的是子元素input

所以最后還是沒能通過純 css 的方法來解決這個問題,無奈之下我還是通過js去解決了。。。。。。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/111188.html

相關文章

  • 實現"輸入"獲得焦點時外變藍

    摘要:背景之前做了一個網頁,網頁中的所有輸入框都被設計為獲得鼠標焦點時外邊框不變藍。而且輸入框的邊框設置在了父元素上,所有當輸入框獲得焦點時,看到的應該是父元素上的邊框變藍,而不是里面的的邊框變藍。 背景 之前做了一個網頁,網頁中的所有輸入框都被設計為獲得鼠標焦點時外邊框不變藍。突然某一天,產品覺得這樣用戶體驗不好,不能很明顯地告訴用戶當前鼠標停在哪里,于是要求改為當輸入框獲得鼠標焦點時,外...

    Coding01 評論0 收藏0
  • 前端頁面總結

    摘要:定位使元素的位置與文檔流無關,因此不占據空間。它的行為就像而當頁面滾動超出目標區域時,它的表現就像,它會固定在目標位置。此元素會被顯示為內聯元素,元素前后沒有換行符。以下內容部分轉載自菜鳥教程CSS層疊樣式表(CascadingStyleSheets)內聯:內嵌:外部樣式文件:[object Object]rel 屬性,規定當前文檔與被鏈接文檔/資源之間的關系。優先級:內聯>內嵌>...

    番茄西紅柿 評論0 收藏0
  • selenium動態數據獲取的方法實現

      這篇文章主要是闡述了selenium可視化數據抓取有效的方法實現,文中根據舉例編碼講到的十分詳盡,對大家學習培訓還是工作具有很強的參照學習培訓使用價值,需求的小伙伴們下邊伴隨著小編就來互相學習了解一下吧。  Selenium是一個自動化技術檢測工具,運用它能夠推動電腦瀏覽器實行特殊動作,如鼠標點擊、下拉框等操作,同時也可以獲取電腦瀏覽器現階段獲得界面的程序代碼,保證由此可見即可獲得。對于有些J...

    89542767 評論0 收藏0
  • pythonGUI多列輸入文本Text的完成

      此篇文章主要是詳細介紹了pythonGUI多列輸入文本Text的控制方式,具有非常好的實用價值,希望能幫助到大家。如有誤或者未考慮到真正的地區,望鼎力相助  Text的屬性wrap  fromtkinterimport*   root=Tk()   root.geometry('200x300')   te=Text(root,height=20,width=15)   #將多...

    89542767 評論0 收藏0
  • pythonGUI多做輸入文本Text的完成

      文章主要是詳細介紹了pythonGUI多做輸入文本Text的控制方式,具有非常好的實用價值,希望能幫助到大家。如有誤或者未考慮到真正的地區,望鼎力相助  Text的屬性wrap  fromtkinterimport*   root=Tk()   root.geometry('200x300')   te=Text(root,height=20,width=15)   #將多做輸...

    89542767 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<