Search code examples
htmlcssgoogle-chromefirefoxopera

Css :focus working on firefox only. Other browser not supporting


I am creating a Chat popup using html and css only. I have a button that can show and hide the chat icons. Here is code

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>floating button demo</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<style type="text/css">

*{padding:0;margin:0;}

body{
    font-family:Verdana, Geneva, sans-serif;
    background-color:#CCC;
    font-size:12px;
}

.label-container{
    position:fixed;
    bottom:48px;
    right:105px;
    display:table;
    visibility: hidden;
}

.label-text{
    color:#FFF;
    background:rgba(51,51,51,0.5);
    display:table-cell;
    vertical-align:middle;
    padding:10px;
    border-radius:3px;
}

.label-arrow{
    display:table-cell;
    vertical-align:middle;
    color:#333;
    opacity:0.5;
}

.float{
    position:fixed;
    width:60px;
    height:60px;
    bottom:40px;
    right:40px;
    background-color:#F33;
    color:#FFF;
    border-radius:50px;
    text-align:center;
    box-shadow: 2px 2px 3px #999;
    z-index:1000;
}

ul{
    position:fixed;
    right:40px;
    padding-bottom:20px;
    bottom:80px;
    z-index:100;
}

ul li{
    list-style:none;
    margin-bottom:10px;
}

ul li a{
    background-color:#F33;
    color:#FFF;
    border-radius:50px;
    text-align:center;
    box-shadow: 2px 2px 3px #999;
    width:60px;
    height:60px;
    display:block;
}

ul:hover{
    visibility:visible!important;
    opacity:1!important;
}


.my-float{
    font-size:24px;
    margin-top:18px;
}

a#menu-share i{
    animation: rotate-in 0.5s;
}

a#menu-share:hover > i{
    animation: rotate-out 0.5s;
}

@keyframes bot-to-top {
    0%   {bottom:-40px}
    50%  {bottom:40px}
}

@keyframes scale-in {
    from {transform: scale(0);opacity: 0;}
    to {transform: scale(1);opacity: 1;}
}

@keyframes rotate-in {
    from {transform: rotate(0deg);}
    to {transform: rotate(360deg);}
}

@keyframes rotate-out {
    from {transform: rotate(360deg);}
    to {transform: rotate(0deg);}
}


a#menu-share + ul {
  visibility: hidden;
}

a#menu-share:focus + ul{
  visibility: visible;
  animation: scale-in 0.5s;
}

a#menu-share:focus {
    display: none;
}

</style>
</head>
<body>

<a href="javascript:void(0);" class="float" id="menu-close">
<i class="fa fa-times my-float"></i>
</a>

<a href="javascript:void(0);" class="float" id="menu-share">
<i class="fa fa-share my-float"></i>
</a>


<ul>
<li><a href="#" id="menu-facebook">
<i class="fa fa-facebook my-float"></i>
</a></li>
<li><a href="#" id="menu-google-plus">
<i class="fa fa-google-plus my-float"></i>
</a></li>
<li><a href="#" id="menu-twitter">
<i class="fa fa-twitter my-float"></i>
</a></li>
</ul>
</body>
</html>

The code is working fine only on firefox. I used :focus css and it only works fine on firefox. Other browser not opening the popup using :focus.

I also make jsfiddle and it works fine there. https://jsfiddle.net/wtrx3gc9/

Can someone please share the tip or help me to show popup using :focus on all browsers.


Solution

  • In Chrome, the element loses its focus when you give it display: none.
    Solution: hide it in another way, e.g. by giving it z-index: 100; (or anything that is less than the z-index of the close button).

    @import url('https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css');
    
    *{padding:0;margin:0;}
    
    body{
        font-family:Verdana, Geneva, sans-serif;
        background-color:#CCC;
        font-size:12px;
    }
    
    .label-container{
        position:fixed;
        bottom:48px;
        right:105px;
        display:table;
        visibility: hidden;
    }
    
    .label-text{
        color:#FFF;
        background:rgba(51,51,51,0.5);
        display:table-cell;
        vertical-align:middle;
        padding:10px;
        border-radius:3px;
    }
    
    .label-arrow{
        display:table-cell;
        vertical-align:middle;
        color:#333;
        opacity:0.5;
    }
    
    .float{
        position:fixed;
        width:60px;
        height:60px;
        bottom:40px;
        right:40px;
        background-color:#F33;
        color:#FFF;
        border-radius:50px;
        text-align:center;
        box-shadow: 2px 2px 3px #999;
        z-index:1000;
    }
    
    ul{
        position:fixed;
        right:40px;
        padding-bottom:20px;
        bottom:80px;
        z-index:100;
    }
    
    ul li{
        list-style:none;
        margin-bottom:10px;
    }
    
    ul li a{
        background-color:#F33;
        color:#FFF;
        border-radius:50px;
        text-align:center;
        box-shadow: 2px 2px 3px #999;
        width:60px;
        height:60px;
        display:block;
    }
    
    ul:hover{
        visibility:visible!important;
        opacity:1!important;
    }
    
    
    .my-float{
        font-size:24px;
        margin-top:18px;
    }
    
    a#menu-share i{
        animation: rotate-in 0.5s;
    }
    
    a#menu-share:hover > i{
        animation: rotate-out 0.5s;
    }
    
    @keyframes bot-to-top {
        0%   {bottom:-40px}
        50%  {bottom:40px}
    }
    
    @keyframes scale-in {
        from {transform: scale(0);opacity: 0;}
        to {transform: scale(1);opacity: 1;}
    }
    
    @keyframes rotate-in {
        from {transform: rotate(0deg);}
        to {transform: rotate(360deg);}
    }
    
    @keyframes rotate-out {
        from {transform: rotate(360deg);}
        to {transform: rotate(0deg);}
    }
    
    
    a#menu-share + ul {
      visibility: hidden;
    }
    
    a#menu-share:focus + ul{
      visibility: visible;
      animation: scale-in 0.5s;
    }
    
    a#menu-share:focus {
       /* display: none;*/
       z-index: 100;
    }
    <a href="javascript:void(0);" class="float" id="menu-close">
    <i class="fa fa-times my-float"></i>
    </a>
    
    <a href="javascript:void(0);" class="float" id="menu-share">
    <i class="fa fa-share my-float"></i>
    </a>
    
    
    <ul>
    <li><a href="#" id="menu-facebook">
    <i class="fa fa-facebook my-float"></i>
    </a></li>
    <li><a href="#" id="menu-google-plus">
    <i class="fa fa-google-plus my-float"></i>
    </a></li>
    <li><a href="#" id="menu-twitter">
    <i class="fa fa-twitter my-float"></i>
    </a></li>
    </ul>