Facebook 스타일 "빨간색"알림을위한 가장 쉬운 CSS


87

나는 페이스 북 스타일 알림이 필요하지만, 멋진 크로스 브라우저를 얻는 것은 까다로운 것 같습니다. 예를 들어, 다른 브라우저는 패딩을 다르게 처리하는 것처럼 보이므로 이상하게 보이는 알림이 표시됩니다.

알림이 제대로 표시되도록하는 가장 좋은 브라우저 간 방법은 무엇입니까? 자바 스크립트 사용에 불리하지는 않지만 순수한 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 지원에 대한 좋아요. : 6으로 좀 aswell 작동하지만 난 더 이상 걱정하지 않는다
벤자민 Crouzier에게

1
이것은 굉장합니다. Jquery 탭의 <li> 섹션에 넣어야 작동하지만 훌륭하게 작동합니다.
땀에 젖은

컨테이너의 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'}). animate ({top : '-1px', 불투명도 : 1}, 500); code
Marcel Djaman 2013-10-25

감사합니다! 내 시간을 절약합니다.
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.