我刚刚遇到了一个巧妙的CSS技巧。看看小提琴......
.tooltiptail {
display: block;
border-color: #ffffff #a0c7ff #ffffff #ffffff;
border-style: solid;
border-width: 20px;
width: 0px;
height: 0px;
}
.anothertail {
background-image: url(http://static.jqueryfordesigners.com/demo/images/coda/bubble-tail2.png);
display: block;
height: 29px;
width: 30px;
}
<div>Cool Trick:
<br />
<div class="tooltiptail"></div>
</div>
<br />
<div>How do I get this effect with only CSS?
<br />
<div class="anothertail"></div>
</div>
这会产生一个小箭头/三角形效果,一个“工具提示尾巴”。这让我大吃一惊! 我真的很想知道这是如何运作的?!
此外,有没有办法扩展这个CSS技巧来创建一个效果,如下所示:
这是一个有趣的问题。这可以仅使用CSS来完成,暂时忽略阴影吗?
我想出了我最初问题的解决方案。这是小提琴......
HTML
<div style="position: relative;">Cool Trick:<br />
<div class="tooltiptail"></div>
<div class="tooltiptail2"></div>
</div>
CSS
.tooltiptail {
display: block;
border-color: #ffffff #a0c7ff #ffffff #ffffff;
border-style: solid;
border-width: 20px;
width: 0px;
height: 0px;
}
.tooltiptail2 {
display: block;
border-color: transparent #ffffff transparent transparent;
border-style: solid;
border-width: 18px;
width: 0px;
height: 0px;
position: relative;
left: 4px;
top: -38px;
}
现在,我如何使用纯CSS完全模仿上面的小图片,包括阴影并使其与浏览器兼容?
以下是我的解决方案,结合以下答案。我没有在多个浏览器中测试它,但它在Chrome中看起来很棒。
http://jsfiddle.net/UnsungHero97/MZXCj/688/
HTML
<div id="toolTip">
<p>i can haz css tooltip</p>
<div id="tailShadow"></div>
<div id="tail1"></div>
<div id="tail2"></div>
</div>
CSS
#toolTip {
background-color: #ffffff;
border: 1px solid #73a7f0;
width: 200px;
height: 100px;
margin-left: 32px;
position:relative;
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
box-shadow: 0px 0px 8px -1px black;
-moz-box-shadow: 0px 0px 8px -1px black;
-webkit-box-shadow: 0px 0px 8px -1px black;
}
#toolTip p {
padding:10px;
}
#tailShadow {
background-color: transparent;
width: 4px;
height: 4px;
position: absolute;
top: 16px;
left: -8px;
z-index: -10;
box-shadow: 0px 0px 8px 1px black;
-moz-box-shadow: 0px 0px 8px 1px black;
-webkit-box-shadow: 0px 0px 8px 1px black;
}
#tail1 {
width: 0px;
height: 0px;
border: 10px solid;
border-color: transparent #73a7f0 transparent transparent;
position:absolute;
top: 8px;
left: -20px;
}
#tail2 {
width: 0px;
height: 0px;
border: 10px solid;
border-color: transparent #ffffff transparent transparent;
position:absolute;
left: -18px;
top: 8px;
}
答案 0 :(得分:60)
这是一个带阴影的示例,所有最新版本的浏览器都应支持此
HTML:
<div id="toolTip">
<p>i can haz css tooltip</p>
<div id="tailShadow"></div>
<div id="tail1"></div>
<div id="tail2"></div>
</div>
CSS:
body {font-family:Helvetica,Arial,sans-serif;}
#toolTip {
position:relative;
}
#toolTip p {
padding:10px;
background-color:#f9f9f9;
border:solid 1px #a0c7ff;
-moz-border-radius:5px;-ie-border-radius:5px;-webkit-border-radius:5px;-o-border-radius:5px;border-radius:5px;
}
#tailShadow {
position:absolute;
bottom:-8px;
left:28px;
width:0;height:0;
border:solid 2px #fff;
box-shadow:0 0 10px 1px #555;
}
#tail1 {
position:absolute;
bottom:-20px;
left:20px;
width:0;height:0;
border-color:#a0c7ff transparent transparent transparent;
border-width:10px;
border-style:solid;
}
#tail2 {
position:absolute;
bottom:-18px;
left:20px;
width:0;height:0;
border-color:#f9f9f9 transparent transparent transparent;
border-width:10px;
border-style:solid;
}
body {
font-family: Helvetica, Arial, sans-serif;
}
#toolTip {
position: relative;
}
#toolTip p {
padding: 10px;
background-color: #f9f9f9;
border: solid 1px #a0c7ff;
-moz-border-radius: 5px;
-ie-border-radius: 5px;
-webkit-border-radius: 5px;
-o-border-radius: 5px;
border-radius: 5px;
}
#tailShadow {
position: absolute;
bottom: -8px;
left: 28px;
width: 0;
height: 0;
border: solid 2px #fff;
box-shadow: 0 0 10px 1px #555;
}
#tail1 {
position: absolute;
bottom: -20px;
left: 20px;
width: 0;
height: 0;
border-color: #a0c7ff transparent transparent transparent;
border-width: 10px;
border-style: solid;
}
#tail2 {
position: absolute;
bottom: -18px;
left: 20px;
width: 0;
height: 0;
border-color: #f9f9f9 transparent transparent transparent;
border-width: 10px;
border-style: solid;
}
<div id="toolTip">
<p>i can haz css tooltip</p>
<div id="tailShadow"></div>
<div id="tail1"></div>
<div id="tail2"></div>
</div>
答案 1 :(得分:56)
这里有一个解释来回答你的第一个问题(我会将实际的CSS留给别人,因为我很懒 - 请提出他们认为值得投票的答案!):
这会产生一个小箭头/三角形效果,一个“工具提示尾巴”。这让我大吃一惊! 我真的很想知道这是如何运作的?!
当渲染具有不同边缘颜色但具有相同样式的边框(在您的情况下为solid
)时,将每对相邻角分开的接缝是对角线。它与groove
,ridge
,inset
和outset
边框样式的the diagram here描述非常相似。
请注意,虽然所有浏览器的行为方式都相同,并且只要我记得,但是在CSS2.1规范或CSS背景和边框模块中并未完全定义此行为。后者有一个描述color and style transitions at corners的部分,描述似乎暗示对于零角半径的边界,渲染的线实际上是一条连接填充边角与边界角的线边缘(对于等宽边界产生45度角线),但规范仍然警告说情况可能并非总是如此(特别是因为它甚至没有明确地考虑零角半径的边界)。 1
通过content (original W3C) box model,在20像素边框中创建一个40x40区域,内容尺寸定义为0x0。
将一个正方形与连接其四个角的对角线分开,得到四个直角三角形,其直角在正方形的中点处相交(见下文)。
顶部,底部和左侧边框为白色以匹配.tooltiptail
元素容器的背景,而右边框为蓝色,以匹配工具提示的背景颜色:
border-color: #ffffff #a0c7ff #ffffff #ffffff;
结果是这样,标有边框,并使用我可靠的线条工具添加边框边界:
重新定位工具提示尾部只需要切换工具提示颜色。例如,这会产生一个附在尖端底部的尾部:
border-color: #a0c7ff #ffffff #ffffff #ffffff;
1 如果你是标准合规的坚持者,你也可以考虑这一切。
答案 2 :(得分:19)
我只使用一个div
元素执行此工具提示。
HTML:
<div class="tooltip">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent augue justo, venenatis non tincidunt sit amet, suscipit eget ligula.</div>
CSS:
.tooltip{
position: relative;
border: 1px solid #73a7f0;
width: 200px;
margin-left: 20px;
padding: 5px 14px;
border-radius: 4px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
box-shadow: 0px 0px 6px rgba(0, 0, 0, .7);
-webkit-box-shadow: -0px 0px 6px rgba(0, 0, 0, .7);
-moz-box-shadow: 0px 0px 6px rgba(0, 0, 0, .7);
}
.tooltip:before{
content: ' ';
display: block;
position: absolute;
left: -8px;
top: 15px;
width: 14px;
height: 14px;
border-color: #73a7f0;
border-width: 1px;
border-style: none none solid solid;
background-color: #fff;
box-shadow: -2px 2px 3.5px rgba(0, 0, 0, .5);
-webkit-box-shadow: -2px 2px 3.5px rgba(0, 0, 0, .5);
-moz-box-shadow: -2px 2px 3.5px rgba(0, 0, 0, .5);
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
}
说明:
我的正常div有边框,就像其他例子一样。尾部是CSS的简单组合:
答案 3 :(得分:11)
没有阴影的工具提示
.abubble {
position: relative;
border: 1px solid #a0c7ff;
width: 100px;
height: 100px;
}
.ashadow {
position: absolute;
display: inline-block;
background: transparent;
width: 10px;
height: 10px;
left: 50px;
top: 100px;
-moz-box-shadow: 0px 10px 30px #000;
-webkit-box-shadow: 0px 10px 30px #000;
box-shadow: 0px 10px 30px #000;
}
.atail {
position: absolute;
display: inline-block;
border-width: 20px;
border-style: solid;
border-color: #a0c7ff transparent transparent transparent;
width: 0px;
height: 0px;
left: 30px;
top: 100px;
}
.atail2 {
position: relative;
display: inline-block;
border-width: 19px;
border-style: solid;
border-color: #fff transparent transparent transparent;
width: 0px;
height: 0px;
left: -19px;
top: -20px;
}
.anothertail {
background-image: url(http://static.jqueryfordesigners.com/demo/images/coda/bubble-tail2.png);
display: block;
height: 29px;
width: 30px;
}
<div>How do I get this effect with only CSS?
<br />
<div class="anothertail"></div>
</div>
<div class="abubble">
<div class="atail">
<div class="atail2">
</div>
</div>
</div>
使用Shadow (在WebKit中看起来有些奇怪......我想要优化它):
.abubble {
position: relative;
border: 1px solid #a0c7ff;
width: 100px;
height: 100px;
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
}
.ashadow {
position: absolute;
display: inline-block;
background: transparent;
width: 10px;
height: 10px;
left: -5px;
top: -16px;
-moz-box-shadow: 0px 10px 20px #000;
-webkit-box-shadow: 0px 10px 20px #000;
box-shadow: 0px 10px 20px #000;
}
.atail {
position: absolute;
display: inline-block;
border-width: 20px;
border-style: solid;
border-color: #a0c7ff transparent transparent transparent;
width: 0px;
height: 0px;
left: 30px;
top: 100px;
}
.atail2 {
position: relative;
display: inline-block;
border-width: 19px;
border-style: solid;
border-color: #fff transparent transparent transparent;
width: 0px;
height: 0px;
left: -19px;
top: -20px;
}
.anothertail {
background-image: url(http://static.jqueryfordesigners.com/demo/images/coda/bubble-tail2.png);
display: block;
height: 29px;
width: 30px;
}
<div>How do I get this effect with only CSS?
<br />
<div class="anothertail"></div>
</div>
<div class="abubble">
<div class="atail">
<div class="ashadow"></div>
<div class="atail2">
</div>
</div>
</div>
答案 4 :(得分:6)
Crossbrowser方法:
.tooltip {
position:relative;
padding:10px;
border-bottom:1px solid #000;
background:#ccc;
}
.arrow {
background:transparent;
display:inline-block;
position:absolute;
bottom:-20px;
border-left:10px solid transparent;
border-bottom:10px solid transparent;
border-top:10px solid #000;
border-right:10px solid transparent;
}
.arrow i {
display:inline-block;
position:absolute;
top:-10px;
left:-9px;
width:0;
height:0;
border-left:9px solid transparent;
border-bottom:9px solid transparent;
border-top:9px solid #ccc;
border-right:9px solid transparent;
}
* html .arrow {
border-bottom-color:white;
border-left-color:white;
border-right-color:white;
filter: chroma(color=white);
}
* html .arrow i {
border-bottom-color:white;
border-left-color:white;
border-right-color:white;
filter: chroma(color=white);
}
<div class="tooltip">
<span class="arrow"><i></i></span>
Tooltip text that wants to be your friend.
</div>
这个适用于IE7 +(在IE6中也可以使用(filter: chroma(color=white);
),但不会在箭头周围显示黑色边框)。
IE6修复:
* html .arrow {
border-bottom-color:white;
border-left-color:white;
border-right-color:white;
filter: chroma(color=white);
}
* html .arrow i
{
border-bottom-color:white;
border-left-color:white;
border-right-color:white;
filter: chroma(color=white);
}
这将使IE6呈现的丑陋黑色透明度是您在色度滤镜中指定的颜色(我做了白色,因此它在背景中消失)。
<小时/> CSS 3方法:
您可以使用CSS3旋转来完成,但在非CSS3兼容的浏览器中会失败:
.tooltip {
position:relative;
padding:10px;
background:#ccc;
border-bottom:1px solid #000;
}
.tooltip:before {
content:"";
display:block;
width:10px;
height:10px;
position:absolute;
bottom:-6px;
border-left:1px solid #000;
border-bottom:1px solid #000;
background:#ccc;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
transform: rotate(-45deg);
}
<div class="tooltip">
Tooltip text that wants to be your friend.
</div>
答案 5 :(得分:3)
您可以使用CSS的:before和:after伪元素。实例,:之前可以用来插入三角形和:之后插入一个矩形。这两者的组合创建了一个气泡工具提示
例如:
a[bubbletooltip]:before
{
content: "";
position: absolute;
border-bottom: 21px solid #e0afe0;
border-left: 21px solid transparent;
border-right: 21px solid transparent;
visibility: hidden;
bottom: -20px;
left: -12px;
}
a[bubbletooltip]:after
{
position: absolute;
content: attr(bubbletooltip);
color: #FFF;
font-weight:bold;
bottom: -35px;
left: -26px;
white-space: nowrap;
background: #e0afe0;
padding: 5px 10px;
-moz-border-radius: 6px;
-webkit-border-radius:6px;
-khtml-border-radius:6px;
border-radius: 6px;
visibility: hidden;
}
http://www.careerbless.com/services/css/csstooltipcreator.php
提供在线工具