Preciso de uma notificação no estilo do Facebook, mas conseguir algo que pareça bom em qualquer navegador parece complicado. Por exemplo, navegadores diferentes parecem tratar os preenchimentos de maneira diferente, resultando em notificações de aparência estranha.
Qual é a melhor maneira entre navegadores de garantir que as notificações sejam exibidas corretamente? Não é adverso ao uso de javascript, mas css puro é obviamente preferível
javascript
html
css
user-interface
user-experience
ming yow
fonte
fonte
Respostas:
A melhor maneira de conseguir isso é usando posicionamento absoluto :
/* Create the blue navigation bar */ .navbar { background-color: #3b5998; font-size: 22px; padding: 5px 10px; } /* Define what each icon button should look like */ .button { color: white; display: inline-block; /* Inline elements with width and height. TL;DR they make the icon buttons stack from left-to-right instead of top-to-bottom */ position: relative; /* All 'absolute'ly positioned elements are relative to this one */ padding: 2px 5px; /* Add some padding so it looks nice */ } /* Make the badge float in the top right corner of the button */ .button__badge { background-color: #fa3e3e; border-radius: 2px; color: white; padding: 1px 3px; font-size: 10px; position: absolute; /* Position the badge within the relatively positioned button */ top: 0; right: 0; }
<!-- Font Awesome is a great free icon font. --> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet"/> <div class="navbar"> <div class="button"> <i class="fa fa-globe"></i> <span class="button__badge">2</span> </div> <div class="button"> <i class="fa fa-comments"></i> <span class="button__badge">4</span> </div> </div>
fonte
Aqui está um que inclui animação para quando a contagem mudar.
http://jsfiddle.net/rahilsondhi/FdmHf/4/
<ul> <li class="notification-container"> <i class="icon-globe"></i> <span class="notification-counter">1</span> </li>
.notification-container { position: relative; width: 16px; height: 16px; top: 15px; left: 15px; i { color: #fff; } } .notification-counter { position: absolute; top: -2px; left: 12px; background-color: rgba(212, 19, 13, 1); color: #fff; border-radius: 3px; padding: 1px 3px; font: 8px Verdana; } $counter .css({opacity: 0}) .text(val) .css({top: '-10px'}) .transition({top: '-2px', opacity: 1})
Animação com jQuery:
$('button').click(function() { var $counter = $('.notification-counter') var val = parseInt $counter.text(); val++; $counter.css({opacity: 0}).text(val).css({top:'-10px'}).animate({top: '-1px', opacity: 1}, 500); });
Ele usa Font Awesome para o ícone do globo e jQuery Transit para a animação.
fonte
code
$ counter.css ({opacity: 0}) .text (val) .css ({top: '-10px'}). animar ({topo: '-1px', opacidade: 1}, 500);code
Provavelmente
absolute
posicionando:<div id="globe" style="height: 30px; width: 30px; position: relative;"> <img src="/globe.gif" /> <div id="notification" style="position: absolute; top: 0; right;0;">1</div> </div>
Algo parecido. Obviamente, você deseja alterar os detalhes e provavelmente usar imagens de fundo. O objetivo é enfatizar o posicionamento absoluto que é realmente consistente em todos os navegadores, pelo menos em minhas experiências.
fonte
Markup:
<div id="ContainerDiv"> <div id="MainImageDiv"> //Add the image here or whatever you want </div> <div id="NotificationDiv"> </div> </div>
Css:
#NotificationDiv { position: absolute; left: -10 //use negative values to push it above the #MainImageDiv top: -4 ... }
fonte
Tenho certeza de que as respostas sobre posicionamento absoluto estão corretas. Para fins de experiência, tentei fazer uma solução apenas para SVG. O resultado está longe do ideal, talvez alguém conheça uma solução mais elegante para um quebra-cabeça svg semelhante? :)
http://jsfiddle.net/gLdsco5p/3/
<svg width="64" height="64" viewBox="0 0 91 91"> <rect id="Artboard1" x="0" y="0" width="90.326" height="90.326" style="fill:none;"/> <g id="Artboard11" serif:id="Artboard1"> <g id="user-circle-o" transform="matrix(2.69327,0,0,2.69327,7.45723,7.45723)"> <path d="M14,0C21.734,0 28,6.266 28,14C28,21.688 21.766,28 14,28C6.25,28 0,21.703 0,14C0,6.266 6.266,0 14,0ZM23.672,21.109C25.125,19.109 26,16.656 26,14C26,7.391 20.609,2 14,2C7.391,2 2,7.391 2,14C2,16.656 2.875,19.109 4.328,21.109C4.89,18.312 6.25,16 9.109,16C10.375,17.234 12.093,18 14,18C15.907,18 17.625,17.234 18.891,16C21.75,16 23.11,18.312 23.672,21.109ZM20,11C20,7.687 17.312,5 14,5C10.688,5 8,7.688 8,11C8,14.312 10.688,17 14,17C17.312,17 20,14.312 20,11Z" style="fill:rgb(190,190,190);fill-rule:nonzero;"/> </g> <g transform="matrix(1,0,0,1,1.36156,0)"> <circle cx="63.708" cy="18.994" r="9.549" style="fill:rgb(255,0,0);"/> </g> <g transform="matrix(1.66713,0,0,1.66713,-51.5278,-2.33264)"> <text id="counter" x="68.034px" y="15.637px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:7.915px;fill:white;">1</text> </g> </g> </svg>
fonte