Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

mobile safari links retains focus after touch

My navigation is quite simple. I have a hover state which adds a border and a transparent gradient png background to some text, and an additional class which, when added by jQuery, adds color behind that transparent image.

If you click to toggle the class in a web browser you'll see the color come in and out, but the background image stays if you never move the mouse away from the button. This is expected behavior.

My problem is that when using an iPad, the touch seems to retain the hover state and the :hover properties never go away unless you click another button, in which case the persistent :hover properties are added to that button until another is pressed.

I can't imagine that I am the first with this problem, but searches haven't turned anything up.

Help?

enter image description here

Normal - Hover - Active (via addClass() )

like image 979
d2burke Avatar asked May 17 '12 20:05

d2burke


2 Answers

If you're using Modernizr, the no-touch class will be added to the root html element for non-touch devices. Then you can do this:

a.myclass {    color:#999; }  .no-touch a.myclass:hover, a.myclass:active {    color:#ccc; } 
like image 123
Redtopia Avatar answered Oct 04 '22 14:10

Redtopia


Hover is a CSS pseudo class designed to work with a pointer not so much with touch events. You would normally want to avoid the use of hover altogether since it makes no sense on mobile. One of the easiest ways to deal with this is by placing your hover CSS inside a media query. You can do this by targeting tablets or desktop screens, here are the two solutions:

1- Targeting iPads:

@media only screen  and (min-device-width : 768px)  and (max-device-width : 1024px) {     RE.no-touch .my-element:hover {          /* in here you cancel all hover styles you applied for desktop */      } } 

2- Targeting desktops:

@media only screen  and (min-width : 1224px) {     RE.no-touch .my-element:hover {          /* in here you apply hover styles that will only work on desktop */      } } 

Either way is valid. You can change the values of min and max width if you notice that the CSS is being triggered incorrectly in certain devices.

like image 28
charlitosJS Avatar answered Oct 04 '22 14:10

charlitosJS