What is the purpose of activating hover styles when tapping on mobile devices?

On my button, you can see the color change when hovering:

button {
  background-color: orange;
}

button:hover {
  background-color: darkorange;
}

Check out this example: https://jsfiddle.net/oepb5ks4/

While this works well on desktop, it's a different story on mobile devices where :hover should not apply. The browser still changes the color, but only after touching the button.

  1. Why does this behavior occur? Am I overlooking something? Why would mobile browsers implement (parts of) :hover at all?
  2. Is there a clean solution for this issue that doesn't involve Media Queries or JavaScript?

*This was tested in Chrome (in "Device Mode") and iOS Safari.

Answer №1

If you're looking to style your website differently for mobile devices, you can utilize CSS media queries and filters as explained in the W3 documentation. For example, you can set a rule that changes the color of links on hover to orange only if the device supports hover functionality:

@media not all and (hover: none) {
    a:hover{
        color: orange
    }
}

Alternatively, you can use JavaScript to detect mobile browsers and adjust the styles accordingly by setting the link color to always be orange on mobile.

The issue you might be facing is due to the difference in behavior between clicking and hovering. On desktop, you typically need to hover over a button before clicking it, causing the color change. However, on mobile, this interaction might occur after clicking instead.

Update: A user named Temani Afif mentioned in a comment that on mobile devices, :hover pseudo-classes are translated into something like :onclick to accommodate the lack of hover functionality. This translation allows mobile users to access features that rely on hover interactions, such as hover menus on websites.

Another approach you can take is to enforce the color of visited links using the following CSS:

a:visited { 
  color: orange!important;
}

Update 2: I have added a new media tag and incorporated advice from this post on how to effectively use @media rules along with the 'not' keyword in CSS styling.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Navigating a mobile-friendly menu anytime!

I'm in the process of creating a responsive "hamburger" menu for mobile devices. The HTML code I have implemented is as follows... .menu_closed { color: red; } .menu_open { color: blue; } <script src="https://ajax.googleapis.com/ajax/libs/jq ...

The ng-controller (dropdown menu) is functioning properly when tested locally and on JSFiddle, however, it is not working on

My HTML website with ng-app is functioning properly when tested locally and on certain coding platforms like JSFiddle and CodePen. However, it seems to encounter issues when deployed on Google Sites, Github, W3, and similar websites. The main functionalit ...

Ensure that Selenium does not proceed until the content within a specific web element has been

Currently, I am utilizing Selenium to automate the process of uploading an excel file to a website. To ensure that the upload is fully completed before moving forward, I have implemented time.sleep(60). However, I am looking to enhance the efficiency of th ...

Having difficulty grasping the concept of using unicode characters with canvas fillText

I am attempting to showcase special characters in a font using the canvas fillText feature. The code I am employing is as follows: canvas = document.getElementById("mycanvas"); context = canvas.getContext("2d"); hexstring = "\u00A9"; //hexstring = " ...

Centering an Image of Unspecified Dimensions Both Vertically and Horizontally with Hover Effect on Anchor

To achieve both horizontal and vertical centering of an image with unknown dimensions, I need to use max-width and max-height to constrain it within a container size of 101x84. Additionally, I want the image to display an icon in the middle when hovered ov ...

Creating a jquery DataTable from HTML generated by angular $sce can be done by following these steps

I have created an Angular controller that takes data and generates an HTML table from it. The generated table is being displayed on the page. Now, I want to apply jQuery data tables using that scope variable. The variable contains the HTML code of the tabl ...

Issue with Bootstrap side navbar not collapsing when clicked on a link

Currently, I'm working on creating a website for a friend. While I used to have some experience with coding in the past, it has been a while and I am a bit rusty. This time around, I decided to use bootstrap for the project. However, I'm struggli ...

The issue with the min attribute for number inputs not functioning properly when using decimal

When inputting the value 3 in the field and clicking on submit in the HTML snippet below, Chrome displays an error message stating: Please enter a valid value. The two nearest valid values are 2.0001 and 3.0001. This is confusing because I have set the mi ...

Empty spaces in an "option" html gadget on a website created with Structr 4.1.2 Community edition

Currently using Structr version 4.1.2 on a managed Sandbox (Community edition) of Structr. I am currently investigating the functionality of Structr and have encountered an issue related to how an "html" select element functions on a page built in Structr ...

My images seem to lose control and go completely wild when I try to turn them into hyperlinks

Seeking advice on why my social icons are behaving strangely. This is a new issue for me and I suspect that some other CSS is causing the problem, but I can't seem to locate it. I want to ensure that the formatting of these images remains consistent ...

Customizing CSS by replacing link file styles with code in the HEAD section

UPDATE: After further examination, it appears that the code is functioning correctly. My apologies for any confusion. I am attempting to override certain CSS rules on specific pages. Below is an example of my approach. Can anyone confirm if this is a vali ...

Managing HTML5 Video in a slider

I've designed a unique video slider that cycles through 4 videos. Each video has a custom play button and additional overlay content. Once the video starts playing, the overlay content and play button fade out to reveal the default video controls. The ...

Set the button to align on the left side within a Bootstrap card

Creating grid elements in Bootstrap 3, I am faced with a challenge. When the viewport is below <768px, I want to align a button in the same position as shown in the image with the lion. Check out the demo site here. For viewports >768px, the button ...

My intention is to ensure that the page is printed with the Background graphics checkbox pre-checked

When using the print button, I typically include the following code: onclick="window.print();" I also came across this code snippet to set a checkbox as checked by default: <style type="text/css" media="print"> * { -webkit-print-color- ...

Is it possible for an object hidden in the DOM using jQuery to magically reappear when you click the back button or use the bfc

Is there a way to prevent a box from reappearing when using the back button on a webpage? On my website, there is a box that shows up on the first visit. However, when navigating using the back buttons on the site or the browser back button, the box appea ...

What is causing the page to not load in my development environment (MAMP PRO) when using header()?

Has anyone experienced the issue where suddenly on MAMP PRO, the page will only load up to the header() function? For example, here is a header call I am using: header('Location: /index_signedIn.php'); exit(); I have tested my other sites and ...

Choosing the div elements that have a PNG background image assigned to them

Is there a way to use jQuery to target all the div elements with a background-image property set to url(somepath/somename.png) in their style? ...

Can we not customize a nested component using the 'styled()' function in MUI?

Looking at the code snippet below, my attempt to style an MUI Stack component within an MUI Dialog component seems to be falling short. The Stack styles are not being applied as expected: const CustomDialog = styled(Dialog)(({ theme }) => ({ ' ...

Enhancing user experience by implementing dynamic text box functionality that triggers ajax load for dropdown options using a combination

Here is the task I need help with, along with the code snippet: I want to enable the author select box when both the start and end dates are filled out. The author names should be fetched dynamically from the database based on the selected start and end ...

After uploading the WordPress theme, the wp_enqueue_style() function fails to work properly

I recently developed a new WordPress theme and encountered an issue while trying to load specific stylesheets for my child sites using the is_page(array('')) function in my function.php file. Surprisingly, only the files that were added to all of ...