2010-08-17 38 views
7

Trong trang web của tôi, tôi chỉ sử dụng menu động CSS. Điều này là tốt trong các trình duyệt máy tính để bàn, nhưng không phải trên iOS (iphone, ipad, vv) vì giao diện cảm ứng không hỗ trợ bộ chọn :hover.Điều hướng động CSS bằng Hover - Làm cách nào để nó hoạt động trong iOS Safari?

Câu hỏi của tôi là: cách tốt nhất để hỗ trợ tính năng này trên iOS là gì? (Lý tưởng nhất là bằng cách vá với một số CSS hoặc Javascript mà sẽ làm cho công việc mã hiện tại, chứ không phải là làm toàn bộ điều trên chỉ để hỗ trợ iOS)

html của tôi trông như thế này

<ul id="nav"> 
    <li> 
    Item 1 
    <ul> 
     <li><a href=''>sub nav 1.1</a></li> 
     <li><a href=''>sub nav 1.2</a></li> 
    </ul> 
    </li> 
    <li> 
    Item 2 
    <ul> 
     <li><a href=''>sub nav 2.1</a></li> 
     <li><a href=''>sub nav 2.2</a></li> 
    </ul> 
    </li> 
    <li> 
    Item 3 
    <ul> 
     <li><a href=''>sub nav 3.1</a></li> 
     <li><a href=''>sub nav 3.2</a></li> 
    </ul> 
    </li> 
</ul> ​​​​​ 

Và CSS được này

#nav li { 
    float:left; 
    padding:0 15px; 
} 

#nav li ul { 
    position: absolute; 
    width: 10em; 
    left: -999em; 
    margin-left: -10px; 
} 

#nav li:hover ul { 
    left: auto; 
} 

tôi đã làm một jsfiddle điều này ở đây: http://jsfiddle.net/NuTz4/

Trả lời

9

Kiểm tra bài viết này, có lẽ đó là một giải pháp cho bạn;)

http://www.usabilitypost.com/2010/05/12/css-hover-controls-on-iphone/

Ngoài ra giải pháp JS, lấy từ: http://www.evotech.net/blog/2008/12/hover-pseudoclass-for-the-iphone/

var nav = document.getElementById('nav'); 
var els= nav.getElementsByTagName('li'); 
for(var i = 0; i < els.length; i++){ 
    els[i].addEventListener('touchstart', function(){this.className = "hover";}, false); 
    els[i].addEventListener('touchend', function(){this.className = "";}, false); 
} 

Trong jQuery:

$('#nav li').bind('touchstart', function(){ 
    $(this).addClass('hover'); 
}).bind('touchend', function(){ 
    $(this).removeClass('hover'); 
}); 

css:

li:hover, li.hover { /* whatever your hover effect is */ } 
+0

Cảm ơn. Tôi đã sử dụng giải pháp jQuery của bạn và nó hoạt động rất tốt. – DanSingerman

+0

Tôi đã sử dụng giải pháp jQuery của bạn nhưng tôi đã ràng buộc toggleClass() để bắt đầu để mỗi lần người dùng chạm vào phần tử có thể di chuột qua nó hiển thị. Chạm lại để ẩn. '$ (" # nav li "). Bind (" touchstart ", function() { $ (this) .toggleClass (" hover "); });' – Colin

+0

@Colin Tôi tin rằng sử dụng "click" thay vì "touch ..." đạt được kết quả tương tự. Giải pháp của tôi là dành cho những người liên lạc, nhưng giải pháp của bạn là những gì hầu hết mọi người thực sự muốn khi bạn cần tương tác với mục được di chuột. – BGerrissen

Các vấn đề liên quan