5

考虑以下:

HTML

<div class="info_bubble">
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ornare ligula et nulla auctor vitae tincidunt erat congue.</p>
</div>

CSS

.info_bubble {
    padding: 0 15px;
    margin: 1em 0 3em;
    border: 5px solid #FFF;
    background: #A6CE39;
    -webkit-border-radius: 10px;
    -moz-border-radius: 10px;
    border-radius: 10px;
    width: 200px;
    box-shadow: 0 0 10px #000;
    color: #FFF;
    position: absolute;
    left: 50px;
    top: 50px;
}

.info_bubble::before {
    content: "";
    position: absolute;
    bottom: -20px;
    left: 40px;
    border-width: 20px 20px 0;
    border-style: solid;
    display: block;
    width: 0;
    top: 10px;
    bottom: auto;
    left: -23px;
    border-width: 15px 23px 15px 0;
    border-color: transparent #FFF;
}

.info_bubble::after {
    content: "";
    position: absolute;
    bottom: -13px;
    left: 47px;
    border-width: 13px 13px 0;
    border-style: solid;
    display: block;
    width: 0;
    top: 16px;
    bottom: auto;
    left: -15px;
    border-width: 9px 15px 9px 0;
    border-color: transparent #A6CE39;
}​

一个例子:http: //jsfiddle.net/ysqQV/2/

上面从左侧生成一个带有三角形“箭头”的“语音气泡”。箭头由边框创建,部分透明,部分不透明。

我想在对话泡泡后面使用一个盒子阴影,但这在箭头周围有点时髦,因为它从整个元素而不是不透明部分投下阴影。

示例:http: //jsfiddle.net/ysqQV/1/

我知道这是正常行为而不是错误,但我希望能够将框阴影剪辑到箭头的不透明部分。

我不能将单个图像用于语音气泡,因为内容可以是任何高度,并且我想避免使用拼凑在一起的多个图像,因为这个解决方案非常干净。

谁能想到一个可行的解决方法?

4

3 回答 3

4

使用阴影过滤器:

filter: drop-shadow(0 0 30px #333);
于 2019-03-06T10:16:33.760 回答
3

你所追求的是不可能的。但是,我知道一些解决方法:

首先也是最简单的,松开箭头上的阴影。它仍然会很好看。

其次,使用图像并在阴影中烘烤箭头。可能并不理想,但它确实有效。

第三个选项,只需使用所有这些样式制作一个 20 x 20 的正方形,然后使用变换旋转它。你会得到一颗钻石,所以下一步是使用蒙版隐藏你不需要的边缘。我以前做过这个,但在这个过程中肯定会有点模糊,所以我实际上最终选择了第一个选项。如果你不能使用掩码,你可以将箭头包裹在 div/span 或其他东西中,并将其设置为溢出隐藏。额外的代码,但结果相同。

如果您需要,我可以为最终选项提供一个示例,但今晚我才有机会。

就个人而言,我会选择第一个选项。

希望有帮助:)

于 2012-06-18T11:01:34.817 回答
1

为时已晚,但我已使用您的代码使其适用于我的网站。所以,我在这里分享它。

它只需要在 HTML 中添加一个,以及一些 CSS 更改:

<div class="arrow_mask"></div>

http://jsfiddle.net/ysqQV/123/

于 2014-03-08T02:29:42.633 回答