Facebook tarzı "kırmızı" bildirimler için en kolay css


88

Facebook tarzı bir bildirime ihtiyacım var, ancak tarayıcılar arasında güzel görünen bir şey almak zor görünüyor. Örneğin, farklı tarayıcılar dolgulara farklı davranıyor ve bu da garip görünen bildirimlere neden oluyor.

Bildirimlerin güzel bir şekilde görünmesini sağlamanın en iyi çapraz tarayıcı yolu nedir? JavaScript kullanmaktan olumsuz değildir, ancak saf css elbette tercih edilir

görüntü açıklamasını buraya girin


7
Facebook CSS3 kullanır - eğer kullanıcının onu destekleyen bir tarayıcısı yoksa, indirgenmesi için başka kurallar vardır. Örneğin, IE kullanıcıları yuvarlatılmış köşeler almazlar.
Chris Baker

Gerçekten mi? bu harika bir bilgi.
ming yeow

Yanıtlar:


172

Bunu başarmanın en iyi yolu, mutlak konumlandırma kullanmaktır :

/* 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>


1
Çalışması için <div id = "notif_Container"> öğesini <div id = "noti_Container"> olarak değiştirin
Vackup

3
İe7, 8 ve 9 desteği için beğeniler. Ie6 da işe yarıyor, ama artık umrumda değil :)
Benjamin Crouzier

1
Bu harika, çalışmasını sağlamak için bir Jquery sekmesinin <li> bölümüne yerleştirmem gerekti, ancak harika çalışıyor.
terli

Sadece konteynerin kimliğini değiştirerek bir sayfada birden çok kez kullandığım halde çalışıyor.
Web_Developer

34

İşte sayının değiştiği zaman için animasyon içeren bir tane.

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})

JQuery ile animasyon:

$('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);
});

Küre simgesi için Font Awesome'i ve animasyon için jQuery Transit'i kullanır.


2
@AmbiguousTk bir geçiş eklentisi tarafından sunulur jquery.transit.min.js Veya bunun yerine: code$ counter.css ({opacity: 0}) .text (val) .css ({top: '-10px'}) kullanabilirsiniz. animate ({üst: '-1px', opaklık: 1}, 500); code
Marcel Djaman

Çok teşekkürler! Zamanımı kurtarır.
Adrian P.

4

Muhtemelen absolutekonumlandırma:

<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>

Bunun gibi bir şey. Açıkçası, ayrıntıları değiştirmek ve muhtemelen arka plan resimlerini kullanmak istersiniz. Önemli olan, tarayıcılar arasında, en azından deneyimlerime göre gerçekten tutarlı olan mutlak konumlandırmayı vurgulamaktır.


1

İşaretleme:

<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 
    ...
}

0

Mutlak konumlandırma hakkındaki cevapların doğru olduğundan eminim. Deney uğruna, yalnızca SVG'ye yönelik bir çözüm yapmaya çalıştım. Sonuç ideal olmaktan uzak, belki birisi benzer bir svg bulmacasına daha zarif bir çözüm biliyor olabilir? :)

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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.