나는 페이스 북 스타일 알림이 필요하지만, 멋진 크로스 브라우저를 얻는 것은 까다로운 것 같습니다. 예를 들어, 다른 브라우저는 패딩을 다르게 처리하는 것처럼 보이므로 이상하게 보이는 알림이 표시됩니다.
알림이 제대로 표시되도록하는 가장 좋은 브라우저 간 방법은 무엇입니까? 자바 스크립트 사용에 불리하지는 않지만 순수한 CSS가 물론 바람직합니다.
나는 페이스 북 스타일 알림이 필요하지만, 멋진 크로스 브라우저를 얻는 것은 까다로운 것 같습니다. 예를 들어, 다른 브라우저는 패딩을 다르게 처리하는 것처럼 보이므로 이상하게 보이는 알림이 표시됩니다.
알림이 제대로 표시되도록하는 가장 좋은 브라우저 간 방법은 무엇입니까? 자바 스크립트 사용에 불리하지는 않지만 순수한 CSS가 물론 바람직합니다.
답변:
이를 달성하는 가장 좋은 방법은 절대 위치 지정 을 사용하는 것입니다 .
/* 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>
다음은 카운트가 변경 될 때 애니메이션을 포함하는 것입니다.
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})
$('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을 사용합니다.
code
$ counter.css ({opacity : 0}) .text (val) .css ({top : '-10px'}). animate ({top : '-1px', 불투명도 : 1}, 500); code
아마도 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>
그런 것. 분명히 세부 사항을 변경하고 배경 이미지를 사용하고 싶을 것입니다. 요점은 적어도 내 경험에서 브라우저 전반에서 실제로 일관된 절대 위치를 강조하는 것입니다.
절대 위치에 대한 답이 정확하다고 확신합니다. 실험을 위해 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>