There are many examples out there on the Internet about how to achieve this effect. I based mine on this one: Bubbler - CSS Speech Bubble Generator. Of all the examples I saw, I just like this one the best.
There was one minor issue I came across though. The frogs are in different places in each cell, but because the bubble stems are positioned using the CSS psuedo-elements ::before and ::after, the values that determine the stem location cannot be set via JavaScript.
I decided to solve this issue by removing the stem position from the .bubble::before and .bubble::after classes in the CSS, and creating another set of classes just for the stem positions.
I called these new classes bubble25, bubble50, and bubble75. You can probably guess that the number represents the percentage used for the left attribute in the stem position.
So now, if I want to create a speech bubble with the stem on the right side (75% of the bubble width) I create a tag like this:
<p class="bubble bubble75">here is some content for the bubble</p>
While I can't position the stems at every possible position this way, having the 3 different options has proven sufficient so far. This is a good example of a design trade-off. I could create a hundred different classes and never use 90% of them, or I could create just 3 and get a good-enough position 99% of the time.
Here's a snippet of my CSS that shows more clearly what I'm talking about.
.bubble { position: absolute; width: 44%; padding: 2%; text-align: center; background: #FFFFFF; border: #000000 solid 3px; font-family: 'Sniglet', sans-serif; line-height: initial; color: #000000; box-sizing: content-box; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; -webkit-border-radius: 20px; -moz-border-radius: 20px; border-radius: 20px; } .bubble:after { content: ''; position: absolute; border-style: solid; border-color: #FFFFFF transparent; display: none; width: 0; z-index: 1; box-sizing: initial; -moz-box-sizing: initial; -webkit-box-sizing: initial; border-width: 21px 7px 0; bottom: -21px; margin-left: -12px; } .bubble:before { content: ''; position: absolute; border-style: solid; border-color: #000000 transparent; display: none; width: 0; z-index: 0; box-sizing: initial; -moz-box-sizing: initial; -webkit-box-sizing: initial; border-width: 25px 9px 0; bottom: -27px; margin-left: -14px; } .bubble25:after { left: 25%; display: block; } .bubble25:before { left: 25%; display: block; } .bubble50:after { display: block; left: 50%; } .bubble50:before { display: block; left: 50%; } .bubble75:after { display: block; left: 75%; } .bubble75:before { display: block; left: 75%; }Make sure you check out John Clifford's Bubbler to make your own bubble CSS. Speech bubbles can be a welcome addition to any web site.
Amphibian.com comic for August 18, 2014 |
No comments:
Post a Comment