Chapter 1: IOS
Chapter Text
This is a texting system that works with any screen, and it keeps its readability if the skin ins't available, for ereaders and screenreaders
Let's start with a preview of the work skin, you can play with the browser size and turn off the work skin to see how it reacts:
Merlin: did you perform your own vanishing act or…
Arthur: Can’t make it tonight, sorry
Merlin: ??? u could have said earlier
Merlin: prat
Now here's the css you have to put in the work skin you're creating:
#workskin .box { max-width: 320px; margin-bottom: 20px; margin-left: auto; margin-right: auto; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }
This is the space you're defining for the text to appear. The max width makes sure it doesn't go beyond a mobile size. Margin-left+margin:right auto makes sure it's centered in the window (you can delete one and edit the value of the remaining to change where it lands. The font for the texts is defined here too.
#workskin .insidetext { display: inline-block; overflow: hidden; white-space: nowrap; font-size: 13px; margin-left: 2px; margin-right: 2px; } #workskin .get, #workskin .get2, #workskin .send, #workskin .send2 { position: relative; padding: 12px 20px 7px 20px; border-radius: 30px; width: min-content; color: #000; background: #e5e5ea; margin-bottom: -5px; } #workskin .get, #workskin .get2 { margin-left: 0; } #workskin .send, #workskin .send2 { background: #1289fe; color: #fff; margin-right: 0px; } #workskin .send2, #workskin .get2 { margin-bottom: -15px; }
This is what defines the text bubbles and how the text behaves inside it. They're put together so if you want to change the shapes you only need to do it once to affect them all. The repeated class names are there for the ways they vary (ie, .send and .send2 have a different background color than .get, and are aligned to the right instead of left.
#workskin .get:after, #workskin .send:after { content: ""; position: absolute; width: 2em; height: 1.5em; } #workskin .get:after { left: -2em; bottom: 0; border-right: 0.5em solid #e5e5ea; border-bottom-right-radius: 1em 0.5em; } #workskin .send:after { right: -2em; bottom: 0; border-left: 0.5em solid #1289fe; border-bottom-left-radius: 1em 0.5em; }
These are the arrows of the text bubbles. You can change them for other shapes, as it's possible to see in the next chapter.
#workskin .hide { display: none; }
This is the class that hides text in the skin, so you can have complementing content for accessibility. It works so this:
Merlin: did you perform your own vanishing act or…
becomes this when the work skin is off:
Merlin: did you perform your own vanishing act or…
Now on the html side this looks like:
<div class="box">
<p class="get">
<span class="insidetext"><span class="hide"><b>Merlin: </b></span>did you perform your own vanishing act or…</span>
</p><p class="send">
<span class="insidetext"><span class="hide"><b>Arthur: </b></span>Can’t make it tonight, sorry</span>
</p><p class="get2">
<span class="insidetext"><span class="hide"><b>Merlin: </b></span>??? u could have said earlier</span>
</p><p class="get">
<span class="insidetext"><span class="hide"><b>Merlin: </b></span>prat</span></p>
</div>
"insidetext" is the span class for the text to fit properly inside the bubble. what's on the "hide" only shows without the work skin. "get2" is the version of the speech bubble without the arrow, so you can pile several texts from the same person.
The workskin as it is works fine if you want one line of text, but if it goes for too long this happens:
Merlin: did you perform your own vanishing act or did you maybe fall and hit your head somewhere?
To make the lines break you have to input them manually into the text. The easier way to do this is add < br > where you want it to cut, but this will force the break even when the workskin is turned off.
To make sure the lines break where you want them with the workskin on while making sure it stays as one line when it's off, you need to add this to your css:
#workskin .break { display: block; }
On the html this will look like:
<p class="get">
<span class="insidetext"><span class="hide"><b>Merlin: </b></span><span class="break">did you perform your own vanishing act or did </span>you maybe fall and hit your head somewhere?</span>
</p></div>
You use the class "break" on the beginning on the line you'll be cutting off, and close the span class where you want the break to happen. The end result will look like this:
Merlin: did you perform your own vanishing act or did you maybe fall and hit your head somewhere?
If you're looking for a more complete texting visual, I 100% recommend the guide How to Make iOS Text Messages on AO3 by @CodenameCarrot and @La_Temperanza. They have a complete texting window look which includes:
Merlin: Clotpole
Arthur:I knew I was a special case
Read 8:48 PM
1 mar at 19:09
Merlin is typing...
So do check out that guide if you want all of these amazing stuff, and many more!
Here, next chapter is about bubble speech for Signal
Chapter 2: Signal / Facebook / Messenger
Summary:
Signal text messages + Messenger
Chapter Text
Same as before, this works on any screen, and it keeps its readability if the skin ins't available, for ereaders and screenreaders
This template is set for Signal, but Facebook's Messenger is very similar, if you exclude the icons. You just need to change the bubble colors to the ones I provide further down.
Let's start with a preview of the work skin, you can play with the browser size and turn off the work skin to see how it reacts:
Merlin: clotpole
Merlin: prat
Merlin:you're a wonder, really
Arthur:I knew I was a special case
Merlin:you're special alright
Now here's the css you have to put in the work skin you're creating:
#workskin .box { max-width: 320px; margin-bottom: 20px; margin-left: auto; margin-right: auto; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } #workskin .insidetext { display: inline-block; overflow: hidden; white-space: nowrap; font-size: 13px; margin-left: 2px; margin-right: 2px; }
This is the space you're defining for the text to appear. The max width makes sure it doesn't go beyond a mobile size. Margin-left+margin:right auto makes sure it's centered in the window (you can delete one and edit the value of the remaining to change where it lands. The font for the texts is defined here too, and how the text fits in the bubles.
#workskin .signalSend, #workskin .signalSendBottom, #workskin .signalSendTop, #workskin .signalSendMiddle, #workskin .signalGet, #workskin .signalGetBottom, #workskin .signalGetTop, #workskin .signalGetMiddle { position: relative; padding: 12px 20px 7px 20px; border-radius: 15px; width: min-content; background: #4162d8; color: #fff; margin-right: 0px; margin-bottom: -5px; } #workskin .signalSendTop, #workskin .signalSendMiddle, #workskin .signalGetTop, #workskin .signalGetMiddle { margin-bottom: -17px; } #workskin .signalGet, #workskin .signalGetBottom, #workskin .signalGetTop, #workskin .signalGetMiddle { margin-left: 0; color: #000; background: #e5e5ea; }
This is what defines the text bubbles. The classes are grouped together so if you want to change the shapes you only need to do it once to affect them all. The repeated class names are there for the ways they vary (ie, .signalGet has a different background color and bottom margin than .signalSend, and is aligned to the right instead of left.
for standard Messenger colors, you just need to change background: in .signalGet to #f2f2f2 and in .signalSend to #62b5eb
#workskin .signalSendTop:after, #workskin .signalSendMiddle:after, #workskin .signalSendMiddle:before, #workskin .signalSendBottom:before, #workskin .signalGetTop:after, #workskin .signalGetMiddle:after, #workskin .signalGetMiddle:before, #workskin .signalGetBottom:before { content: ""; position: absolute; bottom: 0; right: 0; width: 15px; height: 15px; background-color: #4162d8; } #workskin .signalSendMiddle:before, #workskin .signalSendBottom:before { top: 0; right: 0; } #workskin .signalGetTop:after, #workskin .signalGetMiddle:after, #workskin .signalGetMiddle:before, #workskin .signalGetBottom:before { left: 0; width: 15px; height: 15px; background-color: #e5e5ea; } #workskin .signalGetMiddle:before, #workskin .signalGetBottom:before { top: 0; left: 0; }
These are the squared arrows of the text bubbles. The before are for the arrows on the top, the after are for the bottom.
For messenger, you need to change the colors just as before.
The classes are named after the app, who's sending them and the position. So 'signalGetTop' is the first message in a row the person on the phone is receiving. Do feel free to change these names, of course, but make sure they match wherever they're repeated.
#workskin .hide { display: none; }
Same as last time, this is the class that hides text in the skin, so you can have complementing content for accessibility. It works so this:
Merlin:you're special alright
becomes this when the work skin is off:
Merlin: you're special alright
Now on the html side this looks like:
<div class="box">
<p class="signalGetTop">
<span class="insidetext"><span class="hide"><b>Merlin: </b></span>clotpole</span>
</p><p class="signalGetMiddle">
<span class="insidetext"><span class="hide"><b>Merlin: </b></span>prat</span>
</p><p class="signalGetBottom">
<span class="insidetext"><span class="hide"><b>Merlin:</b></span>you're a wonder, really</span>
</p><p class="signalSend">
<span class="insidetext"><span class="hide">Arthur:</span>I knew I was a special case</span>
</p>
<p class="signalGet">
<span class="insidetext"><span class="hide"><b>Merlin:</b></span>you're special alright</span>
</p>
</div>
To make sure the lines break where you want them with the workskin on while making sure it stays as one line when it's off, you need to add this to your css:
#workskin .break { display: block; }
On the html this will look like:
<p class="signalGetTop"><span class="insidetext"><span class="hide"><b>Merlin: </b></span><span class="break">did you perform your own vanishing act or did</span> you maybe fall and hit your head somewhere?</span></p>
You use the class "break" on the beginning on the line you'll be cutting off, and close the span class where you want the break to happen. The end result will look like this:
Merlin: did you perform your own vanishing act or did you maybe fall and hit your head somewhere?
Chapter 3: WhatsApp Texting
Summary:
Whatsapp solo and group texting
Notes:
(See the end of the chapter for notes.)
Chapter Text
Same as before, this works on any screen, and it keeps its readability if the skin ins't available, for ereaders and screenreaders. First solo conversations:
Merlin: im feeling special - 17:39
Also, you know that's kind of rude - 17:41
Arthur: im feeling special - 17:39 - Message Seen
how are you this creative with insults? - 17:41 - Message Received
Also, you know that's kind of rude - 17:41 - Message Sent
Now here's the css you have to put in the work skin you're creating:
#workskin .window { max-width: 320px; margin-left: auto; margin-right: auto; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; margin-bottom: 20px; } #workskin .inside { white-space: nowrap; margin-right: 5px; color: #000; font-size: 13px; } #workskin .time, #workskin .timeSend, #workskin .timeGet { white-space: nowrap; font-size: 10px; } #workskin .timeSend { color: #6a7d4f; } #workskin .timeGet { color: #808080; } #workskin .seen:after { content: url("https://i.ibb.co/zVTTd25/seen.png"); } #workskin .recieved:after { content: url("https://i.ibb.co/V9Gd7R3/recieved.png"); } #workskin .sent:after { content: url("https://i.ibb.co/kxFkGbT/sent.png"); }
window is the space you're defining for the text to appear. The max width makes sure it doesn't go beyond a mobile size. Margin-left+margin:right auto makes sure it's centered in the window (you can delete one and edit the value of the remaining to change where it lands. The font for the texts is defined here too.
inside is the text inside the bubble. time (plus its variants, Send and Get) define the timestamp and the sent/recieved/sent the read icons.
#workskin .whatsSend, #workskin .whatsSend2 { white-space: nowrap; position: relative; float: right; border-radius: 5px; width: min-content; background: #dcf4bd; box-shadow: 1px 1px 0 #b3b3b3; padding: 4px 5px 5px 8px; margin-bottom: -8px; margin-left: 100px; } #workskin .whatsSend2 { margin-top: 11px; } #workskin .whatsSend:before { border-right: 11px solid transparent; border-top: 11px solid #b3b3b3; content: ""; position: absolute; right: -11px; top: 0px; } #workskin .whatsSend:after { border-right: 12px solid transparent; border-top: 11px solid #dcf4bd; content: ""; position: absolute; right: -10px; top: 0px; } #workskin .whatsGet, #workskin .whatsGet2 { display: inline-block; white-space: nowrap; position: relative; margin-left: 0; border-radius: 5px; width: min-content; background: #fdfdfd; border-top: 0.5px solid #f2f2f2; border-left: 0.5px solid #f2f2f2; box-shadow: 1px 1px 0 #b3b3b3; padding: 4px 5px 5px 8px; margin-bottom: -8px; margin-right: 100px; } #workskin .whatsGet2 { margin-top: 11px; } #workskin .whatsGet:before { border-left: 11px solid transparent; border-top: 11px solid #b3b3b3; content: ""; position: absolute; left: -11px; top: 0px; } #workskin .whatsGet:after { border-left: 12px solid transparent; border-top: 11px solid #fdfdfd; content: ""; position: absolute; left: -10px; top: 0px; }
whatsSend/Get are the bubbles with arrows. The version with 2 (ex whatsGet2) are the ones without the arrows.
the classes with :beforedefine the arrow's shadow, and the ones with:after</> define the arrow itself.
#workskin .hide { display: none; }
Same as before, this is the class that hides text in the skin, so you can have complementing content for accessibility. It works so this:
Merlin: im feeling special - 17:39
Arthur: im feeling special - 17:39 - Message Seen
becomes this when the work skin is off:
Merlin: im feeling special - 17:39
Arthur: im feeling special - 17:39 - Message Seen
Now on the html side this looks like:
<div class="window">
<p class="whatsGet">
<span class="inside"><span class="hide">Merlin: </span>im feeling special</span>
<span class="hide"> - </span>
<span class="timeGet">17:39</span>
</p><p class="whatsGet2">
<span class="inside">Also, you know that's kind of rude</span>
<span class="hide"> - </span>
<span class="timeGet">17:41 </span>
</p><p class="whatsSend"><span class="hide">Arthur: </span> <span class="inside">im feeling special</span><span class="hide"> - </span><span class="timeSend">17:39 <span class="seen"></span><span class="hide"> - Message Seen </span></span></p>
<p class="whatsSend2">
<span class="inside">how are you this creative with insults?</span>
<span class="hide"> - </span>
<span class="timeSend">17:41 <span class="recieved"></span><span class="hide"> - Message Received </span></span>
</p><p class="whatsSend2">
<span class="inside">Also, you know that's kind of rude</span>
<span class="hide"> - </span>
<span class="timeSend">17:41 <span class="sent"></span><span class="hide"> - Message Sent </span></span>
</p>
</div>
Now with group chats all you have different are the sent messages:
Gwen :
im feeling special alright - 17:39
+351 987 983 254 ~Gwaine :
aren't you always - 17:41
Morgana :
she is - 17:39
Lancelot :
always, indeed! - 17:41
The new css:
#workskin .name, #workskin .newcontact, #workskin .name1, #workskin .name2, #workskin .name3, #workskin .name4 { font-size: 12px; margin-bottom: -18px; } #workskin .name1 { color: #ffa366; } #workskin .name2 { color: #4162d8; } #workskin .name3 { color: #69b3a9; } #workskin .name4 { color: #f195b4; } #workskin .newcontact { color: #b3b3b3; }
I've provided 4 colors for the names, but if you want more, just copy and paste one of the individual rows and change the color inside. don't forget to add it to the bundle of classes. If you're looking for html colors, this is a good place to get them.
Now on the html side this looks like:
<p class="whatsGet"><span class="name1">Gwen</span><span class="hide">: </span><br /><span class="inside">im feeling special alright</span><span class="hide"> - </span><span class="timeGet">17:39</span></p>
<p class="whatsGet"><span class="name2">+351 987 983 254</span><span class="newcontact"> ~Gwaine</span><span class="hide">: </span><br /><span class="inside">aren't you always</span><span class="hide"> - </span><span class="timeGet">17:41</span></p>
I've also added the bubble for chat changes, that works for time, group name, and people leaving the chat:
TODAY
Merlin changed the subject to "Dollophead"
Arthur left
On the css work skin you add:
#workskin .subject { text-align: center; font-size: 12px; display: inline-block; white-space: nowrap; border-radius: 5px; width: min-content; background: #e1f5fe; border-top: 0.5px solid #f2f2f2; border-left: 0.5px solid #f2f2f2; box-shadow: 1px 1px 0 #b3b3b3; padding: 4px 5px 5px 8px; margin-bottom: -8px; margin-top: -8px; }
And on the hmtl side it looks like this:
<center>
<p class="subject">TODAY</p>
<p class="subject">Merlin changed the subject to "Dollophead"</p>
<p class="subject">Arthur left</p>
</center>
Notes:
if you have another message system you'd like to use and can't find, let me know!
emiwrimo on Chapter 1 Fri 05 Feb 2021 11:34AM UTC
Comment Actions
lordvoldemortsnipple on Chapter 1 Sun 21 Feb 2021 10:51PM UTC
Comment Actions
emiwrimo on Chapter 1 Fri 05 Mar 2021 04:51AM UTC
Last Edited Fri 05 Mar 2021 05:47AM UTC
Comment Actions
lordvoldemortsnipple on Chapter 1 Fri 05 Mar 2021 10:54AM UTC
Last Edited Fri 05 Mar 2021 11:01AM UTC
Comment Actions
lordvoldemortsnipple on Chapter 1 Fri 05 Mar 2021 11:00AM UTC
Last Edited Fri 05 Mar 2021 11:01AM UTC
Comment Actions
emiwrimo on Chapter 1 Sat 09 Sep 2023 06:23AM UTC
Comment Actions
MyLittleOnes on Chapter 1 Wed 17 Aug 2022 07:15AM UTC
Comment Actions
lordvoldemortsnipple on Chapter 1 Thu 15 Sep 2022 11:48PM UTC
Comment Actions
Auroha on Chapter 1 Thu 15 Sep 2022 03:44PM UTC
Last Edited Thu 15 Sep 2022 03:51PM UTC
Comment Actions
lordvoldemortsnipple on Chapter 1 Thu 15 Sep 2022 11:47PM UTC
Comment Actions
ColourfulSpringSilverFlame on Chapter 1 Tue 16 Jan 2024 07:47PM UTC
Comment Actions
brownleaves on Chapter 1 Fri 01 Aug 2025 11:50PM UTC
Comment Actions
Eumppappas_Lost_Toy on Chapter 2 Sat 26 Apr 2025 10:31PM UTC
Comment Actions
tjreadthis on Chapter 3 Sat 16 Jul 2022 04:21AM UTC
Comment Actions
lordvoldemortsnipple on Chapter 3 Thu 15 Sep 2022 11:48PM UTC
Comment Actions
jackalopc on Chapter 3 Wed 12 Feb 2025 04:30PM UTC
Comment Actions