2012-11-05 247 views
0

之間切換我有一個無序內嵌水平列表菜單,當我在我的移動媒體查詢踢想要的CSS改變,使得它有所謂的「菜單」父項被點擊時顯示菜單子鏈接在垂直列表中。水平菜單和下拉菜單

達到此目的的最佳方法是什麼?

我應該建立兩種類型的菜單並使用CSS來切換自己的知名度還是有辦法可以讓第一個菜單成爲新的第二個菜單?

任何幫助將非常感激。我確信在每個隱藏的css屬性之間切換都會起作用,但我不確定這會是怎樣的語義友好等等。

乾杯

回答

0

Righto,它採取了一些工作,但我已經創建的你在做什麼工作的例子後here

HTML

<a href="#" id="nav-status">Open/Close</a> 
<ul id="navigation"> 
    <li><a href="#">Item 1</a></li> 
    <li><a href="#">Item 2</a></li> 
    <li><a href="#">Item 3</a></li> 
    <li><a href="#">Item 4</a></li> 
    <li> 
     <a href="#">Item 5</a> 
     <ul> 
      <li><a href="#">Sub Item 1</a></li> 
      <li><a href="#">Sub Item 2</a></li> 
      <li><a href="#">Sub Item 3</a></li> 
     </ul> 
    </li> 
    <li><a href="#">Item 6</a></li> 
    <li><a href="#">Item 7</a></li> 
</ul> 

CSS

/* FOR ANYTHING GREATER THAN MOBILE RESOLUTION */ 
@media screen and (min-width: 480px) { 
    #nav-status { 
     display: none;  
    } 

    ul { 
     width: 100%;  
     min-height: 25px; 
     color:#fff; 
     background:#CCC; 
     overflow: visible; 
    } 

    ul li { 
     color:#000; 
     border-right: 1px solid #333; 
     width: 96px; 
     height: 21px; 
     padding:2px; 
     display: block; 
     float: left; 
     position: relative;  
    } 

    ul li:last-child { 
     border-right: none; 
    } 

    ul li ul { 
     display: none; 
     width: 100px; 
     color:#fff; 
     background:#666; 
     position: absolute; 
     top: 25px; 
     left: 0px; 
     overflow: hidden; 
    } 

    ul li:hover ul { 
     display: block;  
    } 
} 

/* FOR MOBILE RESOLUTIONS */ 
@media screen and (max-width: 480px) { 
    #nav-status { 
     display: block; 
     width: 100%; 
     height: 21px; 
     padding: 2px; 
     background: #000; 
     color: #FFF; 
    } 

    ul { 
     display: none; 
     width: 100%;  
     color:#fff; 
     background:#CCC; 
     overflow: visible; 
    } 

    ul li { 
     color:#000; 
     border-bottom: 1px solid #333; 
     width: 100%; 
     min-height: 21px; 
     padding:2px; 
     display: block;   
     position: relative;  
    } 

    ul li:last-child { 
     border-bottom: none; 
    } 

    ul li ul { 
     display: block; 
     width: 100%; 
     color:#fff; 
     background:#666;   
     overflow: hidden; 
     position: relative; 
    }   
} 
​ 

JAVASCRIPT

$(function() { 
    $('#nav-status').click(function(e) { 
     e.preventDefault(); 
     $('#navigation').toggle(); 
    });​ 
}); 

總之,任何時間的分辨率降至下480像素寬,移動造型將一命嗚呼這將基本上疊加的菜單項垂直,並允許您摺疊/展開與導航打開/關閉鏈接。大於480px的任何東西都將使用默認樣式,這將使菜單項水平排列。

希望這一切都有道理:-)

+0

真是太棒了,正是我所追求的,謝謝。我不想成爲一個痛苦,但現在我們擁有了這一點(無論如何,這很棒),我們可以嘗試做一個補充嗎?如果屏幕上的主菜單顯示在iPad上的畫像太長(我認爲橫向寬度會好起來),我們可以將一些內容(如項目2,3和4)變成「新」下拉項目下的子鏈接?我猜想你所做的與移動按鈕相似?因此,移動設備就像您一樣,屏幕上方說800px顯示爲全長,但iPad肖像(800px以下)顯示在菜單中的新下拉菜單下的75%和25%。 –

+0

在您最初發送Alimac83的示例中,如果您調整瀏覽器窗口的大小以使其切換到移動視圖,請使用打開/關閉按鈕,然後調整瀏覽器窗口菜單消失的大小?你知道爲什麼會發生這種情況,如果有解決方法嗎?謝謝 –

0

如果菜單在兩種情況下,同樣的項目,我看不到任何理由,使這兩個副本。我只會製作兩個不同的CSS文件,一個用於「常規」瀏覽器,一個用於移動媒體。 在「常規」之一,有「菜單」父項目被隱藏,菜單是水平的。在移動媒體之一,菜單父項是可見的,菜單是一個隱藏的垂直列表顯示出來(通過CSS或JavaScript)單擊菜單父項時。

+0

非常感謝您的回覆。這聽起來像我之後的事情。我會嘗試使用相同的列表創建兩個,聽起來很合理。謝謝 –

0

你可以把HTML標記相同,但設置你的媒體查詢攔截您選擇的分辨率和風格的元素不同。

例如:http://jsfiddle.net/rYVz4/

HTML

<ul> 
<li>Item 1</li> 
<li>Item 2</li> 
<li>Item 3</li> 
<li>Item 4</li> 
<li>Item 5</li> 
</ul>​ 

CSS

@media screen and (min-width: 600px) { 
    ul { display: block; width: 100%; overflow: hidden; } 
    ul li { display: inline-block; padding: 2px 5px 2px 5px; width: 100px; float: left; } 
} 

@media screen and (max-width: 600px) { 
    ul { display: block; width: 110px; overflow: hidden; } 
    ul li { display: inline-block; padding: 2px 5px 2px 5px; width: 100px; } 
} 

正如你可以看到,每當分辨率大於600px的寬,元素將被造型到左浮動並佔據屏幕寬度的100%。

在任何較小的分辨率,該元件將垂直堆疊。

您可以閱讀更多有關媒體查詢here

如果您需要更高級的行爲,你可以使用JavaScript配合這一點。這是做它的一種方式:

function checkResolution() { 
    // Resolution width > 600px 
    if ($(window).innerWidth() > 600) { 
    // implement styling for these devices           
    } 
} 

$(function() { 
    $(window).resize(function() { 
    checkResolution(); 
    }); 

    checkResolution(); 
}); 

此代碼將扎入,如果您的瀏覽器大小which'll運行相關代碼的window.resize事件。

+0

感謝您的詳細回覆alimac83,我會檢查並試一試。感謝JavaScript的建議,這可能會有用。 –

+0

不客氣 - 我希望它有幫助:-) – alimac83

+0

如果我設置父級'菜單'ul顯示:無(隱藏)爲內聯水平菜單,然後它刪除所有的鏈接是它的孩子,因此隱藏整個菜單。有沒有辦法只隱藏父鏈接,但不是它的孩子,除非它是相反應該發生的移動版本(父母顯示和孩子隱藏)。 –