Самый простой CSS для Facebook стиль "красные" уведомления - PullRequest
77 голосов
/ 21 апреля 2011

Мне нужно уведомление в стиле фейсбука, но получить что-то, что выглядит красиво в браузере, кажется сложным.Например, разные браузеры, похоже, по-разному обрабатывают отступы, в результате чего появляются странные сообщения.

Каков наилучший кросс-браузерный способ обеспечить хорошее отображение уведомлений?Не отрицательно для использования JavaScript, но чистый CSS, конечно, предпочтительнее

enter image description here

Ответы [ 5 ]

154 голосов
/ 21 апреля 2011

Лучший способ добиться этого - использовать абсолютное позиционирование :

/* 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>
33 голосов
/ 12 марта 2013

Вот один, который включает анимацию для изменения количества.

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 для анимации.

4 голосов
/ 21 апреля 2011

довольно хороший учебник для начала.

http://rndnext.blogspot.com/2009/02/creating-badge-icon-plugin-with-jquery.html

3 голосов
/ 21 апреля 2011

Возможно 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 голос
/ 21 апреля 2011

Разметка:

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