css ที่ง่ายที่สุดสำหรับการแจ้งเตือนแบบ "สีแดง" ของ Facebook


88

ฉันต้องการการแจ้งเตือนสไตล์ facebook แต่การได้รับสิ่งที่ดูดีข้ามเบราว์เซอร์ดูเหมือนจะยุ่งยาก ตัวอย่างเช่นเบราว์เซอร์ที่แตกต่างกันดูเหมือนจะปฏิบัติต่อการพายเรือแตกต่างกันส่งผลให้การแจ้งเตือนดูแปลก ๆ

วิธีใดเป็นวิธีการข้ามเบราว์เซอร์ที่ดีที่สุดในการทำให้การแจ้งเตือนปรากฏขึ้นอย่างสวยงาม ไม่เลวร้ายต่อการใช้จาวาสคริปต์ แต่แน่นอนว่าควรใช้ css บริสุทธิ์

ใส่คำอธิบายภาพที่นี่


7
Facebook ใช้ CSS3 - หากผู้ใช้ไม่มีเบราว์เซอร์ที่รองรับก็จะมีกฎอื่น ๆ ที่จะลดระดับลง ตัวอย่างเช่นผู้ใช้ IE จะไม่ได้รับมุมมน
Chris Baker

จริงๆ? นั่นเป็นข้อมูลที่ดี
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"> เพื่อให้ใช้งานได้
Vackup

3
ยกนิ้วให้สำหรับการสนับสนุน ie7, 8 และ 9 Ie6 ก็ใช้ได้เหมือนกัน แต่ฉันไม่สนใจอีกต่อไป :)
Benjamin Crouzier

1
ยอดเยี่ยมมากฉันต้องใส่ไว้ในส่วน <li> ของแท็บ Jquery เพื่อให้ใช้งานได้ แต่ใช้งานได้ดี
ขับเหงื่อ

มันใช้งานได้แม้ว่าฉันจะใช้หลายครั้งในเพจเพียงแค่เปลี่ยน id ของคอนเทนเนอร์
Web_Developer

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 ({opacity: 0}) .text (val) .css ({top: '-10px'}) แทนได้ ภาพเคลื่อนไหว ({ด้านบน: '-1px', ความทึบ: 1}, 500); code
Marcel Djaman

ขอบคุณมาก! ประหยัดเวลาของฉัน
Adrian P.

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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.