【问题标题】:CSS notification style badge over image图像上的 CSS 通知样式徽章
【发布时间】:2016-01-08 20:07:43
【问题描述】:

我正在尝试在图像上放置一个“通知”样式的徽章。我使用 Twitters Bootstrap 作为基础框架并创建了一个名为 notify-badge 的自定义 CSS 类。但我无法让任何东西正确排列。

通过 Photoshop 的魔力,这就是我想要完成的任务。 [![在此处输入图片描述][1]][1]

这是我的 CSS 代码。

.notify-badge{
    position: absolute;
    background: rgba(0,0,255,1);
    height:2rem;
    top:1rem;
    right:1.5rem;
    width:2rem;
    text-align: center;
    line-height: 2rem;;
    font-size: 1rem;
    border-radius: 50%;
    color:white;
    border:1px solid blue;
}

我希望能够在徽章中放置任何小的文字,它会扩大红色圆圈以适应。

这是我的 HTML 代码。

<div class="col-sm-4">
 <a href="#">
     <span class="notify-badge">NEW</span>
     <img src="myimage.png"  alt="" width="64" height="64">
 </a> 
    <p>Some text</p>
</div>

【问题讨论】:

标签: html css twitter-bootstrap notifications


【解决方案1】:

您可以通过多种不同的方式来实现这一点。这应该可以帮助您开始:

.item {
    position:relative;
    padding-top:20px;
    display:inline-block;
}
.notify-badge{
    position: absolute;
    right:-20px;
    top:10px;
    background:red;
    text-align: center;
    border-radius: 30px 30px 30px 30px;
    color:white;
    padding:5px 10px;
    font-size:20px;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<div class="col-sm-4">
    <div class="item">
        <a href="#">
            <span class="notify-badge">NEW</span>
            <img src="https://picsum.photos/200"  alt="" />
        </a>
    </div>
</div>

附录(来自提问者@user-44651)

(从问题中移开)

这是应用此答案的结果。

margin-top:-20px; 添加到.item 修复了对齐问题。

【讨论】:

  • 就是这样!但是,如果在列中使用它,则此项目 div 会被下推。有什么方法可以让徽章与其容器重叠?
  • 查看更新后的问题以及添加的图片以供参考@apad1
  • 对引导程序的不必要依赖已经导致这个答案被打破。现在运行它看看。关于这个问题的问题有工作答案:stackoverflow.com/questions/5747863/…
  • @Inigo OP 正在使用 Bootstrap 并用 Bootstrap 标记问题,因此对他们来说这是必要的。此外,Bootstrap 不是答案不起作用的原因(答案也不依赖于 Bootstrap),而是图像占位符网站不再提供图像。
  • “答案也不依赖于 Bootstrap”……这就是我的观点!即使在问题(当前形式和原始形式)中,唯一的引导程序是class="col-sm-4",这完全无关紧要。 OP 可能在尝试装饰 PNG 文件时对其进行了不必要的标记 png,而我们的版主会清理它。作为版主,我们应该改进网站,让问题和答案对更多人更有用,消除冗余和其他噪音。
【解决方案2】:

这里的想法是将绝对容器覆盖在相对容器之上。这是一个类似的例子:

<div class="image">
      <img src="images/3754004820_91a5c238a0.jpg" alt="" />
      <h2>A Movie in the Park:<br />Kung Fu Panda</h2>
</div>

CSS:

.image { 
   position: relative; 
   width: 100%; /* for IE 6 */
}

h2 { 
   position: absolute; 
   top: 200px; 
   left: 0; 
   width: 100%; 
}

这将把我们的文本很好地放在图像的顶部,但它并没有完成我们想要在文本后面实现的框。为此,我们不能使用 h2,因为这是一个块级元素,我们需要一个没有特定宽度的内联元素。因此,将 h2 包裹在 span 中。

<h2><span>A Movie in the Park:<br />Kung Fu Panda</span></h2>

然后使用该跨度来设置样式和文本:

h2 span { 
   color: white; 
   font: bold 24px/45px Helvetica, Sans-Serif; 
   letter-spacing: -1px;  
   background: rgb(0, 0, 0); /* fallback color */
   background: rgba(0, 0, 0, 0.7);
   padding: 10px; 
}

有关如何确保适当间距或使用 jQuery 通过允许您从代码中删除一些标签并将其重新插入 jQuery 来稍微清理代码的想法,请查看source

【讨论】:

    【解决方案3】:

    这是我用示例代码制作的小提琴:

    https://jsfiddle.net/un2p8gow/

    • 我将 notify-badge 跨度更改为 div。我看不出它必须是跨度的理由。

    • 我将位置更改为相对位置。编辑 - 你实际上可以保留属性 position: absolute; 只要你知道你在做什么。 cmets中的人是对的。

    • 您有属性right: 1.5rem;,我只是将其更改为left,因为它的插入方向与您的示例相反。

    你可以进一步调整它,但这是你想要的。

    【讨论】:

    • 使用相对位置并不理想,因为它在应用定位之前占用的空间仍然存在。绝对位置会将元素拉出上下文并防止不需要的空间将图像向下推。
    • 你知道吗?你是对的。我的思绪在别处。对position:absolute; 的强烈不信任在我的脑海中浮现。
    • 另外,使用 span 更合适,因为 OP 希望徽章根据其中的内容增长,尽管他们可能需要使用 display: inline-block;。具有固定宽度限制了它们的灵活性。附言如果使用得当,绝对位置没有任何问题。
    • 这是我的思考过程。
    猜你喜欢
    • 2013-07-15
    • 2022-12-14
    • 2020-12-27
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    相关资源
    最近更新 更多