【发布时间】:2017-10-09 09:46:21
【问题描述】:
这是我要解决的问题。
- 我需要出示特价商品的原价和促销价。
- 某些商品可能没有任何定价 - 因此根本不会显示任何内容
- 有些商品可能只标明价格但没有促销价
- 商品可以选择标明其价格单位
当有价格时 - 并且只有当有价格时,我才想附加定价货币和价格单位(如果有)。通过查看下面的示例可以最好地理解这一点
#spnOldPrice{text-decoration:line-through;}
#spnNewPrice{color:red !important;}
.pricing{position:relative;}
.pricing:not(:empty)::before
{
position:absolute;
left:100%;
content:attr(data-label);
}
<span id='spnOldPrice'><span id='plainoldPrice' class='pricing'>9.99</span></span>
<span id='spnNewPrice'><span id='plainnewPrice' class='pricing'>4.99</span></span>
<hr>
<span id='spnOldPrice'><span id='oldPrice' class='pricing' data-label='€/box'>9.99</span></span>
<span id='spnNewPrice'><span id='newPrice' class='pricing' data-label='€/box'>4.99</span></span>
这里有两个例子
- 第一个仅表示完整和促销价格。这里没有问题。
- 第二个表示完整价格和促销价格以及货币和价格单位
后一个例子说明了这个问题。附加 €/box 字符串的存在导致我的条件 CSS 规则 :not(:empty)::before 启动,在这种情况下,绝对定位的 before 伪元素显示可见内容。自然,下面的跨度 - 促销价格 - 对这个伪元素一无所知,并在 €/box 位下绘制自己。
我可以抛弃我在这里做事的方式,使用多个嵌套跨度并使用一点 JS 来确保一切正常运行。但是,我想知道这里是否有更优雅的纯 CSS 解决方案。
【问题讨论】:
-
尝试删除 position: absolute;left: 100% from .pricing:not(:empty):before css。
-
这只是显示货币/单位的效果,例如€/box,在实际价格的左边,这根本不是预期的价格
标签: html css css-position pseudo-element