Css dễ nhất cho thông báo “đỏ” kiểu Facebook


87

Tôi cần một thông báo kiểu facebook, nhưng nhận được một cái gì đó trông đẹp mắt trên nhiều trình duyệt có vẻ khó. Ví dụ: các trình duyệt khác nhau dường như xử lý các vùng đệm khác nhau, dẫn đến các thông báo trông kỳ lạ.

Cách tốt nhất trên nhiều trình duyệt để đảm bảo các thông báo hiển thị đẹp mắt là gì? Không có gì bất lợi khi sử dụng javascript, nhưng css thuần túy dĩ nhiên sẽ thích hợp hơn

nhập mô tả hình ảnh ở đây


7
Facebook sử dụng CSS3 - nếu người dùng không có trình duyệt hỗ trợ nó, sẽ có những quy tắc khác để nó giảm chất lượng. Ví dụ, người dùng IE sẽ không nhận được các góc tròn.
Chris Baker

có thật không? đó là thông tin tuyệt vời.
ming yeow

Câu trả lời:


172

Cách tốt nhất để đạt được điều này là sử dụng định vị tuyệt đối :

/* 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
Thay đổi <div id = "notif_Container"> để <div id = "noti_Container"> để làm cho nó hoạt
Vackup

3
Đồng ý cho hỗ trợ tức là 7, 8 và 9. IE6 kinda làm việc là tốt, nhưng tôi không quan tâm nữa :)
Benjamin Crouzier

1
Điều này thật tuyệt, tôi đã phải đặt nó vào phần <li> của tab Jquery để làm cho nó hoạt động, nhưng hoạt động rất tốt.
đổ mồ hôi vào

Nó hoạt động ngay cả khi tôi đã sử dụng nhiều lần trong một trang chỉ bằng cách thay thế id của vùng chứa.
Web_Developer

34

Đây là một trong những bao gồm hoạt ảnh khi số lượng thay đổi.

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

Hoạt ảnh với 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);
});

Nó sử dụng Font Awesome cho biểu tượng quả địa cầu và jQuery Transit cho hoạt ảnh.


2
@AmbiguousTk nó được cung cấp bởi một plugin chuyển đổi jquery.transit.min.js Hoặc thay vào đó, bạn có thể sử dụng: code$ counter.css ({opacity: 0}) .text (val) .css ({top: '-10px'}). animate ({top: '-1px', opacity: 1}, 500); code
Marcel Djaman

Cảm ơn rất nhiều! Tiết kiệm thời gian của tôi.
Adrian P.

4

Có lẽ là absoluteđịnh vị:

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

Đại loại vậy. Rõ ràng là bạn muốn thay đổi các chi tiết cụ thể và có thể sử dụng hình nền. Vấn đề là nhấn mạnh vị trí tuyệt đối mà nó thực sự nhất quán trên các trình duyệt, ít nhất là theo kinh nghiệm của tôi.


1

Đánh dấu:

<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

Tôi chắc chắn rằng các câu trả lời về định vị tuyệt đối là đúng. Để thử nghiệm, tôi đã cố gắng tạo ra một giải pháp chỉ dành cho SVG. Kết quả là xa lý tưởng, có thể ai đó biết một giải pháp thanh lịch hơn cho một câu đố svg tương tự? :)

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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.