Найпростіший css для "червоних" сповіщень у стилі Facebook


87

Мені потрібне сповіщення у стилі facebook, але отримання чогось, що виглядає приємно для перехресного браузера, здається складним. Наприклад, різні браузери, здається, по-різному ставляться до відбитків, що призводить до дивних сповіщень.

Який найкращий спосіб забезпечити гарне відображення сповіщень між браузерами? Не шкодить використанню javascript, але звичайно кращий css

введіть тут опис зображення


7
Facebook використовує CSS3 - якщо у користувача немає браузера, який його підтримує, існують інші правила, щоб він погіршився. Наприклад, користувачі IE не отримають закруглених кутів.
Кріс Бейкер,

справді? це чудова інформація.
ming yeow

Відповіді:


172

Найкращий спосіб досягти цього - використання абсолютного позиціонування :

/* 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
Змініть <div id = "notif_Container"> на <div id = "noti_Container">, щоб він працював
Резервна копія

3
Великі пальці вгору для підтримки ie7, 8 та 9.
Ie6 якось добре

1
Це чудово, мені довелося помістити його в розділ <li> на вкладці Jquery, щоб він працював, але він чудово працює.
спітнілий

Це працює, навіть якщо я використовував кілька разів на сторінці, просто замінивши ідентифікатор контейнера.
Web_Developer 03.03.16

34

Ось такий, який включає анімацію, коли змінюється кількість.

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:

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

Він використовує Font Awesome для піктограми глобуса та jQuery Transit для анімації.


2
@AmbiguousTk він обслуговується плагіном переходу jquery.transit.min.js Або замість цього ви можете використовувати: code$ counter.css ({непрозорість: 0}) .text (val) .css ({top: '-10px'}). анімація ({top: '-1px', непрозорість: 1}, 500); code
Марсель Джаман

Дуже дякую! Економить мій час.
Адріан П.

4

Можливо absoluteпозиціонування:

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

Щось таке. Очевидно, ви хотіли б змінити особливості і, можливо, використовувати фонові зображення. Суть полягає в тому, щоб підкреслити абсолютне позиціонування, яке воно насправді узгоджується в браузерах, принаймні, на мою думку.


1

Розмітка:

<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

Я впевнений, що відповіді щодо абсолютного позиціонування є правильними. Задля експерименту я спробував зробити рішення лише для SVG. Результат далеко не ідеальний, можливо, хтось знає більш елегантне рішення подібної головоломки svg? :)

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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.