Using only CSS, show div on hover over

后端 未结 13 1108
时光取名叫无心
时光取名叫无心 2020-11-22 01:58

I would like to show a div when someone hovers over an element, but I would like to do this in CSS and not JavaScript. Do you know how this can be ach

相关标签:
13条回答
  • 2020-11-22 02:08

    I would like to offer this general purpose template solution that expands on the correct solution provided by Yi Jiang's.

    The additional benefits include:

    • support for hovering over any element type, or multiple elements;
    • the popup can be any element type or set of elements, including objects;
    • self-documenting code;
    • ensures the pop-up appears over the other elements;
    • a sound basis to follow if you are generating html code from a database.

    In the html you place the following structure:

    <div class="information_popup_container">
    <div class="information">
    <!-- The thing or things you want to hover over go here such as images, tables, 
         paragraphs, objects other divisions etc. --> 
    </div>
    <div class="popup_information">
    <!-- The thing or things you want to popup go here such as images, tables, 
         paragraphs, objects other divisions etc. --> 
    </div>
    </div>
    

    In the css you place the following structure:

    div.information_popup_container {
    position: absolute;
    width:0px;
    height:0px;
    /* Position Information */
    /* Appearance Information */
    }
    div.information_popup_container > div.information {
    /* Position Information */
    /* Appearance Information */
    }
    div.information_popup_container > div.popup_information {
    position: fixed;
    visibility: hidden;
    /* Position Information */
    /* Appearance Information */
    }
    div.information_popup_container > div.information:hover + div.popup_information {
    visibility: visible;
    z-index: 200;
    }
    

    A few points to note are:

    1. Because the position of the div.popup is set to fixed (would also work with absolute) the content is not inside the normal flow of the document which allows the visible attribute to work well.
    2. z-index is set to ensure that the div.popup appears above the other page elements.
    3. The information_popup_container is set to a small size and thus cannot be hovered over.
    4. This code only supports hovering over the div.information element. To support hovering over both the div.information and div.popup then see Hover Over The Popup below.
    5. It has been tested and works as expected in Opera 12.16 Internet Explorer 10.0.9200, Firefox 18.0 and Google Chrome 28.0.15.

    Hover Over The Popup

    As additional information. When the popup contains information that you might want to cut and paste or contains an object that you might want to interact with then first replace:

    div.information_popup_container > div.information:hover + div.popup_information {
    visibility: visible;
    z-index: 200;
    }
    

    with

    div.information_popup_container > div.information:hover + div.popup_information 
    ,div.information_popup_container > div.popup_information:hover {
    visibility: visible;
    z-index: 200;
    }
    

    And second, adjust the position of div.popup so that there is an overlap with div.information. A few pixels is sufficient to ensure that the div.popup is can receive the hover when moving the cusor off div.information.

    This does not work as expected with Internet Explorer 10.0.9200 and does work as expected with Opera 12.16, Firefox 18.0 and Google Chrome 28.0.15.

    See fiddle http://jsfiddle.net/F68Le/ for a complete example with a popup multilevel menu.

    0 讨论(0)
  • 2020-11-22 02:09

    .showme {
      display: none;
    }
    
    .showhim:hover .showme {
      display: block;
    }
    <div class="showhim">HOVER ME
      <div class="showme">hai</div>
    </div>

    jsfiddle

    Since this answer is popular I think a small explanation is needed. Using this method when you hover on the internal element, it wont disappear. Because the .showme is inside .showhim it will not disappear when you move your mouse between the two lines of text (or whatever it is).

    These are example of quirqs you need to take care of when implementing such behavior.

    It all depends what you need this for. This method is better for a menu style scenario, while Yi Jiang's is better for tooltips.

    0 讨论(0)
  • 2020-11-22 02:09

    I'm by know means an expert, but I'm incredibly proud of myself for having worked something out about this code. If you do:

    div {
        display: none;
    }
    
    a:hover > div {
        display: block;
    } 
    

    (Note the '>') You can contain the whole thing in an a tag, then, as long as your trigger (which can be in it's own div, or straight up in the a tag, or anything you want) is physically touching the revealed div, you can move your mouse from one to the other.

    Maybe this isn't useful for a great deal, but I had to set my revealed div to overflow: auto, so sometimes it had scroll bars, which couldn't be used as soon as you move away from the div.

    In fact, after finally working out how to make the revealed div, (although it is now a child of the trigger, not a sibling), sit behind the trigger, in terms of z-index, (with a little help from this page: How to get a parent element to appear above child) you don't even have to roll over the revealed div to scroll it, just stay hovering over the trigger and use your wheel, or whatever.

    My revealed div covers most of the page, so this technique makes it a lot more permanent, rather than the screen flashing from one state to another with every move of the mouse. It's really intuitive actually, hence why I'm really quite proud of myself.

    The only downside is that you can't put links within the whole thing, but you can use the whole thing as one big link.

    0 讨论(0)
  • 2020-11-22 02:11

    please test this code

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    
    <style type="text/css"> 
    div
    {
    display:none;
    color:black
    width:100px;
    height:100px;
    background:white;
    animation:myfirst 9s;
    -moz-animation:myfirst 9s; /* Firefox */
    -webkit-animation:myfirst 5s; /* Safari and Chrome */  
    
    }
    
    @keyframes myfirst
    {
    0%   {background:blue;}
    25%  {background:yellow;}
    50%  {background:blue;}
    100% {background:green;}
    }
    
     @-moz-keyframes myfirst /* Firefox */
    {
    0%   {background:white;}
    50%  {background:blue;}
    100% {background:green;}
    }
    
    @-webkit-keyframes myfirst /* Safari and Chrome */
    {
      0%   {background:red;}
      25%  {background:yellow;}
      50%  {background:blue;}
      100% {background:green;}
    }
    
    a:hover + div{
    display:inline;
    } 
    </style>
    </head>
    <body>
    <a href="#">Hover over me!</a>
    <div>the color is changing now</div>
    <div></div>
    </body>
    </html>
    
    0 讨论(0)
  • 2020-11-22 02:12

    I found using opacity is better, it allows you to add css3 transitions to make a nice finished hover effect. The transitions will just be dropped by older IE browsers, so it degrades gracefully to.

    #stuff {
        opacity: 0.0;
        -webkit-transition: all 500ms ease-in-out;
        -moz-transition: all 500ms ease-in-out;
        -ms-transition: all 500ms ease-in-out;
        -o-transition: all 500ms ease-in-out;
        transition: all 500ms ease-in-out;
    }
    #hover {
        width:80px;
        height:20px;
        background-color:green;
        margin-bottom:15px;
    }
    #hover:hover + #stuff {
        opacity: 1.0;
    }
    <div id="hover">Hover</div>
    <div id="stuff">stuff</div>

    0 讨论(0)
  • 2020-11-22 02:18

    Based on the main answer, this is an example, useful to display an information tooltip when clicking on a ? near a link:

    document.onclick = function() { document.getElementById("tooltip").style.display = 'none'; };
    
    document.getElementById("tooltip").onclick = function(e) { e.stopPropagation(); }
    
    document.getElementById("help").onclick = function(e) { document.getElementById("tooltip").style.display = 'block';
    e.stopPropagation(); };
    #help { opacity: 0; margin-left: 0.1em; padding: 0.4em; }
        
    a:hover + #help, #help:hover { opacity: 0.5; cursor: pointer; }
    
    #tooltip { border: 1px solid black; display: none; padding: 0.75em; width: 50%; text-align: center; font-family: sans-serif; font-size:0.8em; }
    <a href="">Delete all obsolete informations</a><span id="help">?</span>
    <div id="tooltip">All data older than 2 weeks will be deleted.</div>

    0 讨论(0)
提交回复
热议问题