2015-12-16 205 views
0

這是一個模擬了一個菜單,我有爲什麼不溢出-Y:可見長得一樣溢出:可見

HTML

Menu 1 (overflow:hidden) 
<div class='menu'> 
    <ul> 
    <li> 
     Item 1 
     <ul> 
     <li>submenu 1</li> 
     <li>submenu 2</li> 
     <li>submenu 3</li> 
     <li>submenu 4</li> 
     <li>submenu 5</li> 
     </ul> 
    </li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
    <li>Item 5</li> 
    </ul> 
</div> 
<br/><br/> 
Menu 2 (overflow:hidden; overflow-y visible) 
<div class='menu menu2'> 
    <ul> 
    <li> 
     Item 1 
     <ul> 
     <li>submenu 1</li> 
     <li>submenu 2</li> 
     <li>submenu 3</li> 
     <li>submenu 4</li> 
     <li>submenu 5</li> 
     </ul> 
    </li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
    <li>Item 5</li> 
    </ul> 
</div> 
<br/><br/> 
Menu 3 (overflow-x:hidden;) 
<div class='menu3'> 
    <ul> 
    <li> 
     Item 1 
     <ul> 
     <li>submenu 1</li> 
     <li>submenu 2</li> 
     <li>submenu 3</li> 
     <li>submenu 4</li> 
     <li>submenu 5</li> 
     </ul> 
    </li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
    <li>Item 5</li> 
    </ul> 
</div> 
<br/><br/> 
Menu 4 (overflow:visible;) 
<div class='menu menu4'> 
    <ul> 
    <li> 
     Item 1 
     <ul> 
     <li>submenu 1</li> 
     <li>submenu 2</li> 
     <li>submenu 3</li> 
     <li>submenu 4</li> 
     <li>submenu 5</li> 
     </ul> 
    </li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
    <li>Item 5</li> 
    </ul> 
</div> 

CSS

.menu   {border:1px solid #000000; overflow:hidden;} 
.menu ul   {list-style:none; margin:5px 5px; padding:0; position:relative} 
.menu li   {display:inline-block} 
.menu li::after {content: " | ";} 
.menu ul ul  {position:absolute} 
.menu ul ul li {display:block;} 
.menu2   {overflow-y:visible} 
.menu4   {overflow:visible} 

.menu3   {border:1px solid #FF0000;overflow-x:hidden} 
.menu3 ul   {list-style:none; margin:5px 5px; padding:0; position:relative} 
.menu3 li   {display:inline-block} 
.menu3 li::after {content: " | ";} 
.menu3 ul ul  {position:absolute} 
.menu3 ul ul li {display:block;} 

Fiddle

現在的想法是,菜單項1有一個子菜單,它被觸發,通過javascript顯示,子菜單應該超出框。因爲這個菜單應該是有響應的,我假設overflow在模板中被設置了一個原因,我想盡可能避免更改模板。

現在,你可以在Menu 1子菜單隱藏在框代碼中看到,當我去覆蓋overflow-y財產Menu 2是它的default value(這是一樣的overflow's)它仍然是隱藏的,有一個滾動框。

現在只是在情況下,如果有東西在overflow怪異仍設置爲Y軸,我去和複製menu類但是在做overflow:hidden我只是做overflow-x:hidden;但仍然有是一個滾動條。 Menu 4顯示如果overflow設置爲可見(默認值),我沒有滾動條,並且我的子菜單根據需要跳出框。

我的問題是爲什麼overflow-y:visible看起來不像overflow:visible?以我的理解,overflow:visible只是overflow-x:visible; overflow-y:visible很像border:1px solid #000000是如何同一個

回答

1

overflow-xoverflow-y是CSS3的一部分(而普通overflow是CSS2),並且仍然有點實驗性。當一個值是「滾動值」(其中包括hidden)和另一個值是visible時,會發生什麼規則很複雜,並且很令人困惑。

CSS3 Overflow Spec

  • ...如果一個級聯值[原文如此]是所述滾動值中的一個,而另一個是「可見的」,然後計算出的值是「可見」更改爲「隱藏」的級聯值。
  • 似乎來證明你所看到的行爲,但我不明白爲什麼有人這樣設計的。

    0
    overflow: visible; 
    

    設置所有邊界兩側的寬度,樣式和顏色一個不剪輯內容,並可以顯示出內容框的側面,但對於

    overflow-y; visible; 
    

    內容剪輯反對內容框溢出自動默認

    0

    我做了修訂fiddle,但我發現的主要問題是,.menu樣式應用到所有的四個菜單和其定義的一部分是overflow: hiddden,所以你基本上得到一個衝突菜單2.刪除overflow: hidden.menu在您的CSS的第一行中使菜單2和菜單4具有與您所期望的相同的行爲。