Necesito una notificación al estilo de Facebook, pero conseguir algo que se vea bien en varios navegadores parece complicado. Por ejemplo, los diferentes navegadores parecen tratar los rellenos de manera diferente, lo que resulta en notificaciones de aspecto extraño.
¿Cuál es la mejor forma en todos los navegadores de garantizar que las notificaciones se muestren correctamente? No es adverso al uso de javascript, pero es preferible el CSS puro.
javascript
html
css
user-interface
user-experience
ming yeow
fuente
fuente
Respuestas:
La mejor forma de conseguirlo es mediante el posicionamiento 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>
fuente
Aquí hay uno que incluye animación para cuando cambia el conteo.
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})
Animación con 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); });
Utiliza Font Awesome para el icono del globo y jQuery Transit para la animación.
fuente
code
$ counter.css ({opacity: 0}) .text (val) .css ({top: '-10px'}). animar ({top: '-1px', opacidad: 1}, 500);code
Probablemente
absolute
posicionamiento:<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 como eso. Obviamente, querrá cambiar los detalles y probablemente usar imágenes de fondo. El punto es enfatizar el posicionamiento absoluto que es realmente consistente en todos los navegadores, al menos en mi experiencia.
fuente
Margen:
<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 ... }
fuente
Estoy seguro de que las respuestas sobre el posicionamiento absoluto son correctas. Por el bien del experimento, traté de hacer una solución solo para SVG. El resultado está lejos de ser ideal, ¿tal vez alguien conoce una solución más elegante para un rompecabezas svg similar? :)
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>
fuente