Как я могу создать "хвост подсказки" с помощью чистого CSS?
Я только что наткнулся на аккуратный 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, игнорируя тень сейчас?
обновление 1
Я нашел решение моего первоначального вопроса. А вот и скрипка...
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, включая тень и совместимый с ней кросс-браузер?
обновление 2
вот мой решение после комбинации ответов ниже. Я не тестировал его в нескольких браузерах, но он отлично смотрится в 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;
}
6 ответов:
вот пример с box-shadow, все браузеры последней версии должны поддерживать это
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>
вот объяснение, чтобы ответить на ваш первый вопрос (я оставлю фактический CSS другим, поскольку я ленив - пожалуйста, озвучьте свои ответы, которые, по вашему мнению, заслуживают голосов!):
это создает небольшой эффект стрелки / треугольника, "хвост подсказки". Это сводит меня с ума! мне действительно интересно знать, как это работает?!
при рендеринге границы с различными цветами края, но в том же стиле (в вашем случае,
solid
), шов разделяющий каждую пару смежных углов является диагональной линией. Это очень похоже на то, что здесь схемы изображает изgroove
,ridge
,inset
иoutset
границы стилей.обратите внимание, что, хотя все браузеры ведут себя одинаково и делали это до тех пор, пока я помню, это поведение не полностью определено ни в спецификации CSS2.1, ни в модуле CSS Backgrounds and Borders. Последний имеет раздел, описывающий цвет и стиль переходы по углам, и описание, по-видимому, подразумевает, что для границ с нулевыми угловыми радиусами линия, которая визуализируется, на самом деле является линией, которая соединяет угол края заполнения с углом края границы (что приводит к 45-градусной угловой линии для границ равной ширины), но спецификация все еще предупреждает, что это может быть не всегда так (тем более, что она даже не учитывает границы с нулевыми угловыми радиусами явно.)1
на content (original W3C) box model, область 40x40 создается из 20-пиксельных границ, при этом размеры содержимого определяются как 0x0.
разделение квадрата с диагональными линиями, соединяющими его четыре угла, приводит к четырем прямым треугольникам, прямые углы которых встречаются в середине квадрата (см. ниже).
верхняя, нижняя и левая границы белый чтобы соответствовать фону
.tooltiptail
контейнер элемента, в то время как правая граница имеет оттенок синего, чтобы соответствовать цвету фона подсказки:border-color: #ffffff #a0c7ff #ffffff #ffffff;
результат таков, с помеченными границами и границами границ, добавленными с помощью моего надежного инструмента Line:
переориентация хвоста подсказки-это просто вопрос переключения цвета подсказки вокруг. Например, это даст хвост, который прикреплен к дну из подсказки:
border-color: #a0c7ff #ffffff #ffffff #ffffff;
1если вы сторонник соблюдения стандартов, вы можете также считать все это взломом.
Я делаю эту подсказку только с одним
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:
- я использую псевдо селектор: before (: after тоже отлично работает)
- я заставляю содержание с белым пространством, чтобы сделать хвост видимый.
- я поворачиваю свою коробку от 45deg, чтобы исправить угол в боковой части подсказки
- не удивительно для размера и позиционирования.
- я добавляю границу на 2 стороны, которые я хочу.
- и, наконец, я добавляю тень к внешней границе.
подсказка без тени
.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>
С ТЕНЬЮ (выглядит немного странно в 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>
кроссбраузерный подход:
.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 rotation, но потерпите неудачу в браузерах, не совместимых с 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>
вы можете использовать :before и :after псевдо-элементы 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