CSS termudah untuk notifikasi "merah" gaya Facebook


88

Saya memerlukan notifikasi gaya facebook, tetapi mendapatkan sesuatu yang terlihat bagus lintas browser tampaknya sulit. Misalnya, browser yang berbeda tampaknya memperlakukan paddings secara berbeda, menghasilkan pemberitahuan yang tampak aneh.

Apa cara lintas-browser terbaik untuk memastikan pemberitahuan muncul dengan baik? Tidak merugikan menggunakan javascript, tetapi css murni tentu saja lebih disukai

masukkan deskripsi gambar di sini


7
Facebook menggunakan CSS3 - jika pengguna tidak memiliki browser yang mendukungnya, ada aturan lain yang menurunkannya. Misalnya, pengguna IE tidak akan mendapatkan sudut yang membulat.
Chris Baker

Betulkah? itu informasi yang bagus.
ming yeow

Jawaban:


172

Cara terbaik untuk mencapai ini adalah dengan menggunakan pemosisian absolut :

/* 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
Ubah <div id = "notif_Container"> menjadi <div id = "noti_Container"> untuk membuatnya berfungsi
Vackup

3
Jempol untuk dukungan ie7, 8 dan 9. Ie6 agak berfungsi juga, tapi saya tidak peduli lagi :)
Benjamin Crouzier

1
Ini luar biasa, saya harus meletakkannya di bagian <li> dari tab Jquery untuk membuatnya bekerja, tapi bekerja dengan baik.
berkeringat

Ini berfungsi bahkan saya digunakan beberapa kali di halaman dengan hanya mengganti id wadah.
Web_Developer

34

Ini salah satu yang menyertakan animasi saat hitungan berubah.

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

Animasi dengan 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);
});

Ini menggunakan Font Awesome untuk ikon globe dan jQuery Transit untuk animasinya.


2
@AmbiguousTk ini dilayani oleh plugin transisi jquery.transit.min.js Atau sebagai gantinya Anda dapat menggunakan: code$ counter.css ({opacity: 0}) .text (val) .css ({top: '-10px'}). animate ({top: '-1px', opacity: 1}, 500); code
Marcel Djaman

Terima kasih banyak! Menghemat waktu saya.
Adrian P.

4

Mungkin absolutememposisikan:

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

Sesuatu seperti itu. Jelas Anda ingin mengubah secara spesifik dan mungkin menggunakan gambar latar belakang. Intinya adalah untuk menekankan pemosisian absolut yang benar-benar konsisten di seluruh browser, setidaknya menurut pengalaman saya.


1

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

0

Saya yakin jawaban tentang pemosisian absolut benar. Demi percobaan, saya mencoba membuat solusi khusus SVG. Hasilnya jauh dari ideal, mungkin seseorang tahu solusi yang lebih elegan untuk teka-teki svg yang serupa? :)

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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.