I try to make a bubble which will be responsive no matter on user device and also it have a triangle on left site.
How it should looks like:

What I tried:
HTML:
.responsive-bubble {
position: relative;
display: inline-block;
max-width: 80%;
min-width: 80%;
min-height: 1.5em;
padding: 20px;
background: #ebebeb;
border: #ebebeb solid 4px;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
border-radius: 0px;
border-style: solid;
float: right;
}
.responsive-bubble:before {
content: "";
position: absolute;
bottom: calc(89% - 3px);
left: calc(-4% - 3px);
border-style: solid;
border-width: 18px 18px 0;
border-color: #7F7F7F transparent;
display: block;
width: 0;
z-index: 0;
}
<div class="responsive-bubble">“And here comes some really long text which doesnt mean anything however it have to be long to provide a lot of characters and see how this buble works when long text is here and even when nearly no text is here and so on. I hope you know what I mean
So i am adding few additional words! So i am adding few additional words! So i am adding few additional words!”</div>
<div class="responsive-bubble">“Some shorter text come here to see how it looks when it's not so many text HERE! Some shorter text come here to see how it looks when it's not so many text HERE!”</div>
<div class="responsive-bubble">“Some shorter text come here to see how it looks when it's not so many text HERE!”</div>
What doesn't work:
It looks like bubble it self is responsive correctly, but I have problem with triangle on left site, it's no on right position depend on bubble.
DEMO:
For demo I changed border and so on just to provide more details:
https://jsfiddle.net/jkdurdjr/2/
Is here anyone who can tell me what I'm doing wrong?
The question that I linked in comments is a bit too complex for your case and it needs to be adapted a lot to fit your case. There is a much simpler solution for your case and so I'm adding it separately.
There is simply no need to use calc functions for positioning the arrow here. All that is needed is for the arrow to be positioned with respect to the top and the left based on its dimensions and that of its parent. Set top as -4px where -4px is needed to move the element up by no. of pixels equal to the border-top of its parent. Generally when children are added, it gets positioned below the border of the parent and so we need to offset for it. Similarly the offset needs to be done for the left border of the parent also + the entire arrow needs to be visible and so we offset it to the left by -22px which is nothing but the (size of the arrow (it's border width) + the left border of parent) * -1.
.responsive-bubble {
position: relative;
display: inline-block;
max-width: 80%;
min-width: 80%;
min-height: 1.5em;
padding: 20px;
background: #ebebeb;
border: #ebebeb solid 4px;
border-radius: 5px;
border-color: #ebebeb;
border-style: solid;
float: right;
margin-bottom: 10px;
}
.responsive-bubble:before {
content: "";
position: absolute;
top: -4px; /* just set it w.r.t to top, where the value is negative of border-top */
left: -22px; /* this needs to be inverse of border-width of this element + border-left of parent */
border-style: solid;
border-width: 18px 18px 0;
border-color: #ebebeb transparent;
display: block;
width: 0;
z-index: 0;
}
<div class="responsive-bubble">“And here comes some really long text which doesnt mean anything however it have to be long to provide a lot of characters and see how this buble works when long text is here and even when nearly no text is here and so on. I hope you know what I mean
So i am adding few additional words! So i am adding few additional words! So i am adding few additional words!”</div>
<div class="responsive-bubble">“Some shorter text come here to see how it looks when it's not so many text HERE! Some shorter text come here to see how it looks when it's not so many text HERE!”</div>
<div class="responsive-bubble">“Some shorter text come here to see how it looks when it's not so many text HERE!”</div>
I changed your CSS style and it looks as you expected: https://jsfiddle.net/940vaade/
The main difference is in, bottom and left properties. They are based on your triangle dimensions (border-width property).
Notice I‘ve changed widths and heights (they are in em units, not px). Also, in your CSS, border radius for .responsive-bubble had different values (20px with prefixes, 0px without prefix).
You are very close, I changed the border-width and replaced bottom with top
.responsive-bubble:before {
content: "";
position: absolute;
top:0; // relative to top, not to the bottom
left: calc(-4% - 3px);
border-style: solid;
border-width: 25px 0 0 25px; // second 0 referrs to the right side, 3rd to the top
border-color: #7F7F7F transparent;
display: block;
width: 0;
z-index: 0;
}
fiddle: https://jsfiddle.net/jkdurdjr/9/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With