Tumgik
#and yeah welcome from a person long blocked by so-called update accounts
jlf23tumble · 9 months
Note
I find it so interesting on Louis' current public persona. He's literally "single" and just touring. The fact almost every article is just his performance which is shocking because it is. Like, I have my hopes up that there will be a groupie situation but its just merely Louis being Louis, being a stoner, rocking his songs, enjoying his company and co. Almost every local who enjoyed Louis' music sees him as a rockstar and a dad/dy (which is great, no more bls pls. Also did u know HLD Twitter blocked every account who hated the loubies tweet? Anyways, just wanted to share cuz its funny.) Most indie audience are taking a liking to him as well. I just love his growth. BDE wise , BD wise and confidence wise.
Speaking of which... do you know Top!Louis Power play fics? I don't know after seeing this ¡ clip , kinda insensitive sorry but damnnnnnnnn every one just obeyed him like yes sir 😫😫😫😫
https://twitter.com/harrysamother/status/1685453310436970496?t=ZnT8ybeq7PkKBnvdK51hhg&s=19
That link, whew!
Hmmm, just going by tags, these three have it!
Leather Baby, zanni_scaramouch, 3.6k
Warm Glow that Lingers On, blaaake, 8.5k
Good Boys Go to Hell, larry_hiatus, 8.6k
2 notes · View notes
effinsusie · 3 years
Text
Day 7: Purple
Tumblr media
CLASS ACT ch 2 on A03
Summary: School’s finally out.  Rated T+
Their tangled bodies fell together in a heap of sweaty exhaustion, clinging on as the world around them slowly fell back into place. Kagome's head finally stopped swimming, but she was still catching her breath, and the heavy rise and fall of his scalding chest beneath her cheek told her he was as well.
When the last stars sparkled from her vision; the fingers buried in thick, wild strands gave a gentle tug that forced her to look up.
"Look at you," she croaked, nuzzling deeper in his embrace, "So smug. It just slipped."
"So much for your restraint."
Those long, talented fingers lazily worked through the knots he'd put there. His own hair was no better, and she braved the arrogance she spent the last two hours feeding just to take another glimpse of the rare, disorderly sight.
Too rare, she sighed. At least lately.
She rolled on top of him to put her face in his own; the challenge in her eyes caused his eyebrow to lift.
Soft lips drifted to his ear. "Bet you can't make me say it again," she whispered before heatedly kissing the abused flesh, sucking on his lobe.
Warm hands smoothed over her backside, squeezing roughly when she rotated her hips. He rocked into the friction that stirred his arousal once again, releasing a guttural groan when skillful lips moved down his neck.
"Hn, I have worked too long around children to not identify such a childish ploy, Miss Higurashi."
Lean legs parted, pinning him between her knees and she rested her forehead heavily atop his own. Blue eyes looked innocently into his, batting dark lashes against his heavy lids.
"Does that mean you are going to discipline me, Principal Taisho?" she taunted, squirming into him again.
She let out a delightful shriek when he made firm contact with her ass, which became a pleasured gasp as he soothed the erotic sting with the offending palm. She threw her head back, encouraging the attention as he feasted on her throat to a chorus of breathy moans and sighs.
When she tried to rise up on her knees, a swift maneuver toppled her, so she was trapped half-way beneath him.
"You are in for a long night," he promised lowly. "I will ensure you are hydrated."
As he tried to pry himself off, she clung to him in protest. He returned for a kiss.
"I will not have you passing out from exhaustion before I am through with you."
Another slap reddened her other cheek, and she finally let him rise, rolling onto her back with a satiated smile.
Scooting to sit against her headboard, Kagome watched on fondly as he took a couple of tall glasses into the bathroom and busied himself at the sink. His chiseled body was covered with bitemarks and bruises, and she admired her handiwork in the various shades of purple littering his long, pale form.
"I meant it, you know."
He looked up from the glass he was filling, lips quirked. "I know."
The smile they shared relayed much more than the lust they'd spent the better part of the evening celebrating. But the circumstances of their relationship forced too much to go unsaid as it was.
"I've really missed you this week."
The hint of sadness in her voice reflected in his gaze, making her feel guilty.
"I will endeavor to make the next more accommodating, lest we find ourselves both seeking employment."
He was only half-joking, but it was clear that ignoring their desires at work was impossible if they couldn't find at least some time together during the week.
She hated those rules, but she loved this job. And she had only just started there. She didn't know if his tenor made the situation better for him, or worse.
"Maybe me, but they won't fire you."
"I am your superior," he said, and shut off the sink. "I am held to a higher standard."
"Don't think that's not how I'll plead my case if we get caught, either." She grinned cheekily as he walked back in the room, a full glass of water in each hand.
"Don't think I will not support those claims."
She was only kidding, but Kagome truly believed she was the only one in danger of getting put up on the chopping block if their colleagues found out about them. At the very least, his job would be spared.
His reputation, on the other hand...
Not that hers would be any better, but that was the more likely consequence of their torrid little affair.
At least, she had to believe it was. She didn't know if she could carry on like this if she thought their actions might ruin him. Speaking of which...
"I meant to ask; did you get ahold of Kagura?"
He rounded the bed carefully with his cargo, looking too stoic not to be uncomfortable with the topic.
He'd pointedly avoided discussing her, though she suspected it was for as his benefit just as much as hers. But enough time had passed, and she didn't want to avoid anything when it came to him.
She'd proven that just thirty minutes ago.
"Unfortunately, I missed her at pick up this afternoon- despite the messages I left."
He handed her a glass and took a seat on the edge of the bed while she greedily gulped it down.
"I called three times, and she has yet to respond," he said, and paused halfway to bringing the water to his lips. "Though considering how we left things, it is not entirely unexpected."
Seeing how much this daunted him, she felt guilty for troubling him with it. But she knew he would have wanted her to.
She began rubbing his back supportively.
"I hope she does, for Rin's sake. You're her daughter's principal; she can't avoid you forever."
He sighed, placing his empty glass next to hers. "You are right, of course, but the wounds are still fresh." At her insistence, he stretched out beside her on the bed, pulling her close as she happily nuzzled into the embrace.
"Regardless, if need be, I shall pay her a visit. Though I hope it does not come to that."
"Me too." She smiled deviously, sliding her body over his. "But I have to say; it's really sexy how you go above and beyond for your students."
Mischief returned to his eyes, staring back at her through sodden, silver bangs. She gyrated, hands smoothing over the planes of his broad chest as he arrested her arms in his grip.
"Let us not forget all I do for the teachers," he rumbled, craning forward.
Before their lips met, she pushed him back.
"I hope I'm the only one getting such special attention."
"Of course," he said, and leaned towards her again. This time, he landed a kiss.
When she pulled away after only a quick moment, he was not discouraged, affirming his hold and busying himself at the hollow of her throat.
"Hm, I don't know," she grinned. "I see you talking to Kaede an awful lot in the lounge..."
A muffled noise vibrated against her, making the hands at his shoulders clutch tightly.
"Merely a decoy," he removed his lips long enough to say, "to divert from the tawdry affair I am having with the pretty, young new hire."
She giggled as he returned to kissing her neck, but they became breathier as he grew more assertive.
"So scandalous," she gasped. "I'm starting to think you didn't hire me on account of my exemplary credentials."
"Of course, I did," he said, dragging his mouth over salty, heated skin. "Though I must admit, that was not the reason I insisted on taking you to lunch on your first day."
She feigned incredulity, forcing him onto his back.
"You mean, you don't take all the new teachers to the nicest restaurant in town to welcome them aboard?"
"No." He kissed her again. "Nor do I invite them to my personal residence for celebratory drinks, offer to help them move into their new apartment or... any of the numerous events that took place afterward."
She rested her full weight atop him, batting innocent blue eyes in his face once again.
"Except Kaede," she asserted.
She shrieked when he flipped them effortlessly, a mixture of giggles and screams as he pinned her beneath his body and let her punishment finally commence.
They continued long into the night, along with a myriad of other noises that made him glad he got her hydrated.
TBC
***
A/N: That's SessKag Week! I wish I could have given you guys (and myself) closure on all these stories, but I'm actually pretty syked I managed to post everyday. I couldn't quite make it last year, and I did not think I'd have more than 3 days to contribute when the week began. I was literally writing until the moment I posted on these, so it was pretty exciting! I learned a lot about what I can get done if I really push, and don't worry about perfection (or whatever my version of that is lol) So, I have this story and Greener Pastures to finish, along with another installment to Transparent (Opaque). Which would you like to see first? I'll see what i can do.
And for those of you screaming WTF? FINISH RENDEZVOUS ALREADY! or UPDATE VICE; don't worry! I did not abandon them. I was just trying to get through this week, and then I swear I will get back to those. Sometimes space from a story makes it better, and i think you're gonna be glad i let it settle.
Thanks for reading!  I have a ton to catch up on.
Oh yeah, and Feudal Connection is having their Inuyasha awards rn on Tumblr. So you can go vote for the fics and art you like for a bit longer.
14 notes · View notes
adenei · 3 years
Text
Auror 99 - Chapter 3
A/N: Feels weird knowing I didn’t post anything yesterday (literally, nothing), BUT I’ve been doing a lot of writing. I was finally able to get chapter 3 onto paper! For those of you who dropped me some prompts, I’m not ignoring them, but do know it’s going to be a bit before I get back to those as I really want to see this story unfold first. Thanks for your understanding!
*************************
Chapter 3: Bonding
“So...do you mind if we take a look at the cases that are already outstanding on Gerteso?” Hermione asked Amy after she watched Ron leave with Jake. She was only slightly worried about him pairing up with Jake. He didn’t seem like the most...reliable of detectives on first glance.
“Oh, yes, of course!” Amy said as she pulled out a pile full of case files. She began going through each one, and Hermione was noticing a pattern.
“Gerteso doesn’t seem to hang on to each of these identities for very long. And he only stole a minimal amount from their bank accounts. Almost nothing to make it significant. Don’t typical identity theft cases open up multiple accounts and try to liquidate a person’s funds for their own gain?” Hermione asked Amy.
Amy pulled some of the files back and reviewed them. “Huh. You’re right. I’m not sure how we missed that before.” Amy looked a little more closely. “He even got a hold of their social security numbers, but never attempted anything with it. What do you think it could mean?”
Hermione furrowed her brow even more. “Is there any correlation between the victims?” She and Amy were reviewing the various cases. “The bank. It’s the same across all the cases!”
Amy grabbed some the files and cross referenced. “Ugh, this is the last time I trust Jake with the paperwork. How did he not catch this?! He really is normally better than this. Well, we’ve got a lead now! Charles, look.” Boyle came over when Amy called his name with Harry trailing behind him. 
“Whoa, Amy, Sterling National Bank? Do we know which one?” Boyles asked.
“It’s….the one two blocks from here!” Amy said looking at Boyle.
“Jason and I can go check it out. See if any of the tellers or the guards noticed anything off.”
“Great, Charlotte and I will comb through these to see if there’s any added correlation of when these took place,” Amy said, clearly throwing herself into work mode.
“Excellent! Jason, come with me,” Boyle said, grabbing his jacket. Harry looked at Hermione, making sure she was okay before following Boyle.
Amy and Hermione set to work, writing down the dates and ordering the case files by bank visit instead of the date they were filed with the precinct. “I can’t believe I didn’t think to do this to start with,” Amy said regretfully. “Captain Holt is going to be so upset with me. How could I let myself get so distracted lately?” She shook her head. 
“Um, is everything alright?” Hermione asked.
“What? Oh, yeah, it’s nothing. Just getting over a breakup that’s all.” Amy sighed.
“I’m sorry. Was it a bad one?” 
“No, no! It was actually needed. I just wasn’t into him at all..” Amy trailed off and glanced over at Jake’s empty desk. Hermione looked in the same direction to see what she was looking at. 
Maybe this is the perfect segue to ask about Jake; make sure Ron’s with a decent partner, she thought. “So, tell me about Jake,” Hermione said, trying to change the subject away from her breakup.
“Jake? What do you want to know?” Amy asked a bit skittishly. She contemplated Charlotte for a moment before making the connection. “If you’re worried about Nolan, don’t be. Jake has an unconventional way of doing a lot of things, but he really is a brilliant detective! You can trust him. Are you and Nolan primary partners on the force?”
“You could say that,” Hermione said. “I just wasn’t sure how serious he was. I tend to worry a bit too much about things, I guess.”
“Me too, but I wouldn’t worry about that,” Amy smiled genuinely at her. “Shall we compare dates, see if we find anything?”
“Sure,” Hermione said, thinking how she really liked her new temporary partner. 
*********************
Harry and Charles checked not only the closest Sterling National Bank to the precinct, but also the other two nearby, to no avail.
“I don’t get it!” Charles said with a disappointed look on his face. “Three banks, and nothing out of the ordinary was seen. Either Gerteso has several accomplices, or he’s incredibly good at disguises.”
That got Harry thinking: the likelihood of an invisibility cloak was slim, but disillusionment charms weren’t unheard of. It wouldn’t be the first time he and Ron had dealt with an elusive criminal because of them. But he couldn’t give that away yet to Boyle. “I doubt he’s got several accomplices. From what we’ve seen, he works alone. You might be onto the disguise thing, though,�� Harry told him.
“Yeah, but it doesn’t bring us any closer to catching this guy. It’s like one step forward and two steps back the entire case!” Boyle sighed in frustration. He put the keys in the ignition and began heading back to the precinct. “Amy’s not going to be happy about another deadend. Hopefully Jake can get something., or Rosa on surveillance duty”
“Let’s hope,” Harry agreed.
“Tell me about Nolan,” Boyle changed the conversation abruptly.
“What about him?”  Harry asked, watching Boyle’s body language carefully. He seemed protective and...slightly jealous? 
“Well, we protect our own, not that you and Nolan and Charlotte aren’t welcome or anything. Jake’s my best friend. I would never let anything happen to him in the field, so I want to make sure Nolan will have his back like I would.” Boyle was definitely posturing, and that amused Harry, but also concerned him. 
Was he a bad friend for not worrying about Ron in the same way? He shook the thought from his head. No, he just knew his friendship with Ron was stable. Plus, he was a brilliant auror that could hold his own in any situation, so he told Boyle as much.
“Nolan’s a solid guy. You won’t find a better, er, detective. He’s my best mate. Been by my side since we were eleven, so he’s loyal to a fault. No need to worry with him.”
“Good...good.” Boyle said nodding as they pulled up to the precinct. 
Ironically, they pulled in at about the same time Jake and Ron had also returned.
“Jake!” Boyle said, “Any luck? We hit another dead end, but maybe Amy and Charlotte made another break in the case upstairs.”
“We’ve got something, that’s for sure,” Ron muttered as Jake had that giddy look about him.
“Uh, Jake? Buddy? Where’d you guys go, you’ve got that look about you when you...” Charles said and then gave Ron and Harry looks. “Who’d you guys see?”
“Charles, it’s fine! We went to see Doug Judy. Let’s go upstairs and we’ll discuss more,” Jake clarified.
Charles looked affronted. “Jake! I should have known! You’ve never been able to pull away from his charm.” 
**************
“Good, you’re all back,” Captain Holt said. He came out of his office as the elevator dinged, and Jake, Charles, Harry and Ron walked out. “Everyone in the briefing room for an update.”
Once they’d all filed in, Captain Holt started by asking Amy and Hermione to start. “Santiago?”
“Charlotte and I went over the case files of the identity thefts again, and Charlotte found a pattern in the thefts.” Amy looked at Hermione to continue.
“Yes, it appears that even though all aspects of each victim’s identity were stolen, the only thing that was done as a result was stealing a minimal amount out of their bank accounts. No new credit cards, no major purchases, nothing of the sort,” Hermione went on. 
“All of the stolen money has come from accounts at Sterling National Bank. We reordered the case files based on when the money was taken, and Boyle and Cooper went to investigate,” Amy finished.
“Yeah, but unfortunately we didn’t get any new information. None of the tellers or the guards noticed the same person coming in or out to line up with the thefts,” Boyle reported.
“We even checked the other two banks in the area with no luck,” Harry added.
Holt nodded. “Peralta, any news from your informant?”
“Yeah, he said Gertie’s got a few hideouts around Brooklyn, not that he knew where, but he’s definitely working alone. He said his main target is the Woolworth building in Manhattan, but didn’t know when or why.”
Holt nodded his head and pursed his lips. “Diaz? Anything from your angle?”
“Nothing on the surveillance videos today, but if his target’s in Manhattan, I’ll widen the search tomorrow to some of those hole in the wall shops.”
“Well, it’s more than we had this morning. You’re all dismissed for the night. See you in the morning,” Captain Holt said as he walked out.
“Does anyone else feel like we’re no closer than we were when we started?” Diaz asked, as everyone nodded.
As they filed out back to their desks to grab their things, Jake asked Nolan, “So about tonight. Still on for Die Hard?”
Charles heard and immediately chimed in before Ron could answer. “Did I hear Jake suggest a bonding night? I’d watch Die Hard!” he said eagerly.
Rosa sniggered, “Come on, Charles, really? You jealous of Nolan?”
“What? No, of course not, Rosa!” Charles said as Harry tried to stifle his own laugh. “I just thought this would be a fun way to get to know our new partners,” he forged on. “Order some New York pizza, pick up some beer and just hang out.”
Amy piped up, “Actually, Charles has a point. What do you say, Jake?”
“I mean, sure, as long as we get to still watch Die Hard. But my apartment isn’t big enough for all of us…”
“You could come to our place. The, er, NYPD put us up in a two bedroom flat a few blocks from here. We’ve got plenty of space,” Ron offered.
Harry and Hermione looked at him in surprise. Jake, Amy and Charles all nodded in agreement. They all looked at Rosa, who reluctantly agreed.
“How does seven sound?” Ron asked as he scribbled down the address for them.
“I’ll bring the beer,” said Jake. 
“And I’ll get the pizza,” Boyle added.
“Charles, don’t order any of that weird shit you write about on your blog,” Rosa pointed out. “Better yet, I’ll order it, you pick me up at 6:30, and we’ll go together.”
“You don’t trust me?” Boyle asked as Rosa gave him a ‘are you really surprised’ look. “Okay, fair enough.
“I’ll bring some wine and snacks,” Amy said. “See you all tonight!”
Chapter 4 can be found here :)
18 notes · View notes
mystfanartgal · 3 years
Text
Welcome to my Imagination World Blog [Read first before you visit and then ask a question]
You woke up in a little dark area it was hard to see anything but you felt ..something soft?.. like you were laying on something but you got up anyways to try to look around carefully in the dark and you felt something on your hand ...a string...? You pull the string to light the room you were in but you look around this random room but then you realize you see a comfy couch probably you were laying on it?, a bookshelf full of books and games on the shelf, a small long table with drinks, snacks, and a desk along with a computer with a sticky note that says "If you reading this note Welcome you enter to my blog I know you just woke up to my comfy guess room area but worry not there is a door right behind you but unfortunately, it super locked because while you enter a room it will automatically close and if you came here by mistake without thinking just simply say to the door in a calm voice 'Please open the door I didn't mean to come here'. If the door doesn't open I'm sorry to say this you came here for a reason to probably to check out of my blog in curiosity or whats caught your eye to hope you enjoy your stay". But before you took the sticky note out on the computer screen but you hear a sound in the computer camera light-up red it's like it starts to record something but then you see a figure on the computer screen.
???: test test *the camera turn on then you see a person trying to fix the camera in a closer view* hello? do you hear my voice?
Tumblr media
you see a girl with long brown hair in a ponytail, wearing sunglasses, and a black sweater
Tumblr media
???: ah good it's working but this camera view is a little close?
Tumblr media
???: hmm let see *she checks her phone again to fix the right angle camera control*
Tumblr media Tumblr media Tumblr media
???: hehe okay oops too far from this view angle
Tumblr media Tumblr media Tumblr media
???: hehe *smile*
Tumblr media
???: oh well this is good enough of the camera view
[HeavenlyImagination: Well let me introduce myself my name is HeavenlyImagination but call me HeavenlyGal for short if you like or you prefer a different nickname to call me (don't you try to give me a weird nickname) go right ahead.
Tumblr media
[HeavenlyImagination]: Okay so this blog is a second account to the post of whatever in here of fandoms I'm into if it is from anime I watch & games I play or other stuff as well
Tumblr media
[HeavenlyImagination]: *ahem* anyways as for my main account is for my art blog also yes I'm an artist but at moment I haven't posted anything there lately because of art block & I'll post my art in the summer if you like to check it out of my main account be my guess [LINK HERE].
Tumblr media
[HeavenlyImagination]: oh before I forget if your curious here a list of what games I play
Tumblr media
she shows you a picture screenshot of a list of apps games on her phone
Tumblr media
[HeavenlyImagination]:  so here my app games list I play on my phone I'm really into and also yes I do play other games I sometimes play it on my PlayStation 4 & my switch so yeah anyways let get this started.
Tumblr media Tumblr media
[HeavenlyImagination]: So my first list is Touken Ranbu Pocket the Japanese version of this app called QooApp when I discover this Qooapp I think in my high school? Well, I didn't haven't the chance to play the whole thing yet either I only pick the starter sword is Kashuu Kiyomitsu he is my favorite sword sure the rest of the starter swords and other swords bois are the best and the most favorites and I think will try to play it the Japanese version if I get a chance to understand this game whatever I'm doing but I did check touken ranbu fandom wiki has a guide of people how to play the game on my phone. Oh also, I heard there is an English version YES I played it on my computer or my phone I'm level 20, plus leveling up my swords bois I have to be strong when they are in battle. also, I did saw the anime seasons one & two but I do remember they're going to be touken ranbu season 3? ugh man I love touken ranbu so damn much I'm a big fan.
[HeavenlyImagination]: Oh, also I do have a full teir maker lists of my favorite touken ranbu swords and other characters as well if you were wondering who is my favorite characters the most so here you go.
Tumblr media Tumblr media
[HeavenlyImagination]: My Second list is Twisted Wonderland Okay, soo when I discover twst from Twitter and Tumblr on an ad or a tweet/post with beautiful fan art or a screenshot it was super random to see from that game even though I haven't a clue what going on in my timeline on the internet and why twst was so popular. And from what I understand Is part of Disney in japan & Aniplex its a villain's world with beautiful hot boys in a boy's school but you might see a very familiar seven Disney villains while playing in the game stories. Yes it got me hook when I download it from last year on June 1st, yes I know it's Japanese version as well but I love playing it so damn much sure can't understand the language but worry not I found someone who translates of twisted wonderland game while playing it to understand of what's going in the game story and leveling up your twst boys in the lessons and battles anyways here the link who they are the translators are [AmiYoshiko]/[OtomeAyui]/[Shel_BB] they are super amazing people check them out and here is my favorite twst boy's list.
Tumblr media Tumblr media Tumblr media
[HeavenlyImagination]: My Second list is Obey me! BOI when I download this game on June 1st, 2020 (the same day I download twst) it was very close to Lucifer's Birthday but Oh man this game of obey me! with demons world hmmm I understand people love this game hehe.*Ahem* this too was super random in my timeline as well at Twitter/Tumblr on ad + fanart kinda caught my eye with a confusing face I was making soo this app game is a romance simulation and RPG card mobile game is a series of tasks and to choose how you wish to enjoy your life at Devildom even I thought the part of the task has an ALOT of stories I thought there were 30 stories but then I saw Obey me Twitter keep updating more stories to 50s main stories long or more but right now I'm in chapter 30 I'm sorta behind of the game story chapters but my god leveling up your favorite boys in the dancing battle to the normal and hard mode are super challenging. sooo here is my favorite characters list of obey me demons + angels boys.
Tumblr media Tumblr media
[HeavenlyImagination]: My Third list is the Fate/GO app game but I did watch first is Fate/Grand Order & the servent in the anime are very interesting I know there a lot more fate series anime I wish to watch but I only did watch it Fate Grand Order & Fate/Apocrypha that all to understand it to watch but as for the rest of fate series is kinda meh, to be honest. I don't remember when I download the fate/go app game and yeah I play it in the past but I stop in chapter 3 I think but pretty much didn't play much anymore I only did to the login of what new their + new servant even though I didn't get any new servent in the gotcha thing whatever it called to get the new servants.
Tumblr media Tumblr media Tumblr media Tumblr media
[HeavenlyImagination]: My Fourth list is the Genshin Impact is a very super POPULAR game of people who LOVE playing this game and the stories oh so good I'm trying my very best to understand the stories while playing the game by leveling up to fight the enemy by leveling up even though I'm so new at it. So when I started download genshin impact last year on Nov 29 when I discover its free download on PlayStation 4 & play store so you could say I play it for a little because I need time to play it slowly reason why well I haven't played it on my PlayStation 4 for the longest while soo yeah I need to update it. And as for the same for playing on mobile, I play it & stop playing it for a little bit. (the other reason why stop playing it I have online classes with homework assignments I have to do soo I'm a little behind on games update) but I love the Genshin characters and their amazing fighting power to fight the enemy and my god some bosses are tough to beat I understand you need ALOT of food while going to a fight with the enemy with lower hp is a no-no.
Tumblr media Tumblr media Tumblr media
[HeavenlyImagination]: My Fifth list is Granblue Fantasy soo I saw the anime season 1 but I haven't watched season 2 yet and as for the granblue fantasy mobile game is a little confusing for a bit at the beginning even though I play it while doing how to play tutorial of the story thing. And for the granblue characters with some of them, I'm familiar with, and as for the other granblue characters not so familiar because I'm behind of what news games + animes I haven't seen or saw yet. But I do remember there other granblue fantasy game I might get in the future Granblue Fantasy: Versus on PlayStation 4, I heard it's a popular game I think but I might be wrong though.
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
[HeavenlyImagination]: All right that all see you the next post I hope enjoy your stay see you all later
Tumblr media
*turn of the record camera off*
6 notes · View notes
Text
Scars - Part One (Fred Weasley x OC)
Author: @exquisitley-obsessed
Summary: Scarlett Black, daughter of Sirius Black, has been invited along with Harry and Hermione to the Weasley's Bungalow for the summer before their 5th year. Whilst nice in theory, Scarlett would normally be spending her summer in her father's empty, old flat and finds herself missing the familiarity of that dingy apartment, and feels estranged with the unrelenting love of the Weasley Household. Fred Weasley is the unlikely friend who she finds distracting her from her unique homesickness, and the two find themselves falling into something a little bit bigger and a little more complicated then they could've ever expected.
Word Count: 3412
Pairings: Fred Weasley x OC
Warnings: None
A/N: I’m writing this story on my wattpad account, so if you like it and want early updates then I suggest you go read it over there!
MY MAIN MASTERLIST
Tumblr media
It wasn't supposed to be like this. It was nice, arguably more than she deserved, but it wasn't supposed to be like this.
The girl watched as morning light strengthened along the walls, semi in denial that she was even awake. What light that did tumble in from the window was tainted somewhat green form the overwhelming amount of shrubbery outside - it wasn't supposed to be like that. She was used to a navy hum that would sporadically ache through her bruised and battered window, the one that didn't even open. But the one she had now did, and last night someone had thrown it open, unable to cope in the relentless summer heat, and now she could hear the birds as she awoke and even the chatter of her friends in the garden.
It was meant to be comforting, a sentiment that she was now somewhere safe and surrounded by people she loved - but all she seemed to feel was a dull lonely ache sitting in her chest.
"Fine. I'll get up." She whispered, it seemed she could ignore her consciousness no longer and so she sat up and turned to face the dreaded window and the promise that came with it. It was a perfect day, of course. It was day one of the summer holidays, the longest break you get from Hogwarts Wizardry School of Magic and it was late June. Of course, it would be perfect. The sun was sitting proudly in the sky and showed no sign of going anywhere nor weakening in its relentless heat. The green of the hills rolled up and down until they merged with the hazy blue horizon line. It was perfect and warm and welcome - and she hated it.
Looking down she was wearing a sweater that Molly Weasley had made for her last winter - another thing she didn't deserve. Not to mention the bed, though creaky and missing a few planks of wood, it was coated in more homemade blankets and ties of aged cloths, a thousand little scars of love. It seemed as though she were surrounded by so much warmth and kindness, and she didn't know what to do with it. The room was already empty, Hermione and Ginny had already made it downstairs for breakfast. Ginny, the name came with a twinge in her gut. This was her room that she was taking up space in, and she would be for nearly seven weeks.
Pulling on someone's blue sweatpants, the girl took several long breaths before she finally decided to brace the world. The 'world' being the hallway of the Weasley's Bungalow just outside Ginny's room, to which there was no one even there.
Day One, Scarlett thought as she began winding her way down a series of crooked steps, lowering herself closer and closer to the heart of the house, the bubbling kitchen and sitting room which the rest of the house appeared to be occupying. Day One.
The worst part about hating her stay here was the guilt that came with the hatred. She loved the Weasleys, not to mention the fact that both Harry and Hermione were here, it should be heaven for her. Scarlett didn't want to hate being at the Weasley's and in many ways, she didn't hate it here. But the alternative to spending her summer here was spending her summer in the dingy flat her father had somehow managed to buy for her before he was sent away.
In many ways, it was all she had of him, and even though her summer normally consisted of shunning herself away, sleeping her father's bed and quietly getting ahead in all her schoolwork - it was the only time she ever got to appreciate him. When your father is Sirius Black, that's not something you get to speak of casually with others, not even friends she'd realised. Even Harry Potter whom Sirius had taken a great liking to when they were in their third year couldn't seem to relate to how Scarlett felt.
"Scar!" Hermione smiled from where she was squashed between Ron and Harry at the kitchen table, all of them hunkered over a book. "You're awake! Come have a read of this!"
"Finally!" Ginny muttered, rolling her eyes as she shoved a spoonful of cereal in her mouth and leaning against the cabinets. "Are those my sweatpants?"
"Scar!" An overexcited voice tore through the blubber of the kitchen where the entire household, parents and siblings alike, appeared to be gathering - well, not everyone. The latest voice to call her attention luckily prevented Scarlett from having to respond to either party. It was Geroge who was her saviour, half-dressed in quidditch gear and holding a bat in his right hand. "We've got a game of quidditch but the numbers are odd!"
"Oh no," Scarlett muttered dryly.
"Please Scar. It's me versus Bill and Fred."
"George you can't play quidditch with four people."
"'Course y'can, don't be daft."
"George I'm not-"
"Did she say no?" Fred's voice echoed over the returned chatter of the kitchen only seconds before he appeared next to his twin. Fred too was dressed in moth-eaten quidditch year and was sporting an unfazed, dopey grin. "You automatically lose if she won't play Georgie." He proceeded to gloat to his twin as he leaned back against the doorframe, bending his head to the side as he didn't quite fit.
"Oh, no one told me those were the stakes." The sight of Fred appeared to awaken a competitive edge in Scarlett, she had always been closer with him than his brother, but purely in a friendly way. "Oh, George you should've said." Goerge positively gleamed at her change in heart and Scarlett quietly excused herself from the kitchen before slipping away into the early morning sunshine.
"I still don't understand how this works." Scarlett followed the twins looming statures out into the luminous field, squinting through the sun at their lean forms.
"Well, I 'suppose it's not really Quidditch, more of a race really." Fred hung back a bit to fall into step with Scarlett, standing to her right as to block out the sun for her.
"How d'you play?"
"Well, two people from opposing teams take a quaffle and have to go from one end of the pitch to the other, try and score and then loop back around. The other two will be trying to knock 'em down with bludgers. We played it once in practice."
"Must've been off." Scarlett shuddered off her jumper and wrapped it around her waist. She was one of the lesser-known players of the Gryffindor Quidditch team, having only joined after poor Alicia Spinnet got that nasty bludger straight to the face, her nose was never sat quite right after that and she decided to give up quidditch for the time being. Scarlett had only gone along to trials as a joke, turns out she's rather good at running away.
"We'll only do a few rounds."
"You mean, we'll only go until one of us is severely injured." Fred merely grinned down at Scarlett as they entered Bill and Geroge's little step up under the oak tree. At that moment the sun had lit up Fred's blue eyes so that they turned a watery orange and his freckles appeared to glow across his pale skin.
"Oh, Lettie, I love having you around. It's like every day's a gift." Scarlett rolled her eyes, brushing off his personal nickname for her by leaning down and plucking her broom from the stack.
"Right you got the rules?" Bill asked - he was only here for another day or so before he was off to see Fleur in London.
"Think so." Scarlett passed the broom from palm to palm.
"Good. First, it's me and Scar flying whilst the twin's shoot. Then swap, then alternate."
"Yeah, yeah," George muttered, already swinging his beater back and forth. "Let's play."
Scarlett won against Bill, then Fred against George, George also lost to Bill, and then finally, Fred versus Scar. It was nice to be in the air for a change, it was so rare that you ever got such a clean sweep of the field with a quaffle in quidditch. Especially since in recent years the game had upped in competitiveness given the newfound rivalry between Malfoy and Potter. It had been ages since Scarlett could genuinely say she had had a nice game of quidditch.
"Don't go easy on me pretty boy," Scarlett muttered as she set herself up, still rubbing her shoulder from where rather a nasty bludger from Fred hit her on her first round.
"Oh, you think I'm pretty." Fred batted his eyelashes at her, whilst he straddled the branch between his legs, his cotton trousers revealing his thighs as they clenched and re-clenched as he gained his balance.
"Oh for God's-just play." Scarlett kicked off before circling around to the starting point just above the willow trees. Fred was quick to join her, he was incredibly apt on a broom. Scarlett liked quidditch in theory more than in practice, she had taken a fancy to it in her second year when she had had more free time, and she would study different flying styles when she could. Fred was nearly a text-book perfect lean flyer. He was clean and precise and very clearly knew how to manipulate and dominate the broom to fit his needs.
"Play nice with me Lettie, okay?" Scarlett merely scoffed at Fred's faux-innocence.
"In your dreams, Freddie."
And they were off. Had the weather maybe been a bit damper and the pitch a bit more sustainable, Scarlett may as well have been back at Hogwarts on the quidditch pitch, practising with the twins, Harry and Ginny, and on the odd occasion, Ron too. But it was nicer here at the Weasley's Bungalow. The rolling fields were idyllic and the sun-light splashed everything in a clear bright light, not to mention how clean the air was when you were flying, almost like water as it gushed around you.
Scarlett had the upper hand most of the mini-game since she was a trained chaser whilst Fred was for more apt as a beater. Still, Fred liked to play a little dirty since he knew he probably couldn't win naturally. This resulted in Fred sporadically swerving in closer to Scarlett and trying to even circle her as to throw her off course.
Scarlett merely spluttered colourful insults whilst she allowed her body to naturally swerve her this way and that as to avoid him. She couldn't help but be a bit more distracted with Fred flying next to her, he was no longer just an annoying boy but a young man. His newfound height wasn't all that had changed with Fred, he was leaner with quidditch practise, so much so that his old shirts were now just a little to tight the shoulders. His hair was in this soft middle-ground between short and long that usually meant that he was due for a haircut. Not to mention the fact that as he flew he only kept one arm on the broom whilst the other stayed relaxed by his side, the ribbons of muscle-flexing sporadically as he shifted course.
Whether it was Fred's distractions or the distraction of Fred, the bludger that Bill had just launched from her left nearly went entirely unnoticed by Scarlett. It was only when it was metres away that she seemed to notice the oncoming black shadow, pelting towards her, and this resulted in a rather messy dodge that as it turns out, wasn't a dodge at all. The bludger, though missing her, managed to catch the front of her broom which sent her balance entirely off. Suddenly the broom was wild underneath her as it tried to jump itself back into equilibrium. Up, down, left, right - soon Scarlett didn't know which way was up and which way was down.
"Shit, shit, shit-" Scarlett barely heard Fred's voice as he veered closer towards her, she was too concerned over the world spinning around her to take notice of him. Next thing she knew the broom had clearly given up and was now plummeting downwards towards the grassy, yet solid, earth. When that approaching green shadow was only metres away, Scarlett felt a weight colliding with her right side, knocking her off her broom so she fell the last metre before rolling several times with the object in tow.
When the world finally came to a sudden and rather brutal stop, the first and only thing Scarlett seemed to notice was a pair of hands gripping the exposed skin of her waist. It seemed as though in the fall her shirt had somehow ridden up, and the person who had pulled her to safety was now holding the exposed skin. Looking down she saw two freckle-speckled hands holding her against her saviour's chest, three of the fingers had slipped under the fabric of her shirt and were gripping dangerously high on her ribs.
"Sorry!" A voice jolted her, some part of her mind loosely recognised the voice as belonging to Bill who no doubt had been the one to throw the bludger.
"My fault," Scarlett replied, shuffling a little so that she could hide her flushed cheeks by brushing down the grass stains on Ginny's sweatpants. As she moved the hands seemed to realise they were gripping her and slowly disentangled themselves with her shirt.
As Bill and George made their way over Scarlett snuck a look over her shoulder at Fred. He was leaning back on his hands as he sat, his legs outstretched in front of him. He wasn't really looking at anything, just squinting in the sunlight. Scarlett noticed the messy tufting of his hair and the way his shirt had somewhat rolled up near the waistband of his trousers so she could just see the toned, freckled flesh that was hidden there.
"Whoops!" George laughed as he ran up to Fred and Scarlett, reaching down and helping his twin up.
"Good thinking Fred, we almost broke our new house guest." Bill was the one who reached out to help Scarlett up and as he did so he sent her a playful wink and a shake of the hand before he turned and slapped his brother on the back. Fred, in turn, appeared to now be sporting a rather bitter expression towards his brother, as though his kind words were nothing but slander.
"Yeah well, someone's gotta look out for her, she's not used to how you two play quidditch," Fred muttered, and Scarlett was surprised to hear an angry lilt in his voice. He never got annoyed, or angry - and if he did he would normally always play it off with a joke.
"Sorry Scar that's my fault," Bill said again, pulling her in for a half-hug.
"Ugh, would you guys stop worrying. It was nothing! I'm not even hurt." Scarlett rolled her eyes and turned to retrieve her broom, praying with everything she had that it wasn't damaged - God knows she couldn't afford a new one. "It was basically like a wake-me-up."
"Still, we'll be more careful in the future." Fred finally smiled at her, and that dark cloud above him seemed to pass.
"Don't you dare. God knows the other houses won't go easy on us, why the hell should we go easy on each other."
"Fair point, fair point," George muttered, and with that, the party appeared to decide that that was enough Quidditch for one day - well, at least for one morning.
Bill and George decided that to make up for their meanness and to be 'gentlemen' they'd be the ones to take the kit back to the shed whilst Fred and Scarlett could wind their way back to the Bungalow. For a small while the two didn't speak as they fell into step with one another, and Scarlett couldn't help but wonder if Fred was thinking the same as her - thinking about how it felt to have Fred clutching her bare skin, whilst he was flushed against her back, pinning her to the floor.
"You want to tell me what's been getting you down." Fred eventually spoke and Scarlett couldn't help but blush, some part of her was worried Fred could hear her gushing thoughts.
"What?"
"Oh please, ever since you found out you were spending summer here you've been positively miserable."
"Shut up."
"I'm being serious, hey-" Fred jumped forward and twisted so that he was now standing in front of her, looking down at her with a suddenly serious glare. "I don't mean to take the piss, I know sometimes me and George can take things too far but if you're really upset then-"
"Fred I'm fine." Scarlett squinted up at him, Fred's sudden mood change had taken her by surprise. "Just homesick y'know." Even though Scarlett by no means wanted to continue the conversation, at least not yet, she didn't want to move on and disrupt the moment. It was quite nice to have a few personal seconds with Fred, she had never really had a chance to before, not if you count passing comments in the Gryffindor changing room. It was just, nice.
"Shit, that doesn't look fine." Fred's eyes at some point must have trailed southwards as he was now wincing at the sight of Scarlett's shoulder, only semi-covered by a tank top. There on her shoulder was a flowering pink bruise that no doubt was going to blacken over the next few days.
"Eh, you know I've had worse." The Gryffindor rule was that if you didn't come out with an in injury then you clearly weren't playing hard enough.
"Still..." Fred muttered. "I did that?" Without thinking Fred reached out and pulled the strap of her tank top an inch off her shoulder to get a better look at the flushed skin. The movement appeared perfectly natural to him and he merely continued to study the injury he'd caused, his finger fluttering lightly over the colourful pattern the bludger had painted. But Scarlett seemed frozen in place, all of sudden, it was like a million things hit her.
The golden light that was bouncing of his skin, the way he had some pale grass stuck in the orange tufts of his hair, the less prominent freckles that clustered across his nose and temples. Not only that but right then and there, she could smell him, and it was Fred's smell. It was warm and welcoming, a familiar musk that had been around her every time she'd been near him, she had just never noticed it.
"I'm fine," Scarlett whispered once more, not trusting her voice to speak much louder. How long had this feeling been there, how many times had she confused it for something else? All these years she'd watch him fall in and out with girls and just thought he saw her as a little sister to him. She herself had been with other boys but, Fred had always been a shoulder to cry on. Was this even possible?
Fred's eyes came back to hers for just a moment and another thousand questions lurched in Scarlett's mind.
"Okay." Fred eyed her warily, as though he were not convinced, but he slipped the strap of her tank top delicately back over her shoulder.
"I'm fine!" She laughed throwing her hands in the air.
"Whatever you say, Lettie." He turned back around and started pacing again, and Scarlett couldn't help but feel her heart drop a little. Didn't he want to stay out here a bit longer where there was no one to eavesdrop on their conversation? Clearly not.
"Can't believe it's my first day here and I'm already battered and bruised."
"Did you really expect anything different?"
"No...can't say that I did." She smiled up at him and he smiled down at her. And then all of a sudden they were back in the brimming kitchen and someone was pushing a plate of food in Scarlett's hands and Molly was scolding her for playing on an empty stomach and everything was normal.
And then Fred sent Scarlett a wink over his shoulder before he disappeared upstairs to get changed and Scarlett felt a warmness flush throughout her chest. Maybe everything wasn't normal - maybe Scarlett had just found something to make this summer, bearable.
14 notes · View notes
Text
Request: You're Strange but so am I (Alec Volturi x Cullen!Reader)
Tumblr media Tumblr media Tumblr media
Alec used to scare you, a lot. He was indifferent to you but something changed. The dynamic changed and neither of you could really pin point why. Or at least, Alec had his assumptions but he didn't intend on telling you them. He knew he scared you. You did a terrible job hiding it. Even so, you were always kind to him.
It was enough to get you talking to one another. At first it was slow but immediately picked up pace like an ice breaker. Your nerves seemed to ease slightly and that was when Alec really got to see the real you. You were bubbly, mischievous, overall you were always smiling. Whilst he never gave an external reaction, he felt the deepest part of his soul swoon, only a flicker, yet enough to be noticed like a candle in a room consumed in the dark.
Soon enough, Alec noticed how others saw you. You were young for a vampire but that didn't account for how misunderstood you were. Just because you were cheerful, didn't make you childish. Many presumed you weren't capable of real emotion but he knew better. He actually used his years of experience in this world that told him it was much deeper than that. You felt with your whole heart. Alec had become so accustomed to your smile that seeing you sad or even angry seemed completely out of character and had to be major. He observed all of this all the while barely being acquaintances. He still sensed you holding a piece of you back from him.
Unlike yourself, he wasn't one to beat around the bush. This particular day in the woods was no different. The day he arrived to check on Renesmee. "You and I...we aren't so different." Alec said slowly moving forward. You stepped back for every step he took forward. "You think so?" You tried to hide the nerves in your voice but the act was up when your back immediately hit the tree. "Oh yes." Alec smirked before blocking you into the tree with his hands on either side of you. He made a noise. "What's wrong? Where's that Cheshire smile gone? Let me see that entrancing smile again."
It wasn't evident that Alec was actually opening up to you a little but it never was when it came to Alec wanting to know you. You found that throughout his visit, you were the one to keep him company. He even accompanied you on your hunt. Even Emmett commented that Alec had found a new Jane to follow around. That of course was when both you and Alec were far from earshot.
You were saddened when Alec had to go five days later. So much so that you walked with him to the end of the Cullen territory under the grounds of 'making sure the wolves didn't get the wrong idea'. You didn't know that you had no one fooled but no one stopped you. As you both left Esme swatted as Emmett's arm whispering. "Hush! (Y/N), has found a friend. Let them be."
"Dare I say it, I might actually miss you being around. I never thought I'd get on with you so well, you're rather reserved. I'll admit it. I really enjoyed your company, perhaps more than I should." "The people who make us happy are usually the people we don't expect." Alec paused. "I hate that I just said that." He shook his head in disappointment. You smiled but didn't respond. The conversation growing quiet for a moment as you looked at one another on the edge of Cullen territory. "Will I hear from you soon?" You asked. "My, my, you will miss me." Alec teased, a smirk growing on his lips. You playfully scowled. "I enjoyed your company as well, (Y/N). I will write to you." "You could always call?" Alec shook his head, smirk still plastered on his face. "I don't like telephones of any kind. I'm a little old fashioned, I'm afraid." "Fine, I suppose I can survive with a letter." You grinned. "At least until you come back." "Sorry, little Cullen. I don't think I'll be back for another ten years at the very least. I'd hate to think you'd be waiting so long for a visit." Alec smiled. "However, you're always welcome to Volterra." You were surprised to get an invite from him since you had only really spoken the past five days. However you'd be lying if the offer didn't please you. "I suppose that won't hurt. As long as I have Aro's approval." You said politely. "I'll most certainly look into it then." Alec seemed pleased. "Until then, this is goodbye." "Stay safe, yeah?" Alec scoffed playfully. "I'm the dangerous one." Just like that, he was gone.
A week later you received your first letter from Alec. He reported that the Volturi were satisfied with the update on Renesmee. It had been a little over twenty four hours since he had returned by the time he got to writing to you. He thanked you for your kindness throughout his visit and enjoyed your company. Aro, once taking Alec's hand, wanted to know more about you. Even though he knew just about everything Alec knew of you. Aro even went to such lengths as showing how pleased he was that Alec had made a friend. He hoped such a bond would be beneficial for both the Volturi and the Cullen's. This lead to Aro welcoming you to Volterra at any time you pleased. However, you smiled at the thought that Alec considered you a friend.
It had been a few months since Alec's visit and he had received another letter from you. He didn't smile but did keep a lingering gaze on the envelope the receptionist handed to him after giving other envelopes to Aro. Aro looked at Alec with a smile. "Is that from (Y/N) Cullen, dear boy?" Alec nodded. He itched to see the contents of your letter. Each having so many bizarre events and odd thoughts that in every response he gave, one statement was consistent. "You're strange, Cullen." He stood by it but craved more and more with every letter sent.  "I wouldn't have thought either of you would have had much to talk about for such constant communication." Caius stared into Alec. "Caius!" Aro lightly scolded. "(Y/N), is very dear to Alec. You, of all, should be encouraging. Sweet Athenodora is very dear to you after all, even as humans." "We are mates." Caius shot back. "Our relationship is much more than a friendship." Aro smiled slyly at Alec. "Only time will tell for this argument." Before Alec could respond to the implication, Caius' response was immediate. "No. Not with a Cullen." His tone was forceful, slightly aggressive. "In all due respect, I do not believe that either (Y/N) or myself have such intentions." Alec said keeping emotion out of his tone. "My boy, no one ever does." Aro smiled.
More months had passed and Alec had out of nowhere requested that he leave to America, receiving a worrying letter from (Y/N). Aro, with Alec's hand in his, agreed that the tone of the letter did seem rather grim and so would allow it. Alec thanked him before taking off without delay. What Aro didn't expect was for Alice Cullen to show up nearly two days later. She claimed to have had a vision of both Alec and (Y/N) and so she thought it only right, as she was in Italy at the time, to let him know. Aro enquired about the letter but Alice had no knowledge of any issues, in fact, they had been recently informed that everything was fine. Aro took Alice's hand and was surprised by the recent vision she had. The two people were in the shadows but he knew who they were just by the silhouettes. Alec was perched over you on something whilst you were grinning as Alec leaned closer and closer, foreheads touching and still moving closer. The vision faded just as his lips touched yours.
"You-You tricked me?" Alec was in disbelief. "I had to! You wouldn't have gotten here in time otherwise. Everyone else is out hunting. They won't be around for a while. I saw the opportunity and I took it!" Alec stared at you in disbelief, unable to really comprehend that you schemed such a plan to get him here. "I should have known." You pulled Alec in the house and continued to almost drag him to your room, giggling as you did so. He barely had enough time to close your bedroom door or the front door for that matter before both of his hands were in each of yours. "You are strange, Cullen." Alec said, his expression of complete bewilderment. "Have you finally gone mad?" "Never! I just had to make sure the wolves wouldn't see you!" Your giggles turned into laughs and soon enough, Alec couldn't help but chuckle too. "I would say you'd have to be careful though- can't leave a lasting scent and the lights will remain off." You said before hopping over the end of the bed frame to sit on your bed. "It's fine, I'll remaining standing." Alec said looking around your room. "A bed?" "More for lounging on rather than sleeping as you can imagine." "I suppose a chair isn't good enough for you?" Alec raised any eyebrow. "Beds are much better. See for yourself." You gestured to the bed but Alec shook his head. "Maybe another time." "Are you judging me, Alec? I see that look in your eyes." You smiled and Alec smirked turning to look at you, moving so that he was centimeters away from the bed frame. Pressing down on his fingers to stay balanced. "I thought you liked my eyes. I believe your word was 'pretty'." "Oh yes, you have very pretty eyes." You giggled as Alec leaned forward with his own smile disappearing. You continued to grin, allowing him to invade your personal space, foreheads soon touching. 
Your lips touched and the grin fell from your face, just as immersed in the moment as he was. You leaned up ever so slightly to allow Alec better access which he welcomed. Once again you took hold of his hands, simply holding them on your lap the kiss continued. You hoped it would never end now that it had finally happened. Alec broke the kiss but kept his forehead touching yours, his eyes shut and savouring the moment. "Strange, Little Cullen." He was quiet for a moment before a smile grew on his face. "You're going to get me in trouble. I shouldn't be here." "Am I worth it?" You grinned. "You could be... sweet face." "'Sweet face'? That's a new one." "Come back with me, (Y/N)." Alec pulled you on to your knees, closer to him. "Now?" You tilted your head. "Now, later, anytime. Just...come with me."
234 notes · View notes
schoentraumer · 5 years
Text
A Rush
The worst part of being unincorporated into the greater commonwealth is that the protections that the commonwealth offers. I frowned thoughtfully down at the...well, I suppose bandits makes the most sense to describe them. Unwashed, clearly destitute, carrying all manner of strange instrument gathered from prior raids. They numbered about nine, possibly ten if the pair of boots around the rock were attached to someone.
A snort and a kick confirmed the boots were in fact attached to someone, so, 10. I frowned thoughtfully, glancing around at them, then up at the sky. Darkness would come, and when it did, so would I. I pulled back and then rolled over, slipping my hat down to cover my face, folding my hands over my stomach and napping. It wasn’t as though these fella’s were going to have a flyer stashed around here, not with how they had cobbled together their camp. Still, I glanced up from under the brim of my hat towards the higher reaches where transport would come from.
Still, nothing on the horizon. 
I listened as they descended into drunken revelry, the sun baking the leather trench coat I was currently surrounded in. The jacket would not perhaps have been considered fashionable in the commonwealth, but finding myself in the unincorporated I felt to blend in one has to abandon the mores one knows. 
It wasn’t like I could really be considered a member of the commonwealth anymore in any case. I had given up that part of my life when I’d run out on my obligations and I wasn’t likely to be welcomed back with open arms now, even as the prized omega of a good house. The scandal. The shame. What would the neighbors say?
Probably only what they’d heard my family say. 
Dusk and then darkness, the rowdy sounds of merriments and horseplay. I lifted my hat as they began to settle down. Too drunk to really do much other than rehash some truly awful stories than were altogether unlikely to have happened in the way that they describe, though the appeal is strong. 
Pulling out my stunner, I rolled onto my front and looked down at the group. Slumped together in one corner were six of them, the story sharers. Across the fire from them were three sleepers, and the last one was tending the fire with a glassy look in his eye. I nodded, rose into a crouch, and then jumped. 
Sticking the landing, I got off 10 charges in 30 seconds, fast enough that they didn’t even have time to yell. I stayed completely still for another 30 seconds, waiting for the statistically unlikely stunner rage, and then rose from my crouch and holstered my weapon. I slowly crept towards the story tellers and checked them, pulling out my small attache of zip ties. There are more fancy restraints, some of which I’d eyed in catalogues, but for non augmented bandits like these I couldn’t justify the expense. 
I checked each of them for vitals, but all were breathing. “Jedadiah, please come to me.” I requested, my hud activating with a multicolored line.
“Aye Captain. Estimated three minutes till arrival.” My ship confirmed. I set about finishing with the last few of them before dragging the deadweights into a line. I then scanned each face, confirming their identities as the ‘Mudd Cup Gang’. Of thirteen known associates, these were the last ten, the other three captured ‘Dead or Alive’ by another bounty hunter earlier that day. The scans then were important, giving me ownership of the capture even if the other hunter showed up before I dropped my quarry off with the County sheriff for processing.
Still, seeing the long series of added profits to my ‘pending’ account was a welcome sight. I wasn’t long in the ‘bounty hunter’ business, and had only really turned to it because the options for unbonded Omega’s for money weren’t super great, especially in an unincorporated area. 
The soft hum of my ship was a welcome distraction, “Touching down, Captain.” Jedadiah’s melodic voice informed me, and I stood, hand up to block the soft breeze the engines generated. 
“Set systems to auto-defense, alert for signatures within .5 miles.” I requested.
I then gritted my teeth and loaded the ten unhelpful bodies into the back of my ship, straining under their heavy weight. I didn’t even have the muscles of a beta, but I wasn’t about to give up. I was going to get a cart, I decided. A hover cart. Then I’d just have to roll them onto it and then into the holding cell. 
I grunted when the last was in the cell, sweating and abandoning the oversized trench. I swiped a wrist against my forehead, mopping sweat away with my shirt. I checked each stunned body for weapons or personal effects, making a small pile, before looping their arms with a chain and bolting them against the back wall, slumped together like sleeping babes. Taking their weapons and personal effects I dumped them in a box to be sorted through later. 
Descending the ship, I began to make my way towards the piles of ‘loot’, when Jedadiah blipped, “Presence detected Captain.” Jedadiah stated, and I heard the soft whir of the weapons activating. 
I pulled out my stunner, finger on the trigger, “How far out?”
There was a blip from one of the piles, possibly one of their own detectors. “Unknown. Possible jammer use.” 
I swore, backing back up into the ship. Jammers were expensive, I should know, I had a top of the line one, and very few people had the resources and need of one. Usually not for people on the up and up.
The door began to close when I smelt someone new, and I gritted my teeth, ducking and rolling, stunner up and focused on a shadow. A ripple that moved from the shadow, hands lifting. The armor slowly shifted from camouflage mode to regular mode and the man, the Alpha, settled his hands in the classic surrender pose. “Clever, how’d you know where I was going to be?”
I glared at him hard, “I was off the ship less than a minute, there’s only a few places in this ship that someone can get to in that time, and only one place that an Alpha, even in camouflage, could hide.” I said. I gestured at him with my stunner, establishing power. “Lift your visor, identify yourself.”
He used his right hand and lifted the visor, revealing pale blue eyes and a strong but distinguished nose. “Lieutenant Jim Park, Briar County Sheriff’s department.” I raised a brow at that.
“Jedadiah, please confirm the Lieutenants identity if you will.” I asked, stunner still on the man. There was a pause while Jed checked against the secure identification network. 
“Confirmed. Good evening Lieutenant, you were unexpected.” Jed rebuked lightly.
Sassy is a good look on an AI. 
I slowly lowered my weapon, holstering the stunner. “Can’t say we are happy to have you either.” I rebuked a little more harshly. I said. I, like most Omegas, are incredibly weary of being in the presence of an Alpha that isn’t family or mate. “Please open the door Jedadiah.” As the door opened I stepped back from it and nodded towards the door, “If you would be so kind, Lieutenant. I don’t like strangers on my ship that aren’t in handcuffs.” 
He raised an eyebrow at that and I realized that that was a little kinkier than I had intended. Blushing a little but glaring at him, “You know what I mean. I am a registered bounty hunter, and I caught these doofuses fair and square.” I defended.
Lieutenant Park nodded, indicating that he was making for the door and I followed him out, Jed keeping a me updated on the scanners in the corner of my HUD. 
“You’re the new one, right? The Sheriff said that there was a townie registered and picking up small fries.” The lieutenant said, feet in the dirt and reaching up to remove his full helmet. 
I shrugged, “Probably. I got the impression that there aren’t that many people who are raring to go as a bounty hunter and quite a few derps who are skating by under the radar by being lower profile than the big catches.” I nodded towards the various piles of obviously stolen goods, some in crates and some just strewn about. 
He nods but eyes me, “Seems like dangerous work.” He hedged and I glared at him.
“Life is dangerous - this is just being proactive about which danger I am the company too.” I say, annoyed, watching his nose flare a little. Alpha noses are more sensitive than a beta, but my nose is keener than his by far. He probably knew what I am, but I straddled the line between feminine beta and masculine omega, so he probably wasn’t sure.
He shrugged, looking around as well. “Most of this won’t be salvageable, not after being exposed like this. I assume that you have the inventory list of reward if found items?” He asked. 
I nodded, side eyeing him, “I’m new, Lieutenant, not infantile. I am aware of the nuances of the rewards system.” 
He raised his hands, “Alright, alright. If you’d like I can drop a beacon and have a recycler come out and pick up what you don’t take.”
I folded my arms, getting the feeling that he was offering to help me more than he would anyone else. “That would be lovely, Lieutenant. If there is nothing else, I will bid you goodnight. I will wrap up here and be off to central booking in maybe an hour or so. I assume your ship is around here somewhere?”
His face pinched a little, “Er, yeah. A few ridges back, outside of normal scanner range.” 
I nodded, “Smart.” I watched while he didn’t call his ship. “Well, thank you for offering to drop a beacon.” And then walking away. I pulled up the inventory, looking for the few items that either the insurance or private owners wanted back and assessing anything else that was of value that I could salvage. 
After a few minutes the sound of the Lieutenants ship, a sleek Caster style vessel, arrived. “Well, goodnight.” He called out. I nodded, not looking at him but raising a hand to wave. 
That was how I met Jim Park. The weirdest Alpha I ever knew. 
1 note · View note
thehiddensemicolon · 6 years
Text
Kacchako fanfic: New Prey Chapter 30
I just want to apologize for the readers that read this fanfic on Tumblr. I just updated two chapters before this post.. but I still haven't caught up updating the other chapters I've posted in my other accounts on watt pad and fan fiction.net. I update those accounts more often than Tumblr unfortunately. I will update the rest of the chapters right now on this account. thank you all (to the readers that messaged me) for reminding me that I wasn't updating on this account!
~~~enjoy chapter 30!~~~
The young couple walked inside the place of there soon to be apartment. First came the tour.
Bakugou knocked at the leasing office door and out came the landlord.
"Good morning Mr. ?" The woman questioned him.
"Bakugou." He replied.
"And this is Uraraka." He pointed to his left.
"Um Uraraka who?" She asked confused.
"Um Uraraka my fiancée?!" He said like it was obvious.
"Oh no, am asking where is Uraraka?" She said.
Bakugou looked left. Only to not see the girl in question. He could have sworn that she was right there.
He slightly cursed to himself and began looking for her.
"I'll be right back!" He yelled to the woman behind him.
He sped walked around the apartment complexes and saw Uraraka outside on her phone.
Who was she talking too? She looked worried.
He could hear what she was saying from a distance.
"Am sorry. I didn't read the email correctly I guess....... huh there was a mistake with the dates in the email...... Uh huh. So am not in trouble? Thank goodness!....... today? Am kinda getting an apartment today....... I don't want to disappoint my boss even before work started, it's just the train that would take me there already left....... oh someone could pick me up?........ you guys are picking people up because you guys got the dates mixed up, that's so nice of you......okay I'll go in today, someone is coming to get me in two hours? Okay that's fine.....I'll send you my address..... oh you already have it?......how I didn't move in here yet..........oh you tracked my cell phone.....neat I guess haha. Okay bye." Uraraka turned off her cell phone.
She turned towards the apartment complex and load her eyes on the blonde in front of her.
"What happened at work?" He questioned.
"Oh um. The email I got the other day told me that my newbie evaluation was tomorrow, but endeavors secretary told me it was a mistake and it is today. So someone is coming to pick me up in about two hours. Am sorry. I guess I won't be able to help you move in today." She looked down at the ground.
"No it's okay. It's work. Even though someone fucked up on the email, doesn't mean you should miss it or be late. You don't want to be known as the late girl before you even start working. It's cool. I'll just call someone to help me out here." He said.
"You're not mad?" She looked up.
"No am mad at that damn person that fucked up on the dates for the evaluation. Not you. But it's work. Gotta do what you gotta do." He told her.
She hugged him and gave him a kiss.
"Well since we are limited to time. Lets go see that fucking apartment right now." He said.
"Okay!" She followed him.
~~~ At Endeavor's office~~~~
"Do you understand! After you get a hold of that zombie boy and get him and gravity girl to this building you are fired! It is no excuse for a well respected hero agency to get the dates wrong for the newbies! A wrong schedule only inflicts trouble and unnecessary problems. This is not acceptable. This is embarrassing! Those are newbies! They now have an impression that this office is a joke and has poor management that don't even know what they are doing! Get them over here! Right when I see them walking into these doors. Pack your stuff and get out of my face!" Endeavor yelled at his secretary.
"Yes sir... I understand." She quietly responded.
He kept yelling that he specifically said that evaluations was on Friday. And he kept questioning his other staff management if they heard him speaking about Saturday at the last meeting they were at.
The employees said no and said he told everyone it was Friday. It was even on the electronic board to remind everyone.
Endeavor kept rambling on how someone could possibly made such a dumb mistake.
"Yes I am sorry for the mistake. We will have someone to pick you up... you will also be stoping to pick up the other new hero on your way over here. Again sorry for the trouble I have made for you today." The secretary got off the phone and sighed.
"Sir both of the new recruits got the call and transportation has been taken cared of. Both will be on there ways within two hours." The secretary said.
"Finally good news. Well what are you waiting for? A promotion or a raise for fixing your mistakes? Pack your stuff and get out!" Endeavor demanded.
"Yes sir." She responded.
"Shouto! Get in the car that is picking up the other recruits! I can't have them thinking this agency is a joke! Go and welcome them! Also since this is so rushed, tell them what I am looking for at the evaluation. And here!" He tossed his son three bags.
"Tell then once they get here they have ten minutes to change into this gear. Also tell them that I am giving them an extra bonus in their paychecks. That should fix the mockery we showed them today with the date mistake. Go!" Endeavor told his son.
Shouto agreed and was about to walk out of the office.
But he stopped by at the old secretary.
"I hope you will give me a call for a job, once I take over this office. It will be a different respectable hero agency. " He told the secretary.
She silently thanked him.
And Shouto left.
~~~back to the apartments~~~ The two just finished the walk through of the the apartment.
Bakugou is obviously complaining about wood floors and he saying how he wants carpet.
But Uraraka fell in love with the apartment. It was perfect for them!
"Oh please please please please! Can we get it! Just wear socks if your feet get cold!" She begged.
She put her hands on his shoulders and started shake him.
"Please please please please!!! I'll let you claim what side of the bed you want! Only if you say yes!" She offered.
The two have been fighting over what side of the bed they wanted when they were at Bakugou's parents house. So naturally they both wanted to claim the best side.
"Argh Fine! You better not cry and whine about the deal later!" He said.
"No I won't I promise! Thank you so much! I just love it here so much you know!" She smiled.
He looked over at the landlord that was behind them this whole time.
"We will take it." He said.
"Alright! Lets go back to the office for we can finish your application." She said.
After awhile the papers were done and the money was paid. The two were allowed to move in immediately.
Soon Bakugou's parent came to drop off some of the boxes the young couple has packed. And... Kirishima came too!
"Ohh how nice. So you still care about your friends." She mocked Bakugou.
"Oh shut up! I can't do all the unpacking myself. The beds, tables, and couches can't be lifted by one person. And I don't want to hear my mom bitch and moan about how old she is to be doing that kind of lifting and shit." He said.
"Okay." She smiled.
"Argh not this again!" He said. Clearly she didn't believe his reasoning.
"Hey Kirishima! Thank you for coming today." Uraraka waved at him.
"It's no problem! Sero, kaminari, and I got a three bedroom apartment three blocks that way." He pointed at the direction.
"No way! That's so close to us! I bet Katsuki is glad his friends live so close!" She said.
Bakugou mentally punched himself. He knew the three of them were moving into an apartment together. They all kept texting him about it! But he didn't even bother to look at the address of their apartment. If he would have known....
"You better not be knocking at my door 24/7." Is all he said.
"Well I take it that he is glad too." Kirishima agreed with Uraraka.
"The fuck? No I just said don't be bothering me!" Bakugou said.
"No you said don't be bothering you 24/7. So that means we get to bother you as long as it isn't everyday!" Kirishima joked.
"Hey brat! Start unloading!" Mitsuki told her son.
He grunted and started walking to the trailer full of their furniture and stuff.
He didn't hear anybody walking behind him. So he looked back and saw that his mother was talking to Uraraka and Kirishima.
Mitsuki was hugging Uraraka again... for the 100th time. Ever since she found out about the confirmed engagement. She kept babbling on about finally having a good daughter. And that she can't believe someone like her would want to marry someone like her son.
And Kirishima was caught off guard in confusion.
"Engaged!" Kirishima stepped back in confused and hurt... hurt that Bakugou didn't even tell him and his friends.
But nonetheless he was happy for his friends.
He gave Uraraka a hug congratulating her and started to ask when she said yes to Bakugou.
"Hey we don't have all day! The trailer is a rental! Come on!" Bakugou yelled.
"Hey man! Why didn't you tell us you proposed to Uraraka? That's not manly bro." Kirishima said.
"It's none of your business, that's why." Bakugou said as he unlocked the trailer.
"It's okay don't worry about it. The guys and I will throw you a bachelors party anyways whether you want one or not." Kirishima said.
"I don't want a party." Bakugou said.
Kirishima and him went back and forth about the topic.
"Wow there is a lot of stuff. Well good thing there is no one here to watch this!" Uraraka said.
"Eh? No one here to watch what?" Kirishima questioned.
"This!" She said. She activated her quirk on the boxes and made it a hell of a lot more lighter.
"Come on quickly! Before anyone sees!" She said.
Kirishima grabbed a lot of boxes and walked into his friends new apartment.
"Wow I didn't know you can make stuff not float away into space haha it's pretty neat to have no gravity and it float in place!" Kirishima praised her.
"Haha It took a lot of practice but yeah it's possible. But it's a whole lot easier to let the boxes float away to space haha." He said.
"I bet!" Kirishima laughed too.
Soon all the boxes and furniture was in the apartment. Bakugou's parents left already. And Kirishima stayed to help Bakugou move all the furniture around in the apartment.
They would have Uraraka use her quirk to make it easier. But she received a phone call saying her ride will be there within five minutes. And since they lived in a gated community she gave them the code number for the gate and her apartment number.
"Ahhh am nervous now." Uraraka admitted.
"Why?" Kirishima asked.
"Because what if I don't do good today." She said.
"Ah I would worry about that. You will do fine don't worry about it." He told her.
"Thanks Kirishima." She said.
They heard a knock on the door and Bakugou went to answer it.
And he saw half and half on the door step.
"Bakugou." Todoroki said.
"Half and half." Bakugou said.
"Ahh Todoroki! Hello! Give me a few minutes please!" She said.
"That's fine take your time." Todoroki said.
Bakugou saw another individual in the car. That person was getting out of the car.
Once he saw a familiar gray hair individual, he immediately got annoyed.
Fujimi... that thug from Isamu Academy. The one with zombie virus quirk and dumbass face.
"Oh fuck no!" Bakugou yelled.
Fujimi Saw Bakugo and thought the same.
"What! You again!" Fujimi said.
The two did not get along.
And Shouto then remembered when those two first met.
'Oh. Oh yeah they don't like each other. Now I remember. Guess I should have told Fujimi to stay in the car.' Shouto thought to himself.
"Get the fuck out of my face you low life zombie face dumbass!" Bakugou said.
"How the hell did your Fuck Face get accepted into Endeavors office?" Fujimi yelled.
"I cannot believe I have to work with you! There must be a damn mistake somewhere!" Fujimi questioned.
"Sorry I took so long Todoroki! Am ready now!" Uraraka said.
Everyone looked at her. She heard an argument but didn't know who was the other person.
"Ahh what's wrong?" She asked.
"There is a misunderstanding. Fujimi, meet Uraraka she is the other recruit... not Bakugou. So don't worry we are going to be working with her." Todoroki clarified.
"Oh hello! I remember you from the practice course back in high school! Am Uraraka!" She greeted Fujimi.
Bakugou looked so pissed at this situation.
Not only was his fiancée working with half and half, but that zombie ass too!
"I knew there was a mistake. Just glad that I get to work with you. Rather than that punk ass over there." He pointed at Bakugou.
"Oh that's right." She said. She just remembered Bakugou and Fujimi don't like each other.
"Well this guy is my fiancé. So I hope you too well get along." She said.
Fujimi couldn't believe the ticking time bomb got a girl like her! And fiancée.
Bakugou shot out a grin. Like he won the argument.
To Fujimi that grin meant, "Yeah that's right my "delinquent ass" got a girl like that, she is my Fiancée, so hands off."
"Well we should be going now. I don't want to keep everybody waiting!" Uraraka said.
"Bye sweetie!" She said to Bakugou and have him a kiss.
She walked outside and Shouto followed her.
"Nice seeing you again Bakugou." Shouto said and left.
Fujimi and Bakugou still had a stare down.
"Stay away from Uraraka. And fuck off." Bakugou told him and slammed the door.
Fujimi blood boiled and walked away.
He had to work with his bosses son and now the the guy he hates, fiancée.
He didn't have any hard feeling for Uraraka. She looked like a nice girl. He just wondered how someone like her is with someone like him.
"Oh this is going to be fun." He said. Thinking about all the different ways he can annoy Bakugou with this kind of working situation.
Bakugou was about to set off some explosions because he was so goddamn irritated.
Kirishima places a hand on his shoulder.
"Boy that was intense. Who would have thought Uraraka would be working with him huh? Well it's nothing to get irritated over. Calm down Bro." Kirishima said.
"I am calm! Now lets finish up this shit." Bakugou said.
"And while everything was happening earlier... I ordered us some pizza." Kirishima said.
6 notes · View notes
stolenbythegods · 7 years
Note
Why do you feel like nobody likes you? You seem really nice.
Thanks nonnie, that means a lot. 
This is probably going to get very long, and I know nobody asked for it, but I feel like maybe having an explanation as to why I’m insecure might help? Or not, there’s the possibility that nobody will care, but just in case, I’ll explain. 
I’ve been RPing on this site since 2013, and in that time I’ve had a lot of experiences. Most good, but there are a few bad experiences (3 major ones specifically which i will be talking about) that have ultimately contributed to the anxious mess I am today, and why I don’t approach people even though there are a fair few people I really would like to interact with.
The short version, for those that don’t wanna read through heaps of text, is this:
-I was strung along and eventually ignored by somebody I looked up to who couldn’t just tell me they didn’t want to interact.
-I was blocked by somebody I considered a friend for reasons I still do not know. 
-I was accused of copying somebody else’s OC which resulted in me losing a ‘friend’ and ultimately made me quit writing for almost a year. 
If you want more detailed explanations of what happened in each experience, you can find them under the cut. Warning: It’s very long. Feel free to ask for clarification if things seem unclear. There’s also a bolded part at the end which you can read that kind of… ties things together, I guess?
The first experience is the reason for my ‘Don’t ignore me’ rule. Back when i was still fresh to this site and didn’t know how things worked, I came across this amazing marvel OC, and I fell in love with the writing. They were my first ‘tumblr senpai’, as the term used to be. My mind was blown when they actually followed me back, and I was very excited to write with them. So I did the logical thing and sent a message. They responded positively; I was over the moon. We had one or two very brief interactions, and I guess those were enough for that person to decide they didn’t want to interact with me. Now, if they had just come out and said that, things would’ve been fine. Yes, it would have hurt, but I would ultimately have understood and moved on. Instead, they strung me along. 
Any direct requests to interact were responded to with excuses about them not having the time for new threads, which does happen, so I understood, but they ultimately promised me that we would interact when they had the time. But after a while, I noticed the memes I sent in would go ignored, unless they were just headcanon stuff, and despite saying they were busy, they still had time to interact with new people. I still gave them the benefit of the doubt and guessed maybe tumblr was eating asks, or they just didn’t know how to respond or initiate a thread with me. It only clocked with me that they were avoiding attempts at interaction and ignoring me when I responded to a short open starter they posted, and everyone who replied to it got an answer except for me. This was the point I realised they didn’t want to interact with me but just didn’t want to say anything, possibly as some odd way to avoid hurting my feelings. Now you might be wondering if this was me pestering somebody I followed, but I just want to say that me and this person were mutuals right up until I realised what they were doing and made a PSA saying if you didn’t want to interact with me, then you should just tell me instead of being rude and ignoring me. After that, we stopped being followers and I pretty much did everything in my power to make sure I didn’t have to see them on my dash ever again because I was hurt.
Their intentions may have been somewhat innocent in that they didn’t want to hurt my feelings by rejecting me, but ultimately they hurt me far worse than a simple ‘I’m sorry but I don’t feel like interaction is going to work between us’ ever would’ve. In fact I recently discovered this experience still has an effect on me, because that same person crossed my dash just a couple of months ago and It felt like I had been punched in the gut and I had to take a moment to just breathe. So yeah. This experience enforced the part of my anxiety that now tells me that just because we are mutuals does not mean they want to interact (even though selective following is now a thing).
The second experience happened not long after the first. I had followed this blog, and we had a bunch of threads going together. 4, maybe 5, and we were in each other’s inboxes a lot with memes or just general shenanigans. One day we were talking, can’t remember what about (followers? I think? something to do with followers idk) and they suddenly disappeared off my dash. I though tumblr had just freaked out, but after realising they were no longer following me, it dawned that I was blocked. Now, I was still very much an ‘assume the best in people’ kind of person, so I messaged them on a different blog like ‘Hey, i think you may have accidentally blocked me?’. No response. I tried again, and nothing. I was… very confused, and was starting to feel a sense of dread. So i messaged a mutual friend/follower and asked them if they could find out what was going on. She also got nothing out of them, this person was essentially ignoring all mentions of me. Now what I did next might not have been smart, but I was very upset. I messaged them once more on another blog, asking them to please just tell me what I had done wrong. Maybe I should have just moved on and gotten on with shit, but I had thought we were friends and I wanted answers. I never got them. This experience is the reason why I constantly fret over whether or not people actually like me, and why I’m always afraid that one day everyone is just going to turn around and start hating me. 
The third experience was the most recent, and by far the worst. So In 2015 I got a message from a ‘friend’ of mine. I had been on hiatus for a while because I had been feeling insecure and had decided to fall back on some older methods of RP and take a break from the tumblr RP community. I had just gotten back, when they messaged me stating that a person they had started roleplaying with while I was away with had noticed some similarities between her OC and mine. Now, I had no idea who this person was prior to this. So I was very confused, and I said as much. My ‘friend’ went on to say that this person thought I had stolen her OC and that they also agreed, and also that the time I made my blog had been about the same time this person had decided to go on a long hiatus. Now the similarities were this; We both had the same FC, both our characters had abuse in their background, they were both UK born, and they both had interests in cooking careers. I thought this was fairly weak evidence, and said as much. They then countered that there was one more thing I had ‘stolen’ from this person and they sent me an image. And I was shocked. 
You see, when I had still been in college, one of my assignments had been to make a floorplan of a vet surgery. Now because I suck at drawing, I found a pretty nifty site called floorplanner.com. And while working on my assignment, my brain piped up and said ‘hey, we could use this site to make a floorplan of our OC’s apartment!’. And I thought that was a great idea, so I did it. Now, the image my ‘friend’ sent to me was none other than that very floorplan I had made. The person accusing me of plagiarism was claiming it was theirs. I said no, I definitely made the floorplan, and I was responded to with information about the exact date the person had saved the image to their computer. Not only did I send a screenshot of my account on the site and the floorplan itself open in the floorplan creator, I also countered with an image showing that the date I posted the floorplan to my blog preceded the date the person saved the image to their computer, but I was brushed off by being told ‘dates can be edited’ (yeah, cuz I’m totally smart and skilled enough to do that??). 
Anyways, by this point, I was extremely upset. I talked about it on my blog, but I did not mention names or URLs. I was then told my accuser was apparently getting anon hate (though they never posted any) and their friends kept coming into my inbox to tell me to ‘call off my followers’. One even made a public post and tagged me in it. I was beginning to get really stressed out, so I messaged my accuser and asked if we could just talk about this privately. I got no response, but they did make a lovely public post about how I was being emotionally manipulative and that they had 0 doubt I had copied them and about how they were so hurt by this whole thing. 
I asked my ‘friend’ why they didn’t believe me even though i had at the very least proven the floorplan was mine, and their response was that ‘of course they were going to believe the person who talked to them every day over me, who didn’t talk to them very much’. Looking back, I realise this ‘friend’ was not good for me at all. My reasons for not talking to them came down to a few things. First, I did not feel safe talking to them about my depression. The one time i did, i got some rather intensive comments. And you remember the break from tumblr I mentioned earlier in this story? I had spoken to them privately about it and explained my reasons had been I wasn’t feeling the most welcome, and that I needed some time away. They decided to take this as a personal attack, and when I had updated them about what was happening with me on the other site, they kind of flipped out and accused me of shitting on something they loved (tumblr) because I was criticising some of the uglier parts of the RP community (cliques, elitism, anon hate, the stigma towards OC’s over canon characters etc.). After that, I didn’t feel like I could talk to them, so I kind of stopped.
After all this had happened, I tried to move on with things. But the fact is, it really affected me. My ‘friend’ was, and still is I believe, a very popular RP blog with a lot of weight. My accuser had a fair few friends too, and my name had been slandered about. I removed all links to the blog this happened on from my other blogs out of fear, but even then I felt scared. Every blog I wanted to follow would be checked first to see if they had any obvious connections to my ‘friend’ or my accuser. If they did, I would make note of them, their other blogs, and the main people they interacted with all to avoid the chance of somebody knowing me and deciding to bring the shitstorm back up again. Eventually, i was so scared that I just… couldn’t find my love of writing anymore. It was tainted by anxiety, and I finally made an announcement on all my blogs; I was quitting. I didn’t delete my blogs, but I made the message clear that it was no guarantee that I would ever come back. 
I made that post in September 2015. It was only after reconnecting with a very old RP partner back when I was still new, that I finally was convinced to come back to tumblr in May 2016. My writing quality had fallen during my hiatus, because I barely wrote at all for the majority of those months. It still isn’t what it used to be, and the style varies wildly from day to day. 
These experiences, along with some milder ones, have ultimately shaped me into the anxious mess that I am now. My anxiety constantly reminds me that friends can turn on you, and that sometimes people might just be being polite when they compliment me or seem willing to interact. I do try my best to ignore it, but there are times it overwhelms me. It’s nothing personal to the wonderful people who follow me, it’s just my own inner demons that like to torment me. I found my love of writing again, and I would like to be the confident person i once was. I just need.. patience, honesty and some people willing to put up with my awkwardness.
This is horribly long and I’m very sorry, but I hope maybe it cleared some stuff up about why I am how I am. I’m open to more questions, if anybody cares enough to ask lmao. 
6 notes · View notes
douglassmiith · 4 years
Text
Smashing Podcast Episode 19 With Andy Bell: What Is CUBE CSS?
We’re talking about CUBE CSS. What is it, and how does it differ from approaches such as BEM, SMACSS, and OOCSS? Drew McLellan talks to its creator, Andy Bell, to find out.
Today, we’re talking about CUBE CSS. What is it, and how does it differ from approaches such as BEM, SMACSS, and OOCSS? I spoke to its creator, Andy Bell, to find out.
Show Notes
Note: Listeners of the Smashing Podcast can save a whopping 40% on Andy’s Learn Eleventy From Scratch course using the code SMASHINGPOD.
Weekly Update
Transcript
Drew McLellan: He is an educator and freelance web designer based in the U.K. and has worked in the designer web industries for well over a decade. In that time he’s worked with some of the largest organizations in the world, like Harley-Davidson, BSkyB, Unilever, Oracle, and the NHS. Alongside Heydon Pickering, he’s the co-author of Every Layout, as well as running Front-End Challenges Club which is focused on teaching front-end development best practice via short, fun challenges.
Drew: His latest venture is Piccalilli, a website newsletter with tutorials and courses to help you level up as a front-end developer and designer. So we know he’s an experienced developer and educator, but did you know he was the first person allowed to compete at Crufts with a panda?
Drew: My Smashing friends, please welcome, Andy Bell. Hi, Andy, how are you?
Andy Bell: I’m smashing, thanks. How are you?
Drew: I’m very good, thank you very much. Now I wanted to talk to you today about something that you posted on your site, Piccalilli, about a CSS methodology that you’ve developed for yourself over recent years. First of all, I guess we should probably explore what we mean by a CSS methodology because that could mean different things to different people. So when you think of the CSS methodology, what is it to you?
Andy: That’s a good, hard question to start with, Drew. Appreciate that, thank you!
Drew: Welcome!
Andy: It’s a tricky one. So, for context, I’ve used BEM for a long time, and that is Block Element Modifier. That’s been around for a long time. The way that I look at a CSS methodology is, it’s not a framework, it’s an organization structure. That’s how I like to see it. It’s like a process almost. It’s like you’ve got a problem that you need to solve with CSS and you use the methodology to solve it for you and keep things predictable and organized. BEM’s just legendary for that because it’s been wildly successful.
Andy: Then you could almost qualify things like the style components and that sort of thing. You can almost say that they’re methodology orientated even though they’re a bit more framework entwined, but still, it’s a methodology of breaking things into tiny molecules. So essentially that’s what I’m trying to do with CUBE CSS as well. A thinking structure, I think I described it as.
Drew: So it’s an application of process for how you architect and you write CSS, and it’s not so much anything that’s based on tools or any other sort of technology, it’s just a sort of work flow. So there’s lots of different approaches out there. You mentioned BEM. There’s SMACSS, OOCSS, Atomic CSS. And then you’ve got these sort of unusual lovechild approaches like ABEM. Have you seen that one?
Andy: Yeah.
Drew: Why publish your own?
Andy: Yeah, yeah. Why make your own? That’s a very good question. I think those who know me well know I like to sail against the tide a lot. It’s mainly because I tend to do lots of varied projects as well, in varied teams. So it’s very hard, I’ve found, to work with BEM with a traditional developer because they’re used to using CSS for what CSS is all about: the cascade, et cetera, and that’s why I sort of stole that from the language.
Andy: On the other flip side is that less structured methodologies, it’s harder to work with a programmer, JS sort of person because they like structure and organization and small components, which is understandable working with the language that they work in.
Andy: So I found myself in these positions where I was working with different types of people, different types of projects where one methodology wasn’t quite working. Over the years, I’ve just been playing around with this idea of how things go, and then there’s the stuff me and Heydon did, Every Layout, which sort of enforced the big part of it, which is the C, the composition part, and then I’ve just sort of evolved it very rapidly over the last six months.
Andy: The only reason I wrote an article about it was because I was just doing this course and I thought I’d better write some supplementary material to go with it so people understand it, and it’s absolutely blown up. So maybe we’re not over methodologies quite yet, Drew.
Drew: So the course material that you’ve been putting together actually uses CUBE CSS as its methodology, does it?
Andy: Yeah. So a good 50% of the course is actually front-end, even though it’s a course unlimited. It’s so, so deeply entwined in the way that we build the front-end that I couldn’t just say, “Oh, by the way, this is how I write a nice CSS,” and then leave it. I know people like to get into the detail, so I was like, what I’ll do is, I’ll write this post that’s really long and really detailed and then if someone wants to skill up and really understand what we’re doing, then they can do, and the rest is from there. And here we are today, Drew, sitting and chatting about it.
Drew: So if somebody already understands BEM and is maybe already using BEM, as an example, because that’s probably one of the widest adopted methodologies, isn’t it? So if they’ve already got an understanding of BEM and they’re coming to CUBE, is that something that they would find easy to adopt? Are there many similarities or is it completely different?
Andy: Yeah. I’d say going from BEM to CUBE is probably a smooth transition, especially the way I like to still write the CSS for CUBE. So the majority of stuff’s happening at a higher level. So it’s happening at the cascade level and it’s happening global CSS, using the utilities to do a lot of the stuff. But when you come into the nuts and bolts of it, it’s very BEM-like components, blocks and elements. The only thing that’s sort of different from BEM is, instead of having modifiers, we use this thing called exceptions instead which is, instead of using CSS classes, it turns to data attributes, which I think gives a nice bit of separation and a real exception, which is what a modifier should be.
Andy: Part of the reason why I’ve sort of sailed away from BEM was because I found the way I was working with it, especially in design systems, was modifiers were dominated and it became a problem because it was like, what is the role of my block at this point? Because if I’m modifying it to the point where it’s unrecognizable regularly, then is this methodology still working how it’s supposed to work?
Andy: Then there’s the whole design token stuff, the stuff that Jina did with the Lightning Design System which we’ve all started adopting now. The utility class stuff really started to make sense with that approach. So I just sort of smushed all the things I like about other people’s work and slotted into my own instead.
Drew: You talk about with BEM, the sort of modifier approach kind of getting out of control. Was that one of the main pain points with BEM that CUBE tries to address?
Andy: Yeah, absolutely. I do like the modifier approach with BEM, it does make sense. What I like about BEM is something that I still do, is the double underscore for an element, and then there’s the double dash for a modifier. I like that way of organizing things. It was just a case of okay, well, a lot of the modifiers I can actually account for with utility classes and then the other bits…
Andy: So the example I use in the article is, imagine you’ve got a card and then the card is flipped, so the content appears before the image. So then that makes sense, to see display: flex and then you reverse it, reverse the order. That makes sense, to have an exception rule for that because it’s an exception of the card’s default state, and that’s how I like to see it. It’s like an affected state on that component, is what an exception is, and that makes sense.
Andy: With a lot of the stuff that I’ve done more recently, the modern front-end stack with reactive JavaScript, there’s a lot of state changing and it’s makes sense to handle it appropriately between CSS and JavaScript because they are becoming more and more entwined with each other, whether you like it or not. It’s a common language for them. As you can see by my face, very much not, but there you go. You’re probably thinking, “Actually, I’ve been working with react quite a lot recently, so I’m the other way round.” So I can see that as well.
Drew: So let’s get into CUBE then. So CUBE stands for Composition Utility Block Exception. Is that right?
Andy: Yeah. That’s the one.
Drew: What on Earth does that mean?
Andy: Oh, mate, you should have heard it before! I was doing a talk last year. I did a talk, and it was called Keeping it Simple with CSS that scales, and in there I sort of introduced an earlier version of it called CBEUT, which was Cascade Block Element Utility Token. It was rubbish. I hated the name of it. I did it a couple of times, this talk last year, and I really didn’t like the name. Then when I came to doing this stuff this year, I thought, “I really need to think about what it actually is and what it’s called.” I think CUBE is a little less rubbish. I think that’s the best way I can describe it.
Andy: But then, names are always rubbish for these things, aren’t they? I mean, like BEM, what a rubbish name that is! But we all do it. Look at Jamstack: that’s a terrible name as well, isn’t it?
Drew: My lips are sealed!
Andy: Your boss is going, “What?” It’s true. It’s just the way it is, isn’t it, in our industry.
Drew: It seems that a lot of the CSS methodologies try and work around some of the features of CSS, things like the cascade. My understanding from what I read is, CUBE tries to make use of those sort of features and properties of CSS.
Andy: Yeah. A good analogy for it is SCSS, like Sass, is an extension of the natural CSS language, isn’t it? You’re pretty much right in CSS still. So CUBE CSS is like that. So it’s an extension of CSS. So we should still write CSS, as CSS should… well, it’s supposed to be written. Let’s be honest, that how it’s supposed to be written, is the name gives it away: Cascading Style Sheets. So it’s embracing that again because what I’ve found is that I’ve gone all the way down to the micro-optimization level. I’ve been down the path that I see a lot of people going down recently where… and I’ve mentioned this in the article as well, where I can see… there’s some evidence of it recently. I’ve spotted people have been creating spacer components and stuff like that, and I understand that problem, I’ve been in that situation.
Andy: The way I fixed it was, instead of drilling down and trying to micro-optimize, I actually started thinking about things on a compositional level instead because it doesn’t matter how small your components are, at some point they’re going to be pages, they’re going to be views. You cannot avoid that, that’s how it’s going to be. So instead of trying to say, “Right, I need these tiny little helpers to do this layout,” you say, “Right, I’ve got a contact page view, or a product page view, and that’s a skeletal layout composition. Then inside of that I can slot whatever components I want in there.” We’ve got things like Grid and Flexbox now which make that much more achievable, and you can essentially put whatever you want inside of the skeletal layout, it doesn’t matter. Then the components should, at that point, behave how you want them to behave, with or without container queries.
Drew: This is the composition part of CUBE where you’re looking at things at more of a macro level, looking at how components can be composed into a view to create the sort of pages that you need to create for a site or an app or what have you.
Andy: So it’s creating rules, essentially. It’s like guidance. It’s trying to get guidelines for something. It’s not like a strict rules, like, you should do this, you should do that. That’s essentially what you’re doing with the browser, with this methodology, is you’re saying… you’re not forcing it to do anything. You’re saying, “Look, ideally, if you could lay it out like this, that would be great, but I understand that that might not be the case so here’s some bounds and some upper and lower levels that we can work with. Do what you can, and cheers.” Then you just chuck some components at it and let it just do what it does. You add enough control in there for it to not look rubbish.
Andy: So a good example would see… we do a layout in Every Layout called the switcher, which essentially will in-line items until a certain point where the calculation that works out how wide it should will just stack them on top of each other. But because we add margin to the in-line and the block, it works, regardless of what the state of it is, it still looks fine. That’s the idea, is that we’re not telling the browser to say, “You must layer this three column grid out.” We’re saying, “If you can layer a three column grid out, do it. Otherwise, just stack and space instead.” So it’s that sort of methodology, of letting the browser do its job really.
Drew: Many of the different approaches that have come along for CSS over the last few years have very much focused on the component level of dealing with everything like it’s a component. CUBE doesn’t downplay that component aspect so much, it just gives this extra concept over the top of taking those components and composing them into bigger layouts, rather than just saying the layout’s just another component.
Andy: Yeah, that’s a good point, yeah. I think the thing to say about components is they’re important, especially in modern front-end stuff. We do a lot of component stuff, system stuff. But the way I see a component is, it’s a collection of rules that extend what’s already been done.
Andy: The point I make in the article is, by the time you get down to the block level, most of your styling has actually been done, and really what your component is doing is dotting the Is and crossing the Ts and it’s saying, “Right, in this context…” So for a card, for example, make the image have a minimum height of X, and add a bit of padding here. Do this, that and the other. Put a button here. It’s just sort of additional rules on top of what’s already been inherited from the rest of the CSS. I think that’s probably the best way to describe it.
Andy: Whereas in BEM, the component is the source of truth. Until you put that class on the element, nothing has been applied at that point, and that method works. I just found I wrote more CSS by doing that, and more repetitive CSS, which I don’t like doing.
Drew: Would you consider the typography and the colors and the vertical rhythms, spacing, and all of that, is all that part of the idea of composition in this model?
Andy: Yeah. In a global CSS, yeah, absolutely. The vertical rhythm especially, and the flow. We did an article on that at 24 ways, didn’t we, a couple of years ago, the flow and rhythm component. That was a sort of abstract from this approach as well, where you set a base component which essentially uses the lobotomized owl selector. I don’t know how I’m going to describe that on the radio, but we will. We’ll just put, I think, in the show notes about the Heydon article or something. But essentially that, it selects child elements… sorry, sibling elements.
Andy: So it says, “Right, every element that follows element X have margin top of CSS costs and property value,” and then the beauty of that is then you can set that CSS custom property value on a compositional context as well. So you can say, “Right, in this component, if there’s some flow on the go, we’ll set flow space to actually be two rem because we want it to be nice and beefy, the wide space.” Then in another one you might say, “Actually, I want flow space to be half a rem because I want it to be tight.” This is all happening, all the control is coming from a higher level and then what you’re doing is, you’re adding contextual overrides rather than reinventing it each time, reinventing the same thing over and over again.
Drew: So that’s the C, Composition. Next we’ve got U, which is Utility. So what do we mean by utility?
Andy: So it’s a class that does one job, and it does it really well. That could be an implementation of a design token which… it’s an abstract of properties. Usually it’s colors or typography styles, sizing, and rules like that. The idea is you generate utility classes that apply those. So you’ve got a utility that will apply background primary, which is like the primary color, and then color primary, which is the text color. Then you might generate some spacing tokens for marginal padding, and all those sorts of things. They just do one job. They just add that one spacing rule, that one color rule, and that’s it.
Andy: But then you’ve got other utilities as well. So a good example is a wrapper utility. What that will do is, it will put a maximum width on an element and then it will put left and right auto margin to sit it in the middle of the thing. So it’s just got one job, and it’s just doing it efficiently and well.
Andy: So you’ve got your global styles, you’ve done a lot of your typography settings and a lot of your flooring space. Your composition’s then giving context and layout. Then utilities are applying tokens directly to elements to give them those styling that you need. So like a heading, for example, you’re saying, “I want this to be this size and I want it to have this lead in, and I want it to have this measure.” Then at that point… this is what I was saying about the blocks… then you go further down the stack, and you’ve already done most of the work at the point.
Andy: So they give you this really efficient way of working, and because HTML sort of streams down the pipe as well, it’s really nice to abstract the workload onto HTML rather than CSS as well, I’ve found. I used to really get into utility classes, like in this sort of old curmudgeon style of, “Oh, separation of concerns,” but I actually think it’s a really decent way of working. I mention in the article that I actually like Tailwind CSS. I think it does work, and I really like using it for product typing because I can really put something out really quick. But I think it just goes a little bit too far, does Tailwind, whereas I like to rain it in when it goes beyond just applying a single rule on a class. So that’s it, I think. Do you?
Drew: So, yeah, you talk in the article a lot about design tokens, which is something that we’ve talked about on the Smashing Podcast with Jina Anne back in episode three, I think it was. So it sounds like design tokens are a really fundamental aspect.
Andy: Yeah. Oh, God, yeah. I remember so vividly when Jina was doing the Lightning Design System stuff because I was building a design system at the time, or something that resembled a design system, and we were struggling to get executive approval of it. When the Lightning Design System came out, I literally just sent them link after link and I said, “This is what we’re doing. We’re building a design system. This is what Salesforce are currently using it for.” I remember her work at the time actually helped me to get stuff through the door.
Andy: Then the design token stuff has always stuck with me as being a really good way of applying these rules. Because I’m a designer by trade, so I can just sort of see that organization and the ability to organize and create a single source of truth being really useful because it’s something we’ve not really had in digital design, especially in the Adobe era of working with Photoshop and stuff, we just didn’t have that lUXury. We had it in print with the Pantone Book but we didn’t have it in digital with random hex codes all over the shop.
Andy: So it’s just great. I love that level of control. Actually, I think it aids in creativity because you’re not thinking about unimportant stuff anymore, you’re just thinking about what you’re doing with it.
Drew: Does the implementation of those design tokens matter particularly with the approach? Is it always CSS custom properties?
Andy: I think that’s a really important point with CUBE. Some of the responses I’ve had, people have struggled with this a little bit. There’s no mention of technology in it whatsoever. The only technology that’s consistent is CSS. You can do it however you want. You could do all this with whatever CSS and JS things people are doing now, or you could it with just Vanilla CSS. You could do it with Sass. I do it with Sass. Less, if that’s what you’re still doing. All these available technologies, post CSS, all these things. You can do however you want to do it, it doesn’t matter.
Andy: The idea is that if you follow those sort of constructs, you’ll be fine. That’s the idea behind it. It’s a very loose and not strict as some of the methodologies are. I’ve seen it with BEM especially, people get really ingrained in the principles of BEM to the point where it’s like you’re not even solving the problem anymore. I think that you’ve got to be flexible. I said it in this talk last year. I was like, “If you stick to your guns too tightly, you can actually cause problems for yourself in the long run because you try and follow a certain path, and you know it’s not working anymore.” You should always be flexible and work with a system rather than working to the letter to it.
Drew: So the B, the B is Block. You’ve talked about this idea, that by the time you get down to the block level, most of everything should be in place, and then the block level styling is only really concerned with the actual very detail of a particular component. Generally, is the concept of a block similar to what people will be familiar with?
Andy: Oh, absolutely, yeah. So imagine your BEM component and take all the visual stuff out of it, and that’s what you’re left with, essentially, the block. This is what I struggled to articulate when I first started thinking of this methodology. A block is actually really a C, it’s a composition, but that makes it really difficult because you’re into recursive territory there and I think people’s brains would explode. But really that’s what a block is, it’s actually another compositional layer but more of a sort of strict context, so like your card, your button, your carousel, if that’s what you like doing still, and all that sort of stuff.
Andy: It’s like a specific thing, a component, and then inside of there you’re setting specific rules for it to follow, really ignoring the rest so you’re not… You might apply tokens in the blocks, and I do do that still, but really it’s more layout orientated, is a block, as far as I work with them, or at least taking the token and applying it in a specific way, like a button hover status, stuff like that. So really your block should be tiny by the time you get down to them, they shouldn’t be really doing much at all.
Drew: So it could be as small as a hyperlink.
Andy: Yeah.
Drew: But it could also be a compound collection of other blocks?
Andy: Yeah. Like a module sort of thing. You could definitely do that. Because, again, that goes back to the sort of compositional aspect of it, is that whatever goes in it shouldn’t matter. The good example of that is like the card. So the content of a card is, say, like a heading, a summary and a button. You shouldn’t really be specifically targeting those three elements. You should be saying, “Look, anything that happens to find itself in content, have some flow rules in there and have some sort of compositional layout rules,” and then it doesn’t matter what you put in there. You might decide that you want to put an image in that content thing and it should just work, it should just look fine.
Andy: That’s the whole point of working with CSS. It’s a very forgiving way of working with CSS. You’re making your life a lot easier by being less rigid because when stuff accidentally finds itself in something, which it will, it doesn’t look horrific as it could do if you were being more specific about things, is what I’ve found.
Drew: I definitely need a lot of forgiveness around my CSS!
Andy: I know you do!
Drew: Cheers! So that’s the B. The last thing is E: E is Exception. Now we’re not talking about error messages, are we?
Andy: No, no. It’s a sort of-
Drew: We’re not talking about JavaScript exceptions.
Andy: Yeah, yeah. There should be none of that at this point. I should hope not anyway, otherwise you really are in the woods at that point: I don’t think I’m going to be able to help you! The whole idea of this is… so you’ve created the context with your block, and an exception is exactly that, it’s like an exception to the rule: so a flipped card, or it might be a ghost button. So you know those buttons that have just got a border and a transparent background? That would be an exception because a button has probably got a solid background color and then the label color. So it’s creating a sort of distinct state of variation.
Andy: The reason why I do this with data attributes instead of classes, and the reason why that is is because a) I think it’s nice to have a distinction. So when you’re scanning through lots of HTML, you can see data, hyphen something, you’re like, “Right, okay, something has definitely changed on this element.” The other thing is that it’s very nice to give JavaScript access to that state, and vice versa as well. So I really like applying state with data attributes in JavaScript. I think that is essentially what they’re for, a sort of communication layer. The harmony between them seems to work really well.
Andy: So a good example is, say you’ve got a status message and then JavaScript will add data state is either success, error or information, or something. You can then hook into that with your exception styles in CSS. So you know that’s an exception of the status component and it’s going against its default state. So it’s just a really handy way of working with things. It’s predictable on both ends: it’s predictable on the CSS end, and it’s predictable on the JavaScript end as well.
Drew: I guess it’s quite nice that something that class names don’t give you is a property and value. So if you want to have something like that which is the state, and it can either be success or failure or warning or what have you, you can specifically address that state property and flip its value. Whereas with a big long list of class names, if you’re manipulating that in JavaScript, for example, you’re going to have to look at each one of them and add that business logic in there that says, “I can only set one of these,” and what happens if two of those classes are applied to the same element? You can’t get that with a data attribute, it only has one value.
Andy: Yeah. That’s a good way of saying that, yeah. It is very helpful, I’ve found, to work like that.
Drew: That’s quite interesting. I don’t think I’ve seen any other methodologies that take that approach. Is that completely unique to CUBE, doing that?
Andy: It might be. I don’t really pay much attention to other stuff, which I should do. Someone else is probably doing that. I’ll tell you now, it’s been the most controversial aspect of it. Some people really did not like the idea of using data attributes. The thing is as well, and how I respond, is, do what you want. We’re not telling you to do things in a certain way, it’s just suggestions. If you want to do exceptions to CSS classes, like modifiers, then knock yourself out. The CUBE police aren’t going to come knocking at your door. It’s absolutely fine.
Andy: The CUBE thing is a thinking thing, it’s a structure. You apply that structure however you want to apply it, with what tooling you want, or whatever technology you want. As long as you keep things consistent, that’s the important thing.
Drew: So there’s no such thing as pure CUBE?
Andy: The way I write it is pure CUBE, Drew. Everyone else is just a fake, it’s just a weak immitation.
Drew: Apart from to you, no-one can say, “That isn’t textbook CUBE.”
Andy: No, that’s it. No-one can dispute that really, can they? So, yeah, I’ll go with that. Gives you a bit of clout or something, I think, something like that.
Drew: Can you mix and match a CUBE approach with other methodologies? Can you use bits of BEM?
Andy: Yeah, I reckon so. I’ve been thinking about it a little bit because I’m going to do some more stuff on it soon because it’s become quite popular, so people will want more work. One thing I’m going to look at is how to approach using the CUBE methodology with something existing.
Andy: So there’s two opposite ends of the scale. A good question that people have asked is: “How does this work with every layout, the other stuff?” I’m like, basically, every layout is the C. That’s what every layout is, it’s the compositional layer. Then someone else asked, “Well, how would this work with something like Atomic Web Design, like their stuff that Brad Frost did? It’s like, well, you could break those pieces up and apply them at each level. Atomic Design goes all the way down into the micro detail. It’s abstracting that into using, right, okay, well I can apply this with utilities, so the molecules, I think. I can apply that with the utilities, and it’s translating what you know already into this slightly different structure of working.
Andy: Really, it’s a renaming for a lot of things. I’ve not invented anything here, I’ve just sort of, like I say, I’ve just stolen things that I like. I love the way that some of the Atomic Design stuff is thought about. That’s really some smart work. And BEM. The stuff Harry did, the Inverted Triangle CSS, I thought that was really cool. So I’ve just sort of nicked bits that I like from each one of them and sort of stitched them all together into this other hybrid thing, approach. More to come, I think.
Drew: Can the CUBE approach be applied to existing projects that already have CSS in place or is it something you really need to start on a fresh project with?
Andy: That very much depends. So if you’ve got like a bootstrap job and it’s just got thousands of lines of custom CSS, that I’ve definitely been involved in before, then I think you might be trying to put a fire out with a bottle of water at that point. But if you… say, for instance, if you’ve got a rough BEM setup and it’s gone a bit layer-y, you could use CUBE to refactor and actually pull it back into shape again.
Andy: It depends, the answer to that one. But it’s doable, as with everything. If you really want it to work, Drew, you can do it if you want, can’t you? The world is our oyster!
Drew: Especially if your BEM site’s gone layer-y.
Andy: Yeah. Nothing worse than a layer-y BEM site!
Drew: I’ve noticed in the examples that you’ve given… and I’ve got an eagle eye, I’ve seen you’ve been doing this for a while… a lot of your class values in the HTML attribute are wrapped in square brackets.
Andy: Oh, God, yeah. Tell you what, Drew-
Drew: What is that about? What is that about?
Andy: I’ll tell you what, if there’s ever one thing that I’ve done in my whole career that’s just been absolutely outrageously controversial… and you follow me on Twitter, you’ve seen what comes out of my mouth… it’s those bloody brackets! My, God! People either love them or hate them. They’re Marmite, they are.
Andy: The reason I do them is a grouping mechanism. So if you look at the way that they’re structured, the way I do it is, block at the start and then I’ll do a utilities after that. Then what I might do is, in between a block group and a utility group, there might be another block class. So a good example of that would be… we’ll go back to the card again. But then say that there’s a specific block called a CTA, like a call to action. You might have that applied to the card as well, and then your utilities are enforcing the design attributes, so the colors and all that business. So then you’ve got three groups of stuff.
Andy: When you come to it, if you’ve got that order in your head each time, you know, okay, right, this first group’s blocks. Oh, that’s looks like another block. I’ve got that one. Then it’s like, right, they’re definitely utility classes. Then what I might even do is, if there’s a lot of design token implementation, have that in a separate group. So it’s just very clear what each group is doing, and there’s a separation inside of the classes there as well. I’ve found it really helpful. Some people find it incredibly offensive. It’s definitely a do it if you want to do it. Definitely you don’t have to do it.
Andy: It’s quite funny, when I published that article, so many people finished halfway through to ask me, “What is it with these brackets?” I was like, “Did you finish the article? Because there’s a big section at the end where it explains exactly what they’re doing,” to the point where I actually had to write a bit in the middle of the article of, “If the brackets are essentially doing your head in, click here and I’ll skip you all the way down to that explanation bit so you can just read about them.” It can be quite controversial.
Andy: When I’ve worked on really, really complex front-ends… and we did a little bit of stuff together, didn’t we, last year?
Drew: Yeah.
Andy: You’ve seen the sort of design implementation on that project that we were on. It requires that sort of grouping because there’s just so much going on at the time, there’s so much different stuff happening. I’ve just found it really, really useful over the years, and also get lots of questions about it, to the point where I was almost going to write just one page on my website that I could just fire people to to answer the question for them.
Drew: Slash, what’s with the brackets?
Andy: Yeah. Slash, brackets. Have you seen that new Hey Email thing that’s just come out? They’ve bought a domain of itsnotatypo.com, just to answer the whole Imbox, like im with an M rather than an in. Basically, I was like, “I think I need to do that,” like, whatswiththebrackets.com, and just do a one-pager about it.
Drew: It strikes me that the approach with brackets actually could be something that might be useful when using things like Tailwind or something that has a lot of classes because that can-
Andy: Yeah. Oh, God, yes.
Drew: You have classes that are addressing your break points and what have you, and then you’ll have things that are for layout, things that are for color or type, or what have you. So it might also be a useful way of dealing in situations like that.
Andy: I’d definitely agree with that. A good analogy… not analogy. A good bit of info about Tailwind is that I actually quite like Tailwind. I’ve used that on very big projects. The one thing that really opened my eyes to Tailwind though was when I saw a junior developer try to work out what was going on, and it was really, really eye-opening because they just didn’t have a clue what was happening.
Andy: I think that’s one problem I’ve found with these sort of over-engineered approaches, which I think it’s fair to say Tailwind is, is that there’s a certain skill level that is required to work with it. I know the industry tends to have an obsession with seniority now, but there’s still people that are just getting into the game that we need to accommodate, and I think having stuff that’s closer to the language itself is more helpful in those situations because they’re probably learning material that is the language as it is. So I think it’s just a bit more helpful. Especially having a diverse team of people as well. Just food for thought for everyone.
Drew: People might look at all the different methodologies that are out there and say, “This is evidence that CSS is terrible and broken, that we need… all these problems have to be solved by hacking stuff on top. We need tools to fix bits of CSS. We need strict procedures for how we implement it, just to get it to work.” Should the platform be adapting itself? Do we need new bits of CSS to try and solve these problems or are we all right just hacking around and making up funny acronyms?
Andy: I think the power of CSS, I think, is its flexibility. So if you’re going to program CSS, a lot of the knowledge is less of the syntax and more of the workings of a browser and how it works. I think that might be a suggestion, that the problem is that people might not have learnt CSS quite as thoroughly as they thought they might have learnt it, who created these problems. I’ve seen that in evidence myself. I spotted a spacing mechanism that had been invested, which was very complicated, and I thought, “This person has not learnt what padding is because padding would actually fix this problem for them, understanding how padding works and the box model.” That’s not to be snidey about it.
Andy: We work in an industry now that moves at an even faster pace than it has done previously and I think there’s a lot less time for people to learn things in detail. But, on that front, I think CSS still does have work to do in terms of the working group, who I think do a bloody good job. A great, shining example of their work was the Grid spec which was just phenomenal. The way that rolled out in pretty much every browser on day one, I thought that was so good.
Andy: But we’ve got more work to do, I think, and I think maybe the pace might need to increase a little, especially with stuff like container queries, we all love talking about them. Stuff like that I think would help to put CSS in a different light with people, I think. But I think CSS is brilliant, I love it. I’ve never had a problem with it in lots of years really. I do find some of the solutions a bit odd, but there you go.
Drew: What’s the response been like to CUBE since you published the article?
Andy: Mind-blowing. I honestly published it as just supporting material, and that’s all I expected it to be, and it’s just blown up all over the place. A lot of people have been reading it, asking about it, been really interested about it. There’s definitely more to come on it.
Andy: I did say in the article, I said, “Look, if people are actually quite interested in this, I’ll expand on this post and actually make some documentation.” I’ve got bits of documentation dotted around all over the place, but to sort of centralize that, and then I was thinking of doing some workshops and stuff. So there’s stuff to go. It’s how Every Layout started as well. We both had these scattered ideas about layout and then we sort of merged them together. So something like that, I suppose, will come in the future.
Drew: Are there any downsides that you’re aware of to using CUBE? Are there problems that it doesn’t attempt to solve?
Andy: Yeah. This accent, Drew, it just won’t go way, no matter what I do! In all seriousness, I think CUBE’s got as close as I can get to being happy with the front-end, which is saying a lot, I think. You never know, things might change again. This has evolved over more recent years. Give it another five years, I’ll probably be struggling with this and trying something else. I think that’s the key point, is to just keep working on yourself and working on what you know and how you approach things.
Andy: This definitely won’t work for everyone as well, I know that for a fact. I know that from my comments. I don’t expect it to work for everyone. I don’t expect anything to work for everyone. It’s the same with JavaScript stuff: some people like the reactive stuff and some people don’t. It is what it is. We’re all people at the end of the day, we all have different tastes. It’s all about communicating with your teammates at the end of the day, that’s the important thing.
Drew: I know you as a very talented designer and developer and you, like many of us, you’re just working on real projects all day, every day. But you’ve recently started publishing on this site, Piccalilli, which is where the CUBE CSS introduction article was. So Piccalilli is kind of a new venture for you, isn’t it? What’s it all about?
Andy: Very kind of you to say, Drew. You’ve actually worked with me, so that’s high praise. But the Piccalilli thing is an evolution. So I’m a freelancer. I do client work, but I think this has become apparent with the pandemic, that that is not the most sustainable thing in the world in some industries. I think freelancing can be very, very tough, as a developer and designer. It’s something that I’ve been doing it for so long now, 10 years… well, 12 years now actually.
Andy: I fancied doing something a bit different and applying the knowledge that I’ve got and actually sharing it with people. I’ve always been very open and sharing, and I wanted to formalize that. So I created Piccalilli to write tutorials, but mainly for courses that I’m producing: that’s the main meat and potatoes. And then there’s the newsletter which is… people are really enjoying the newsletter because I share cool things I’ve found on the internet every week. That’s the backbone of it. It’s just going really well. That’s essentially where I want to see myself doing more and more full-time, as the years go on, I think.
Drew: So what’s coming next for Piccalilli? Have you got anything that you’ve got coming out?
Andy: Thanks for the door open there, Drew! By the time this recording goes out, the first course will be live: Learn Eleventy From Scratch, and that’s where we learn how to build a Gatsby website! No, you learn how to build an Eleventy site. So you start off with a completely empty directory, there’s nothing in it, it’s empty, and then at the end of it you’ll finish up with this really nice-looking agency site. We learn all sorts in it. You learn how to really go to town with Eleventy. We pull remote data in from places. We use CUBE CSS to build a really nice front-end for it.
Andy: If you want to get into the Jamstack and you want to get into static site generators, or just how to build a nice website, it’s just a really handy course, I hope, for that. It’s currently being edited within an inch of its life as we’re talking. It’s going to be cool, I hope, and useful. But that’s an accumulation of a lot of stuff I’ve been doing over the last couple of years. So it should be fun.
Andy: So buy it, and I’ll do a discount code, do like smashingpod for 40% off, and you can get it when it comes out.
Drew: Amazing. We’ll link that up. Have you figured out how to spell Piccalilli reliably yet?
Andy: I was on with Chris and Dave with the ShopTalk Show and I said on there, “If there’s ever one thing you want to hire me for it’s to write Piccalilli by hand first time without even thinking about it,” because I’ve written that word so many times that I just know exactly how to spell it off by heart. So the answer to your question is yes.
Drew: Well, I’m still struggling, I’ll tell you that much!
Andy: It is hard. Oh, God. I totally empathize. It took me a long time to learn how to spell it but it’s one of those words in our vocabulary. This year I’m trying to spell necessary without making a spelling mistake!
Drew: So I’ve been learning all about CUBE CSS. What have you been learning about lately, Andy?
Andy: Do you know what? This is going to surprise you, Drew. MySQL is what I’ve been learning about recently. So, basically, Piccalilli is totally self-published. It’s an Eleventy site but it’s got an API behind it, and that’s got a MySQL database behind it. The stuff that gives people content that they’ve purchased requires some pretty hefty querying. So I’ve just actually properly invested in some MySQL… especially the difference between joins, which I didn’t actually realize there was a difference between each type of join. So that’s been really useful and it’s resulted in some pretty speedy interactions with the database.
Andy: I used to run this thing called Front-End Challenges Club and when I first launched it it just collapsed and died on itself because MySQL was shoddy to say the least. So I’ve really been learning how to do that because I’m not a backend person at all, I’m a pixel-pusher. So it’s definitely not in my remit. That’s more your neck of the woods, isn’t it? I find it really cool, MySQL. I actually really like writing it. It’s a really nice, instructional language, isn’t it?
Drew: It is, it’s great. I learnt SQL at school.
Andy: Wow!
Drew: We’re talking like 20 years ago now.
Andy: Did they have computers in those days?
Drew: They did, yeah. We had to wind-
Andy: Did you have to write it by hand?
Drew: We had to wind them up! We did. But, I tell you, for a developer, it’s akin to learning your times tables: one of those things that seems like a bit of a chore but once you’re fluent, it just becomes useful time and time again.
Andy: Yeah. For sure. There’s really tangible differences as well. You really see the difference in speed. I really like working with Node because that’s really fast but Node and MySQL is just… not a very common choice, but I think it’s a pretty good choice. I think it works really, really well. So I’m happy with that. As you know, I don’t like writing PHP. So that’s never going to be an option.
Drew: If you, dear listener, would like to hear more from Andy, you can follow him on Twitter where he’s at hankchizljaw. You can find Piccalilli at piccalil.li, where you’ll also find the article describing CUBE CSS, and we’ll also add links to all of those in the show notes, of course.
Drew: Thanks for joining us today, Andy. Did you have any parting words?
Andy: Stay safe, and wear your mask.
(il)
Website Design & SEO Delray Beach by DBL07.co
Delray Beach SEO
Via http://www.scpie.org/smashing-podcast-episode-19-with-andy-bell-what-is-cube-css/
source https://scpie.weebly.com/blog/smashing-podcast-episode-19-with-andy-bell-what-is-cube-css
0 notes
laurelkrugerr · 4 years
Text
Smashing Podcast Episode 19 With Andy Bell: What Is CUBE CSS?
We’re talking about CUBE CSS. What is it, and how does it differ from approaches such as BEM, SMACSS, and OOCSS? Drew McLellan talks to its creator, Andy Bell, to find out.
Today, we’re talking about CUBE CSS. What is it, and how does it differ from approaches such as BEM, SMACSS, and OOCSS? I spoke to its creator, Andy Bell, to find out.
Show Notes
Note: Listeners of the Smashing Podcast can save a whopping 40% on Andy’s Learn Eleventy From Scratch course using the code SMASHINGPOD.
Weekly Update
Transcript
Drew McLellan: He is an educator and freelance web designer based in the U.K. and has worked in the designer web industries for well over a decade. In that time he’s worked with some of the largest organizations in the world, like Harley-Davidson, BSkyB, Unilever, Oracle, and the NHS. Alongside Heydon Pickering, he’s the co-author of Every Layout, as well as running Front-End Challenges Club which is focused on teaching front-end development best practice via short, fun challenges.
Drew: His latest venture is Piccalilli, a website newsletter with tutorials and courses to help you level up as a front-end developer and designer. So we know he’s an experienced developer and educator, but did you know he was the first person allowed to compete at Crufts with a panda?
Drew: My Smashing friends, please welcome, Andy Bell. Hi, Andy, how are you?
Andy Bell: I’m smashing, thanks. How are you?
Drew: I’m very good, thank you very much. Now I wanted to talk to you today about something that you posted on your site, Piccalilli, about a CSS methodology that you’ve developed for yourself over recent years. First of all, I guess we should probably explore what we mean by a CSS methodology because that could mean different things to different people. So when you think of the CSS methodology, what is it to you?
Andy: That’s a good, hard question to start with, Drew. Appreciate that, thank you!
Drew: Welcome!
Andy: It’s a tricky one. So, for context, I’ve used BEM for a long time, and that is Block Element Modifier. That’s been around for a long time. The way that I look at a CSS methodology is, it’s not a framework, it’s an organization structure. That’s how I like to see it. It’s like a process almost. It’s like you’ve got a problem that you need to solve with CSS and you use the methodology to solve it for you and keep things predictable and organized. BEM’s just legendary for that because it’s been wildly successful.
Andy: Then you could almost qualify things like the style components and that sort of thing. You can almost say that they’re methodology orientated even though they’re a bit more framework entwined, but still, it’s a methodology of breaking things into tiny molecules. So essentially that’s what I’m trying to do with CUBE CSS as well. A thinking structure, I think I described it as.
Drew: So it’s an application of process for how you architect and you write CSS, and it’s not so much anything that’s based on tools or any other sort of technology, it’s just a sort of work flow. So there’s lots of different approaches out there. You mentioned BEM. There’s SMACSS, OOCSS, Atomic CSS. And then you’ve got these sort of unusual lovechild approaches like ABEM. Have you seen that one?
Andy: Yeah.
Drew: Why publish your own?
Andy: Yeah, yeah. Why make your own? That’s a very good question. I think those who know me well know I like to sail against the tide a lot. It’s mainly because I tend to do lots of varied projects as well, in varied teams. So it’s very hard, I’ve found, to work with BEM with a traditional developer because they’re used to using CSS for what CSS is all about: the cascade, et cetera, and that’s why I sort of stole that from the language.
Andy: On the other flip side is that less structured methodologies, it’s harder to work with a programmer, JS sort of person because they like structure and organization and small components, which is understandable working with the language that they work in.
Andy: So I found myself in these positions where I was working with different types of people, different types of projects where one methodology wasn’t quite working. Over the years, I’ve just been playing around with this idea of how things go, and then there’s the stuff me and Heydon did, Every Layout, which sort of enforced the big part of it, which is the C, the composition part, and then I’ve just sort of evolved it very rapidly over the last six months.
Andy: The only reason I wrote an article about it was because I was just doing this course and I thought I’d better write some supplementary material to go with it so people understand it, and it’s absolutely blown up. So maybe we’re not over methodologies quite yet, Drew.
Drew: So the course material that you’ve been putting together actually uses CUBE CSS as its methodology, does it?
Andy: Yeah. So a good 50% of the course is actually front-end, even though it’s a course unlimited. It’s so, so deeply entwined in the way that we build the front-end that I couldn’t just say, “Oh, by the way, this is how I write a nice CSS,” and then leave it. I know people like to get into the detail, so I was like, what I’ll do is, I’ll write this post that’s really long and really detailed and then if someone wants to skill up and really understand what we’re doing, then they can do, and the rest is from there. And here we are today, Drew, sitting and chatting about it.
Drew: So if somebody already understands BEM and is maybe already using BEM, as an example, because that’s probably one of the widest adopted methodologies, isn’t it? So if they’ve already got an understanding of BEM and they’re coming to CUBE, is that something that they would find easy to adopt? Are there many similarities or is it completely different?
Andy: Yeah. I’d say going from BEM to CUBE is probably a smooth transition, especially the way I like to still write the CSS for CUBE. So the majority of stuff’s happening at a higher level. So it’s happening at the cascade level and it’s happening global CSS, using the utilities to do a lot of the stuff. But when you come into the nuts and bolts of it, it’s very BEM-like components, blocks and elements. The only thing that’s sort of different from BEM is, instead of having modifiers, we use this thing called exceptions instead which is, instead of using CSS classes, it turns to data attributes, which I think gives a nice bit of separation and a real exception, which is what a modifier should be.
Andy: Part of the reason why I’ve sort of sailed away from BEM was because I found the way I was working with it, especially in design systems, was modifiers were dominated and it became a problem because it was like, what is the role of my block at this point? Because if I’m modifying it to the point where it’s unrecognizable regularly, then is this methodology still working how it’s supposed to work?
Andy: Then there’s the whole design token stuff, the stuff that Jina did with the Lightning Design System which we’ve all started adopting now. The utility class stuff really started to make sense with that approach. So I just sort of smushed all the things I like about other people’s work and slotted into my own instead.
Drew: You talk about with BEM, the sort of modifier approach kind of getting out of control. Was that one of the main pain points with BEM that CUBE tries to address?
Andy: Yeah, absolutely. I do like the modifier approach with BEM, it does make sense. What I like about BEM is something that I still do, is the double underscore for an element, and then there’s the double dash for a modifier. I like that way of organizing things. It was just a case of okay, well, a lot of the modifiers I can actually account for with utility classes and then the other bits…
Andy: So the example I use in the article is, imagine you’ve got a card and then the card is flipped, so the content appears before the image. So then that makes sense, to see display: flex and then you reverse it, reverse the order. That makes sense, to have an exception rule for that because it’s an exception of the card’s default state, and that’s how I like to see it. It’s like an affected state on that component, is what an exception is, and that makes sense.
Andy: With a lot of the stuff that I’ve done more recently, the modern front-end stack with reactive JavaScript, there’s a lot of state changing and it’s makes sense to handle it appropriately between CSS and JavaScript because they are becoming more and more entwined with each other, whether you like it or not. It’s a common language for them. As you can see by my face, very much not, but there you go. You’re probably thinking, “Actually, I’ve been working with react quite a lot recently, so I’m the other way round.” So I can see that as well.
Drew: So let’s get into CUBE then. So CUBE stands for Composition Utility Block Exception. Is that right?
Andy: Yeah. That’s the one.
Drew: What on Earth does that mean?
Andy: Oh, mate, you should have heard it before! I was doing a talk last year. I did a talk, and it was called Keeping it Simple with CSS that scales, and in there I sort of introduced an earlier version of it called CBEUT, which was Cascade Block Element Utility Token. It was rubbish. I hated the name of it. I did it a couple of times, this talk last year, and I really didn’t like the name. Then when I came to doing this stuff this year, I thought, “I really need to think about what it actually is and what it’s called.” I think CUBE is a little less rubbish. I think that’s the best way I can describe it.
Andy: But then, names are always rubbish for these things, aren’t they? I mean, like BEM, what a rubbish name that is! But we all do it. Look at Jamstack: that’s a terrible name as well, isn’t it?
Drew: My lips are sealed!
Andy: Your boss is going, “What?” It’s true. It’s just the way it is, isn’t it, in our industry.
Drew: It seems that a lot of the CSS methodologies try and work around some of the features of CSS, things like the cascade. My understanding from what I read is, CUBE tries to make use of those sort of features and properties of CSS.
Andy: Yeah. A good analogy for it is SCSS, like Sass, is an extension of the natural CSS language, isn’t it? You’re pretty much right in CSS still. So CUBE CSS is like that. So it’s an extension of CSS. So we should still write CSS, as CSS should… well, it’s supposed to be written. Let’s be honest, that how it’s supposed to be written, is the name gives it away: Cascading Style Sheets. So it’s embracing that again because what I’ve found is that I’ve gone all the way down to the micro-optimization level. I’ve been down the path that I see a lot of people going down recently where… and I’ve mentioned this in the article as well, where I can see… there’s some evidence of it recently. I’ve spotted people have been creating spacer components and stuff like that, and I understand that problem, I’ve been in that situation.
Andy: The way I fixed it was, instead of drilling down and trying to micro-optimize, I actually started thinking about things on a compositional level instead because it doesn’t matter how small your components are, at some point they’re going to be pages, they’re going to be views. You cannot avoid that, that’s how it’s going to be. So instead of trying to say, “Right, I need these tiny little helpers to do this layout,” you say, “Right, I’ve got a contact page view, or a product page view, and that’s a skeletal layout composition. Then inside of that I can slot whatever components I want in there.” We’ve got things like Grid and Flexbox now which make that much more achievable, and you can essentially put whatever you want inside of the skeletal layout, it doesn’t matter. Then the components should, at that point, behave how you want them to behave, with or without container queries.
Drew: This is the composition part of CUBE where you’re looking at things at more of a macro level, looking at how components can be composed into a view to create the sort of pages that you need to create for a site or an app or what have you.
Andy: So it’s creating rules, essentially. It’s like guidance. It’s trying to get guidelines for something. It’s not like a strict rules, like, you should do this, you should do that. That’s essentially what you’re doing with the browser, with this methodology, is you’re saying… you’re not forcing it to do anything. You’re saying, “Look, ideally, if you could lay it out like this, that would be great, but I understand that that might not be the case so here’s some bounds and some upper and lower levels that we can work with. Do what you can, and cheers.” Then you just chuck some components at it and let it just do what it does. You add enough control in there for it to not look rubbish.
Andy: So a good example would see… we do a layout in Every Layout called the switcher, which essentially will in-line items until a certain point where the calculation that works out how wide it should will just stack them on top of each other. But because we add margin to the in-line and the block, it works, regardless of what the state of it is, it still looks fine. That’s the idea, is that we’re not telling the browser to say, “You must layer this three column grid out.” We’re saying, “If you can layer a three column grid out, do it. Otherwise, just stack and space instead.” So it’s that sort of methodology, of letting the browser do its job really.
Drew: Many of the different approaches that have come along for CSS over the last few years have very much focused on the component level of dealing with everything like it’s a component. CUBE doesn’t downplay that component aspect so much, it just gives this extra concept over the top of taking those components and composing them into bigger layouts, rather than just saying the layout’s just another component.
Andy: Yeah, that’s a good point, yeah. I think the thing to say about components is they’re important, especially in modern front-end stuff. We do a lot of component stuff, system stuff. But the way I see a component is, it’s a collection of rules that extend what’s already been done.
Andy: The point I make in the article is, by the time you get down to the block level, most of your styling has actually been done, and really what your component is doing is dotting the Is and crossing the Ts and it’s saying, “Right, in this context…” So for a card, for example, make the image have a minimum height of X, and add a bit of padding here. Do this, that and the other. Put a button here. It’s just sort of additional rules on top of what’s already been inherited from the rest of the CSS. I think that’s probably the best way to describe it.
Andy: Whereas in BEM, the component is the source of truth. Until you put that class on the element, nothing has been applied at that point, and that method works. I just found I wrote more CSS by doing that, and more repetitive CSS, which I don’t like doing.
Drew: Would you consider the typography and the colors and the vertical rhythms, spacing, and all of that, is all that part of the idea of composition in this model?
Andy: Yeah. In a global CSS, yeah, absolutely. The vertical rhythm especially, and the flow. We did an article on that at 24 ways, didn’t we, a couple of years ago, the flow and rhythm component. That was a sort of abstract from this approach as well, where you set a base component which essentially uses the lobotomized owl selector. I don’t know how I’m going to describe that on the radio, but we will. We’ll just put, I think, in the show notes about the Heydon article or something. But essentially that, it selects child elements… sorry, sibling elements.
Andy: So it says, “Right, every element that follows element X have margin top of CSS costs and property value,” and then the beauty of that is then you can set that CSS custom property value on a compositional context as well. So you can say, “Right, in this component, if there’s some flow on the go, we’ll set flow space to actually be two rem because we want it to be nice and beefy, the wide space.” Then in another one you might say, “Actually, I want flow space to be half a rem because I want it to be tight.” This is all happening, all the control is coming from a higher level and then what you’re doing is, you’re adding contextual overrides rather than reinventing it each time, reinventing the same thing over and over again.
Drew: So that’s the C, Composition. Next we’ve got U, which is Utility. So what do we mean by utility?
Andy: So it’s a class that does one job, and it does it really well. That could be an implementation of a design token which… it’s an abstract of properties. Usually it’s colors or typography styles, sizing, and rules like that. The idea is you generate utility classes that apply those. So you’ve got a utility that will apply background primary, which is like the primary color, and then color primary, which is the text color. Then you might generate some spacing tokens for marginal padding, and all those sorts of things. They just do one job. They just add that one spacing rule, that one color rule, and that’s it.
Andy: But then you’ve got other utilities as well. So a good example is a wrapper utility. What that will do is, it will put a maximum width on an element and then it will put left and right auto margin to sit it in the middle of the thing. So it’s just got one job, and it’s just doing it efficiently and well.
Andy: So you’ve got your global styles, you’ve done a lot of your typography settings and a lot of your flooring space. Your composition’s then giving context and layout. Then utilities are applying tokens directly to elements to give them those styling that you need. So like a heading, for example, you’re saying, “I want this to be this size and I want it to have this lead in, and I want it to have this measure.” Then at that point… this is what I was saying about the blocks… then you go further down the stack, and you’ve already done most of the work at the point.
Andy: So they give you this really efficient way of working, and because HTML sort of streams down the pipe as well, it’s really nice to abstract the workload onto HTML rather than CSS as well, I’ve found. I used to really get into utility classes, like in this sort of old curmudgeon style of, “Oh, separation of concerns,” but I actually think it’s a really decent way of working. I mention in the article that I actually like Tailwind CSS. I think it does work, and I really like using it for product typing because I can really put something out really quick. But I think it just goes a little bit too far, does Tailwind, whereas I like to rain it in when it goes beyond just applying a single rule on a class. So that’s it, I think. Do you?
Drew: So, yeah, you talk in the article a lot about design tokens, which is something that we’ve talked about on the Smashing Podcast with Jina Anne back in episode three, I think it was. So it sounds like design tokens are a really fundamental aspect.
Andy: Yeah. Oh, God, yeah. I remember so vividly when Jina was doing the Lightning Design System stuff because I was building a design system at the time, or something that resembled a design system, and we were struggling to get executive approval of it. When the Lightning Design System came out, I literally just sent them link after link and I said, “This is what we’re doing. We’re building a design system. This is what Salesforce are currently using it for.” I remember her work at the time actually helped me to get stuff through the door.
Andy: Then the design token stuff has always stuck with me as being a really good way of applying these rules. Because I’m a designer by trade, so I can just sort of see that organization and the ability to organize and create a single source of truth being really useful because it’s something we’ve not really had in digital design, especially in the Adobe era of working with Photoshop and stuff, we just didn’t have that lUXury. We had it in print with the Pantone Book but we didn’t have it in digital with random hex codes all over the shop.
Andy: So it’s just great. I love that level of control. Actually, I think it aids in creativity because you’re not thinking about unimportant stuff anymore, you’re just thinking about what you’re doing with it.
Drew: Does the implementation of those design tokens matter particularly with the approach? Is it always CSS custom properties?
Andy: I think that’s a really important point with CUBE. Some of the responses I’ve had, people have struggled with this a little bit. There’s no mention of technology in it whatsoever. The only technology that’s consistent is CSS. You can do it however you want. You could do all this with whatever CSS and JS things people are doing now, or you could it with just Vanilla CSS. You could do it with Sass. I do it with Sass. Less, if that’s what you’re still doing. All these available technologies, post CSS, all these things. You can do however you want to do it, it doesn’t matter.
Andy: The idea is that if you follow those sort of constructs, you’ll be fine. That’s the idea behind it. It’s a very loose and not strict as some of the methodologies are. I’ve seen it with BEM especially, people get really ingrained in the principles of BEM to the point where it’s like you’re not even solving the problem anymore. I think that you’ve got to be flexible. I said it in this talk last year. I was like, “If you stick to your guns too tightly, you can actually cause problems for yourself in the long run because you try and follow a certain path, and you know it’s not working anymore.” You should always be flexible and work with a system rather than working to the letter to it.
Drew: So the B, the B is Block. You’ve talked about this idea, that by the time you get down to the block level, most of everything should be in place, and then the block level styling is only really concerned with the actual very detail of a particular component. Generally, is the concept of a block similar to what people will be familiar with?
Andy: Oh, absolutely, yeah. So imagine your BEM component and take all the visual stuff out of it, and that’s what you’re left with, essentially, the block. This is what I struggled to articulate when I first started thinking of this methodology. A block is actually really a C, it’s a composition, but that makes it really difficult because you’re into recursive territory there and I think people’s brains would explode. But really that’s what a block is, it’s actually another compositional layer but more of a sort of strict context, so like your card, your button, your carousel, if that’s what you like doing still, and all that sort of stuff.
Andy: It’s like a specific thing, a component, and then inside of there you’re setting specific rules for it to follow, really ignoring the rest so you’re not… You might apply tokens in the blocks, and I do do that still, but really it’s more layout orientated, is a block, as far as I work with them, or at least taking the token and applying it in a specific way, like a button hover status, stuff like that. So really your block should be tiny by the time you get down to them, they shouldn’t be really doing much at all.
Drew: So it could be as small as a hyperlink.
Andy: Yeah.
Drew: But it could also be a compound collection of other blocks?
Andy: Yeah. Like a module sort of thing. You could definitely do that. Because, again, that goes back to the sort of compositional aspect of it, is that whatever goes in it shouldn’t matter. The good example of that is like the card. So the content of a card is, say, like a heading, a summary and a button. You shouldn’t really be specifically targeting those three elements. You should be saying, “Look, anything that happens to find itself in content, have some flow rules in there and have some sort of compositional layout rules,” and then it doesn’t matter what you put in there. You might decide that you want to put an image in that content thing and it should just work, it should just look fine.
Andy: That’s the whole point of working with CSS. It’s a very forgiving way of working with CSS. You’re making your life a lot easier by being less rigid because when stuff accidentally finds itself in something, which it will, it doesn’t look horrific as it could do if you were being more specific about things, is what I’ve found.
Drew: I definitely need a lot of forgiveness around my CSS!
Andy: I know you do!
Drew: Cheers! So that’s the B. The last thing is E: E is Exception. Now we’re not talking about error messages, are we?
Andy: No, no. It’s a sort of-
Drew: We’re not talking about JavaScript exceptions.
Andy: Yeah, yeah. There should be none of that at this point. I should hope not anyway, otherwise you really are in the woods at that point: I don’t think I’m going to be able to help you! The whole idea of this is… so you’ve created the context with your block, and an exception is exactly that, it’s like an exception to the rule: so a flipped card, or it might be a ghost button. So you know those buttons that have just got a border and a transparent background? That would be an exception because a button has probably got a solid background color and then the label color. So it’s creating a sort of distinct state of variation.
Andy: The reason why I do this with data attributes instead of classes, and the reason why that is is because a) I think it’s nice to have a distinction. So when you’re scanning through lots of HTML, you can see data, hyphen something, you’re like, “Right, okay, something has definitely changed on this element.” The other thing is that it’s very nice to give JavaScript access to that state, and vice versa as well. So I really like applying state with data attributes in JavaScript. I think that is essentially what they’re for, a sort of communication layer. The harmony between them seems to work really well.
Andy: So a good example is, say you’ve got a status message and then JavaScript will add data state is either success, error or information, or something. You can then hook into that with your exception styles in CSS. So you know that’s an exception of the status component and it’s going against its default state. So it’s just a really handy way of working with things. It’s predictable on both ends: it’s predictable on the CSS end, and it’s predictable on the JavaScript end as well.
Drew: I guess it’s quite nice that something that class names don’t give you is a property and value. So if you want to have something like that which is the state, and it can either be success or failure or warning or what have you, you can specifically address that state property and flip its value. Whereas with a big long list of class names, if you’re manipulating that in JavaScript, for example, you’re going to have to look at each one of them and add that business logic in there that says, “I can only set one of these,” and what happens if two of those classes are applied to the same element? You can’t get that with a data attribute, it only has one value.
Andy: Yeah. That’s a good way of saying that, yeah. It is very helpful, I’ve found, to work like that.
Drew: That’s quite interesting. I don’t think I’ve seen any other methodologies that take that approach. Is that completely unique to CUBE, doing that?
Andy: It might be. I don’t really pay much attention to other stuff, which I should do. Someone else is probably doing that. I’ll tell you now, it’s been the most controversial aspect of it. Some people really did not like the idea of using data attributes. The thing is as well, and how I respond, is, do what you want. We’re not telling you to do things in a certain way, it’s just suggestions. If you want to do exceptions to CSS classes, like modifiers, then knock yourself out. The CUBE police aren’t going to come knocking at your door. It’s absolutely fine.
Andy: The CUBE thing is a thinking thing, it’s a structure. You apply that structure however you want to apply it, with what tooling you want, or whatever technology you want. As long as you keep things consistent, that’s the important thing.
Drew: So there’s no such thing as pure CUBE?
Andy: The way I write it is pure CUBE, Drew. Everyone else is just a fake, it’s just a weak immitation.
Drew: Apart from to you, no-one can say, “That isn’t textbook CUBE.”
Andy: No, that’s it. No-one can dispute that really, can they? So, yeah, I’ll go with that. Gives you a bit of clout or something, I think, something like that.
Drew: Can you mix and match a CUBE approach with other methodologies? Can you use bits of BEM?
Andy: Yeah, I reckon so. I’ve been thinking about it a little bit because I’m going to do some more stuff on it soon because it’s become quite popular, so people will want more work. One thing I’m going to look at is how to approach using the CUBE methodology with something existing.
Andy: So there’s two opposite ends of the scale. A good question that people have asked is: “How does this work with every layout, the other stuff?” I’m like, basically, every layout is the C. That’s what every layout is, it’s the compositional layer. Then someone else asked, “Well, how would this work with something like Atomic Web Design, like their stuff that Brad Frost did? It’s like, well, you could break those pieces up and apply them at each level. Atomic Design goes all the way down into the micro detail. It’s abstracting that into using, right, okay, well I can apply this with utilities, so the molecules, I think. I can apply that with the utilities, and it’s translating what you know already into this slightly different structure of working.
Andy: Really, it’s a renaming for a lot of things. I’ve not invented anything here, I’ve just sort of, like I say, I’ve just stolen things that I like. I love the way that some of the Atomic Design stuff is thought about. That’s really some smart work. And BEM. The stuff Harry did, the Inverted Triangle CSS, I thought that was really cool. So I’ve just sort of nicked bits that I like from each one of them and sort of stitched them all together into this other hybrid thing, approach. More to come, I think.
Drew: Can the CUBE approach be applied to existing projects that already have CSS in place or is it something you really need to start on a fresh project with?
Andy: That very much depends. So if you’ve got like a bootstrap job and it’s just got thousands of lines of custom CSS, that I’ve definitely been involved in before, then I think you might be trying to put a fire out with a bottle of water at that point. But if you… say, for instance, if you’ve got a rough BEM setup and it’s gone a bit layer-y, you could use CUBE to refactor and actually pull it back into shape again.
Andy: It depends, the answer to that one. But it’s doable, as with everything. If you really want it to work, Drew, you can do it if you want, can’t you? The world is our oyster!
Drew: Especially if your BEM site’s gone layer-y.
Andy: Yeah. Nothing worse than a layer-y BEM site!
Drew: I’ve noticed in the examples that you’ve given… and I’ve got an eagle eye, I’ve seen you’ve been doing this for a while… a lot of your class values in the HTML attribute are wrapped in square brackets.
Andy: Oh, God, yeah. Tell you what, Drew-
Drew: What is that about? What is that about?
Andy: I’ll tell you what, if there’s ever one thing that I’ve done in my whole career that’s just been absolutely outrageously controversial… and you follow me on Twitter, you’ve seen what comes out of my mouth… it’s those bloody brackets! My, God! People either love them or hate them. They’re Marmite, they are.
Andy: The reason I do them is a grouping mechanism. So if you look at the way that they’re structured, the way I do it is, block at the start and then I’ll do a utilities after that. Then what I might do is, in between a block group and a utility group, there might be another block class. So a good example of that would be… we’ll go back to the card again. But then say that there’s a specific block called a CTA, like a call to action. You might have that applied to the card as well, and then your utilities are enforcing the design attributes, so the colors and all that business. So then you’ve got three groups of stuff.
Andy: When you come to it, if you’ve got that order in your head each time, you know, okay, right, this first group’s blocks. Oh, that’s looks like another block. I’ve got that one. Then it’s like, right, they’re definitely utility classes. Then what I might even do is, if there’s a lot of design token implementation, have that in a separate group. So it’s just very clear what each group is doing, and there’s a separation inside of the classes there as well. I’ve found it really helpful. Some people find it incredibly offensive. It’s definitely a do it if you want to do it. Definitely you don’t have to do it.
Andy: It’s quite funny, when I published that article, so many people finished halfway through to ask me, “What is it with these brackets?” I was like, “Did you finish the article? Because there’s a big section at the end where it explains exactly what they’re doing,” to the point where I actually had to write a bit in the middle of the article of, “If the brackets are essentially doing your head in, click here and I’ll skip you all the way down to that explanation bit so you can just read about them.” It can be quite controversial.
Andy: When I’ve worked on really, really complex front-ends… and we did a little bit of stuff together, didn’t we, last year?
Drew: Yeah.
Andy: You’ve seen the sort of design implementation on that project that we were on. It requires that sort of grouping because there’s just so much going on at the time, there’s so much different stuff happening. I’ve just found it really, really useful over the years, and also get lots of questions about it, to the point where I was almost going to write just one page on my website that I could just fire people to to answer the question for them.
Drew: Slash, what’s with the brackets?
Andy: Yeah. Slash, brackets. Have you seen that new Hey Email thing that’s just come out? They’ve bought a domain of itsnotatypo.com, just to answer the whole Imbox, like im with an M rather than an in. Basically, I was like, “I think I need to do that,” like, whatswiththebrackets.com, and just do a one-pager about it.
Drew: It strikes me that the approach with brackets actually could be something that might be useful when using things like Tailwind or something that has a lot of classes because that can-
Andy: Yeah. Oh, God, yes.
Drew: You have classes that are addressing your break points and what have you, and then you’ll have things that are for layout, things that are for color or type, or what have you. So it might also be a useful way of dealing in situations like that.
Andy: I’d definitely agree with that. A good analogy… not analogy. A good bit of info about Tailwind is that I actually quite like Tailwind. I’ve used that on very big projects. The one thing that really opened my eyes to Tailwind though was when I saw a junior developer try to work out what was going on, and it was really, really eye-opening because they just didn’t have a clue what was happening.
Andy: I think that’s one problem I’ve found with these sort of over-engineered approaches, which I think it’s fair to say Tailwind is, is that there’s a certain skill level that is required to work with it. I know the industry tends to have an obsession with seniority now, but there’s still people that are just getting into the game that we need to accommodate, and I think having stuff that’s closer to the language itself is more helpful in those situations because they’re probably learning material that is the language as it is. So I think it’s just a bit more helpful. Especially having a diverse team of people as well. Just food for thought for everyone.
Drew: People might look at all the different methodologies that are out there and say, “This is evidence that CSS is terrible and broken, that we need… all these problems have to be solved by hacking stuff on top. We need tools to fix bits of CSS. We need strict procedures for how we implement it, just to get it to work.” Should the platform be adapting itself? Do we need new bits of CSS to try and solve these problems or are we all right just hacking around and making up funny acronyms?
Andy: I think the power of CSS, I think, is its flexibility. So if you’re going to program CSS, a lot of the knowledge is less of the syntax and more of the workings of a browser and how it works. I think that might be a suggestion, that the problem is that people might not have learnt CSS quite as thoroughly as they thought they might have learnt it, who created these problems. I’ve seen that in evidence myself. I spotted a spacing mechanism that had been invested, which was very complicated, and I thought, “This person has not learnt what padding is because padding would actually fix this problem for them, understanding how padding works and the box model.” That’s not to be snidey about it.
Andy: We work in an industry now that moves at an even faster pace than it has done previously and I think there’s a lot less time for people to learn things in detail. But, on that front, I think CSS still does have work to do in terms of the working group, who I think do a bloody good job. A great, shining example of their work was the Grid spec which was just phenomenal. The way that rolled out in pretty much every browser on day one, I thought that was so good.
Andy: But we’ve got more work to do, I think, and I think maybe the pace might need to increase a little, especially with stuff like container queries, we all love talking about them. Stuff like that I think would help to put CSS in a different light with people, I think. But I think CSS is brilliant, I love it. I’ve never had a problem with it in lots of years really. I do find some of the solutions a bit odd, but there you go.
Drew: What’s the response been like to CUBE since you published the article?
Andy: Mind-blowing. I honestly published it as just supporting material, and that’s all I expected it to be, and it’s just blown up all over the place. A lot of people have been reading it, asking about it, been really interested about it. There’s definitely more to come on it.
Andy: I did say in the article, I said, “Look, if people are actually quite interested in this, I’ll expand on this post and actually make some documentation.” I’ve got bits of documentation dotted around all over the place, but to sort of centralize that, and then I was thinking of doing some workshops and stuff. So there’s stuff to go. It’s how Every Layout started as well. We both had these scattered ideas about layout and then we sort of merged them together. So something like that, I suppose, will come in the future.
Drew: Are there any downsides that you’re aware of to using CUBE? Are there problems that it doesn’t attempt to solve?
Andy: Yeah. This accent, Drew, it just won’t go way, no matter what I do! In all seriousness, I think CUBE’s got as close as I can get to being happy with the front-end, which is saying a lot, I think. You never know, things might change again. This has evolved over more recent years. Give it another five years, I’ll probably be struggling with this and trying something else. I think that’s the key point, is to just keep working on yourself and working on what you know and how you approach things.
Andy: This definitely won’t work for everyone as well, I know that for a fact. I know that from my comments. I don’t expect it to work for everyone. I don’t expect anything to work for everyone. It’s the same with JavaScript stuff: some people like the reactive stuff and some people don’t. It is what it is. We’re all people at the end of the day, we all have different tastes. It’s all about communicating with your teammates at the end of the day, that’s the important thing.
Drew: I know you as a very talented designer and developer and you, like many of us, you’re just working on real projects all day, every day. But you’ve recently started publishing on this site, Piccalilli, which is where the CUBE CSS introduction article was. So Piccalilli is kind of a new venture for you, isn’t it? What’s it all about?
Andy: Very kind of you to say, Drew. You’ve actually worked with me, so that’s high praise. But the Piccalilli thing is an evolution. So I’m a freelancer. I do client work, but I think this has become apparent with the pandemic, that that is not the most sustainable thing in the world in some industries. I think freelancing can be very, very tough, as a developer and designer. It’s something that I’ve been doing it for so long now, 10 years… well, 12 years now actually.
Andy: I fancied doing something a bit different and applying the knowledge that I’ve got and actually sharing it with people. I’ve always been very open and sharing, and I wanted to formalize that. So I created Piccalilli to write tutorials, but mainly for courses that I’m producing: that’s the main meat and potatoes. And then there’s the newsletter which is… people are really enjoying the newsletter because I share cool things I’ve found on the internet every week. That’s the backbone of it. It’s just going really well. That’s essentially where I want to see myself doing more and more full-time, as the years go on, I think.
Drew: So what’s coming next for Piccalilli? Have you got anything that you’ve got coming out?
Andy: Thanks for the door open there, Drew! By the time this recording goes out, the first course will be live: Learn Eleventy From Scratch, and that’s where we learn how to build a Gatsby website! No, you learn how to build an Eleventy site. So you start off with a completely empty directory, there’s nothing in it, it’s empty, and then at the end of it you’ll finish up with this really nice-looking agency site. We learn all sorts in it. You learn how to really go to town with Eleventy. We pull remote data in from places. We use CUBE CSS to build a really nice front-end for it.
Andy: If you want to get into the Jamstack and you want to get into static site generators, or just how to build a nice website, it’s just a really handy course, I hope, for that. It’s currently being edited within an inch of its life as we’re talking. It’s going to be cool, I hope, and useful. But that’s an accumulation of a lot of stuff I’ve been doing over the last couple of years. So it should be fun.
Andy: So buy it, and I’ll do a discount code, do like smashingpod for 40% off, and you can get it when it comes out.
Drew: Amazing. We’ll link that up. Have you figured out how to spell Piccalilli reliably yet?
Andy: I was on with Chris and Dave with the ShopTalk Show and I said on there, “If there’s ever one thing you want to hire me for it’s to write Piccalilli by hand first time without even thinking about it,” because I’ve written that word so many times that I just know exactly how to spell it off by heart. So the answer to your question is yes.
Drew: Well, I’m still struggling, I’ll tell you that much!
Andy: It is hard. Oh, God. I totally empathize. It took me a long time to learn how to spell it but it’s one of those words in our vocabulary. This year I’m trying to spell necessary without making a spelling mistake!
Drew: So I’ve been learning all about CUBE CSS. What have you been learning about lately, Andy?
Andy: Do you know what? This is going to surprise you, Drew. MySQL is what I’ve been learning about recently. So, basically, Piccalilli is totally self-published. It’s an Eleventy site but it’s got an API behind it, and that’s got a MySQL database behind it. The stuff that gives people content that they’ve purchased requires some pretty hefty querying. So I’ve just actually properly invested in some MySQL… especially the difference between joins, which I didn’t actually realize there was a difference between each type of join. So that’s been really useful and it’s resulted in some pretty speedy interactions with the database.
Andy: I used to run this thing called Front-End Challenges Club and when I first launched it it just collapsed and died on itself because MySQL was shoddy to say the least. So I’ve really been learning how to do that because I’m not a backend person at all, I’m a pixel-pusher. So it’s definitely not in my remit. That’s more your neck of the woods, isn’t it? I find it really cool, MySQL. I actually really like writing it. It’s a really nice, instructional language, isn’t it?
Drew: It is, it’s great. I learnt SQL at school.
Andy: Wow!
Drew: We’re talking like 20 years ago now.
Andy: Did they have computers in those days?
Drew: They did, yeah. We had to wind-
Andy: Did you have to write it by hand?
Drew: We had to wind them up! We did. But, I tell you, for a developer, it’s akin to learning your times tables: one of those things that seems like a bit of a chore but once you’re fluent, it just becomes useful time and time again.
Andy: Yeah. For sure. There’s really tangible differences as well. You really see the difference in speed. I really like working with Node because that’s really fast but Node and MySQL is just… not a very common choice, but I think it’s a pretty good choice. I think it works really, really well. So I’m happy with that. As you know, I don’t like writing PHP. So that’s never going to be an option.
Drew: If you, dear listener, would like to hear more from Andy, you can follow him on Twitter where he’s at hankchizljaw. You can find Piccalilli at piccalil.li, where you’ll also find the article describing CUBE CSS, and we’ll also add links to all of those in the show notes, of course.
Drew: Thanks for joining us today, Andy. Did you have any parting words?
Andy: Stay safe, and wear your mask.
(il)
Website Design & SEO Delray Beach by DBL07.co
Delray Beach SEO
source http://www.scpie.org/smashing-podcast-episode-19-with-andy-bell-what-is-cube-css/ source https://scpie1.blogspot.com/2020/07/smashing-podcast-episode-19-with-andy.html
0 notes
riichardwilson · 4 years
Text
Smashing Podcast Episode 19 With Andy Bell: What Is CUBE CSS?
We’re talking about CUBE CSS. What is it, and how does it differ from approaches such as BEM, SMACSS, and OOCSS? Drew McLellan talks to its creator, Andy Bell, to find out.
Today, we’re talking about CUBE CSS. What is it, and how does it differ from approaches such as BEM, SMACSS, and OOCSS? I spoke to its creator, Andy Bell, to find out.
Show Notes
Note: Listeners of the Smashing Podcast can save a whopping 40% on Andy’s Learn Eleventy From Scratch course using the code SMASHINGPOD.
Weekly Update
Transcript
Drew McLellan: He is an educator and freelance web designer based in the U.K. and has worked in the designer web industries for well over a decade. In that time he’s worked with some of the largest organizations in the world, like Harley-Davidson, BSkyB, Unilever, Oracle, and the NHS. Alongside Heydon Pickering, he’s the co-author of Every Layout, as well as running Front-End Challenges Club which is focused on teaching front-end development best practice via short, fun challenges.
Drew: His latest venture is Piccalilli, a website newsletter with tutorials and courses to help you level up as a front-end developer and designer. So we know he’s an experienced developer and educator, but did you know he was the first person allowed to compete at Crufts with a panda?
Drew: My Smashing friends, please welcome, Andy Bell. Hi, Andy, how are you?
Andy Bell: I’m smashing, thanks. How are you?
Drew: I’m very good, thank you very much. Now I wanted to talk to you today about something that you posted on your site, Piccalilli, about a CSS methodology that you’ve developed for yourself over recent years. First of all, I guess we should probably explore what we mean by a CSS methodology because that could mean different things to different people. So when you think of the CSS methodology, what is it to you?
Andy: That’s a good, hard question to start with, Drew. Appreciate that, thank you!
Drew: Welcome!
Andy: It’s a tricky one. So, for context, I’ve used BEM for a long time, and that is Block Element Modifier. That’s been around for a long time. The way that I look at a CSS methodology is, it’s not a framework, it’s an organization structure. That’s how I like to see it. It’s like a process almost. It’s like you’ve got a problem that you need to solve with CSS and you use the methodology to solve it for you and keep things predictable and organized. BEM’s just legendary for that because it’s been wildly successful.
Andy: Then you could almost qualify things like the style components and that sort of thing. You can almost say that they’re methodology orientated even though they’re a bit more framework entwined, but still, it’s a methodology of breaking things into tiny molecules. So essentially that’s what I’m trying to do with CUBE CSS as well. A thinking structure, I think I described it as.
Drew: So it’s an application of process for how you architect and you write CSS, and it’s not so much anything that’s based on tools or any other sort of technology, it’s just a sort of work flow. So there’s lots of different approaches out there. You mentioned BEM. There’s SMACSS, OOCSS, Atomic CSS. And then you’ve got these sort of unusual lovechild approaches like ABEM. Have you seen that one?
Andy: Yeah.
Drew: Why publish your own?
Andy: Yeah, yeah. Why make your own? That’s a very good question. I think those who know me well know I like to sail against the tide a lot. It’s mainly because I tend to do lots of varied projects as well, in varied teams. So it’s very hard, I’ve found, to work with BEM with a traditional developer because they’re used to using CSS for what CSS is all about: the cascade, et cetera, and that’s why I sort of stole that from the language.
Andy: On the other flip side is that less structured methodologies, it’s harder to work with a programmer, JS sort of person because they like structure and organization and small components, which is understandable working with the language that they work in.
Andy: So I found myself in these positions where I was working with different types of people, different types of projects where one methodology wasn’t quite working. Over the years, I’ve just been playing around with this idea of how things go, and then there’s the stuff me and Heydon did, Every Layout, which sort of enforced the big part of it, which is the C, the composition part, and then I’ve just sort of evolved it very rapidly over the last six months.
Andy: The only reason I wrote an article about it was because I was just doing this course and I thought I’d better write some supplementary material to go with it so people understand it, and it’s absolutely blown up. So maybe we’re not over methodologies quite yet, Drew.
Drew: So the course material that you’ve been putting together actually uses CUBE CSS as its methodology, does it?
Andy: Yeah. So a good 50% of the course is actually front-end, even though it’s a course unlimited. It’s so, so deeply entwined in the way that we build the front-end that I couldn’t just say, “Oh, by the way, this is how I write a nice CSS,” and then leave it. I know people like to get into the detail, so I was like, what I’ll do is, I’ll write this post that’s really long and really detailed and then if someone wants to skill up and really understand what we’re doing, then they can do, and the rest is from there. And here we are today, Drew, sitting and chatting about it.
Drew: So if somebody already understands BEM and is maybe already using BEM, as an example, because that’s probably one of the widest adopted methodologies, isn’t it? So if they’ve already got an understanding of BEM and they’re coming to CUBE, is that something that they would find easy to adopt? Are there many similarities or is it completely different?
Andy: Yeah. I’d say going from BEM to CUBE is probably a smooth transition, especially the way I like to still write the CSS for CUBE. So the majority of stuff’s happening at a higher level. So it’s happening at the cascade level and it’s happening global CSS, using the utilities to do a lot of the stuff. But when you come into the nuts and bolts of it, it’s very BEM-like components, blocks and elements. The only thing that’s sort of different from BEM is, instead of having modifiers, we use this thing called exceptions instead which is, instead of using CSS classes, it turns to data attributes, which I think gives a nice bit of separation and a real exception, which is what a modifier should be.
Andy: Part of the reason why I’ve sort of sailed away from BEM was because I found the way I was working with it, especially in design systems, was modifiers were dominated and it became a problem because it was like, what is the role of my block at this point? Because if I’m modifying it to the point where it’s unrecognizable regularly, then is this methodology still working how it’s supposed to work?
Andy: Then there’s the whole design token stuff, the stuff that Jina did with the Lightning Design System which we’ve all started adopting now. The utility class stuff really started to make sense with that approach. So I just sort of smushed all the things I like about other people’s work and slotted into my own instead.
Drew: You talk about with BEM, the sort of modifier approach kind of getting out of control. Was that one of the main pain points with BEM that CUBE tries to address?
Andy: Yeah, absolutely. I do like the modifier approach with BEM, it does make sense. What I like about BEM is something that I still do, is the double underscore for an element, and then there’s the double dash for a modifier. I like that way of organizing things. It was just a case of okay, well, a lot of the modifiers I can actually account for with utility classes and then the other bits…
Andy: So the example I use in the article is, imagine you’ve got a card and then the card is flipped, so the content appears before the image. So then that makes sense, to see display: flex and then you reverse it, reverse the order. That makes sense, to have an exception rule for that because it’s an exception of the card’s default state, and that’s how I like to see it. It’s like an affected state on that component, is what an exception is, and that makes sense.
Andy: With a lot of the stuff that I’ve done more recently, the modern front-end stack with reactive JavaScript, there’s a lot of state changing and it’s makes sense to handle it appropriately between CSS and JavaScript because they are becoming more and more entwined with each other, whether you like it or not. It’s a common language for them. As you can see by my face, very much not, but there you go. You’re probably thinking, “Actually, I’ve been working with react quite a lot recently, so I’m the other way round.” So I can see that as well.
Drew: So let’s get into CUBE then. So CUBE stands for Composition Utility Block Exception. Is that right?
Andy: Yeah. That’s the one.
Drew: What on Earth does that mean?
Andy: Oh, mate, you should have heard it before! I was doing a talk last year. I did a talk, and it was called Keeping it Simple with CSS that scales, and in there I sort of introduced an earlier version of it called CBEUT, which was Cascade Block Element Utility Token. It was rubbish. I hated the name of it. I did it a couple of times, this talk last year, and I really didn’t like the name. Then when I came to doing this stuff this year, I thought, “I really need to think about what it actually is and what it’s called.” I think CUBE is a little less rubbish. I think that’s the best way I can describe it.
Andy: But then, names are always rubbish for these things, aren’t they? I mean, like BEM, what a rubbish name that is! But we all do it. Look at Jamstack: that’s a terrible name as well, isn’t it?
Drew: My lips are sealed!
Andy: Your boss is going, “What?” It’s true. It’s just the way it is, isn’t it, in our industry.
Drew: It seems that a lot of the CSS methodologies try and work around some of the features of CSS, things like the cascade. My understanding from what I read is, CUBE tries to make use of those sort of features and properties of CSS.
Andy: Yeah. A good analogy for it is SCSS, like Sass, is an extension of the natural CSS language, isn’t it? You’re pretty much right in CSS still. So CUBE CSS is like that. So it’s an extension of CSS. So we should still write CSS, as CSS should… well, it’s supposed to be written. Let’s be honest, that how it’s supposed to be written, is the name gives it away: Cascading Style Sheets. So it’s embracing that again because what I’ve found is that I’ve gone all the way down to the micro-optimization level. I’ve been down the path that I see a lot of people going down recently where… and I’ve mentioned this in the article as well, where I can see… there’s some evidence of it recently. I’ve spotted people have been creating spacer components and stuff like that, and I understand that problem, I’ve been in that situation.
Andy: The way I fixed it was, instead of drilling down and trying to micro-optimize, I actually started thinking about things on a compositional level instead because it doesn’t matter how small your components are, at some point they’re going to be pages, they’re going to be views. You cannot avoid that, that’s how it’s going to be. So instead of trying to say, “Right, I need these tiny little helpers to do this layout,” you say, “Right, I’ve got a contact page view, or a product page view, and that’s a skeletal layout composition. Then inside of that I can slot whatever components I want in there.” We’ve got things like Grid and Flexbox now which make that much more achievable, and you can essentially put whatever you want inside of the skeletal layout, it doesn’t matter. Then the components should, at that point, behave how you want them to behave, with or without container queries.
Drew: This is the composition part of CUBE where you’re looking at things at more of a macro level, looking at how components can be composed into a view to create the sort of pages that you need to create for a site or an app or what have you.
Andy: So it’s creating rules, essentially. It’s like guidance. It’s trying to get guidelines for something. It’s not like a strict rules, like, you should do this, you should do that. That’s essentially what you’re doing with the browser, with this methodology, is you’re saying… you’re not forcing it to do anything. You’re saying, “Look, ideally, if you could lay it out like this, that would be great, but I understand that that might not be the case so here’s some bounds and some upper and lower levels that we can work with. Do what you can, and cheers.” Then you just chuck some components at it and let it just do what it does. You add enough control in there for it to not look rubbish.
Andy: So a good example would see… we do a layout in Every Layout called the switcher, which essentially will in-line items until a certain point where the calculation that works out how wide it should will just stack them on top of each other. But because we add margin to the in-line and the block, it works, regardless of what the state of it is, it still looks fine. That’s the idea, is that we’re not telling the browser to say, “You must layer this three column grid out.” We’re saying, “If you can layer a three column grid out, do it. Otherwise, just stack and space instead.” So it’s that sort of methodology, of letting the browser do its job really.
Drew: Many of the different approaches that have come along for CSS over the last few years have very much focused on the component level of dealing with everything like it’s a component. CUBE doesn’t downplay that component aspect so much, it just gives this extra concept over the top of taking those components and composing them into bigger layouts, rather than just saying the layout’s just another component.
Andy: Yeah, that’s a good point, yeah. I think the thing to say about components is they’re important, especially in modern front-end stuff. We do a lot of component stuff, system stuff. But the way I see a component is, it’s a collection of rules that extend what’s already been done.
Andy: The point I make in the article is, by the time you get down to the block level, most of your styling has actually been done, and really what your component is doing is dotting the Is and crossing the Ts and it’s saying, “Right, in this context…” So for a card, for example, make the image have a minimum height of X, and add a bit of padding here. Do this, that and the other. Put a button here. It’s just sort of additional rules on top of what’s already been inherited from the rest of the CSS. I think that’s probably the best way to describe it.
Andy: Whereas in BEM, the component is the source of truth. Until you put that class on the element, nothing has been applied at that point, and that method works. I just found I wrote more CSS by doing that, and more repetitive CSS, which I don’t like doing.
Drew: Would you consider the typography and the colors and the vertical rhythms, spacing, and all of that, is all that part of the idea of composition in this model?
Andy: Yeah. In a global CSS, yeah, absolutely. The vertical rhythm especially, and the flow. We did an article on that at 24 ways, didn’t we, a couple of years ago, the flow and rhythm component. That was a sort of abstract from this approach as well, where you set a base component which essentially uses the lobotomized owl selector. I don’t know how I’m going to describe that on the radio, but we will. We’ll just put, I think, in the show notes about the Heydon article or something. But essentially that, it selects child elements… sorry, sibling elements.
Andy: So it says, “Right, every element that follows element X have margin top of CSS costs and property value,” and then the beauty of that is then you can set that CSS custom property value on a compositional context as well. So you can say, “Right, in this component, if there’s some flow on the go, we’ll set flow space to actually be two rem because we want it to be nice and beefy, the wide space.” Then in another one you might say, “Actually, I want flow space to be half a rem because I want it to be tight.” This is all happening, all the control is coming from a higher level and then what you’re doing is, you’re adding contextual overrides rather than reinventing it each time, reinventing the same thing over and over again.
Drew: So that’s the C, Composition. Next we’ve got U, which is Utility. So what do we mean by utility?
Andy: So it’s a class that does one job, and it does it really well. That could be an implementation of a design token which… it’s an abstract of properties. Usually it’s colors or typography styles, sizing, and rules like that. The idea is you generate utility classes that apply those. So you’ve got a utility that will apply background primary, which is like the primary color, and then color primary, which is the text color. Then you might generate some spacing tokens for marginal padding, and all those sorts of things. They just do one job. They just add that one spacing rule, that one color rule, and that’s it.
Andy: But then you’ve got other utilities as well. So a good example is a wrapper utility. What that will do is, it will put a maximum width on an element and then it will put left and right auto margin to sit it in the middle of the thing. So it’s just got one job, and it’s just doing it efficiently and well.
Andy: So you’ve got your global styles, you’ve done a lot of your typography settings and a lot of your flooring space. Your composition’s then giving context and layout. Then utilities are applying tokens directly to elements to give them those styling that you need. So like a heading, for example, you’re saying, “I want this to be this size and I want it to have this lead in, and I want it to have this measure.” Then at that point… this is what I was saying about the blocks… then you go further down the stack, and you’ve already done most of the work at the point.
Andy: So they give you this really efficient way of working, and because HTML sort of streams down the pipe as well, it’s really nice to abstract the workload onto HTML rather than CSS as well, I’ve found. I used to really get into utility classes, like in this sort of old curmudgeon style of, “Oh, separation of concerns,” but I actually think it’s a really decent way of working. I mention in the article that I actually like Tailwind CSS. I think it does work, and I really like using it for product typing because I can really put something out really quick. But I think it just goes a little bit too far, does Tailwind, whereas I like to rain it in when it goes beyond just applying a single rule on a class. So that’s it, I think. Do you?
Drew: So, yeah, you talk in the article a lot about design tokens, which is something that we’ve talked about on the Smashing Podcast with Jina Anne back in episode three, I think it was. So it sounds like design tokens are a really fundamental aspect.
Andy: Yeah. Oh, God, yeah. I remember so vividly when Jina was doing the Lightning Design System stuff because I was building a design system at the time, or something that resembled a design system, and we were struggling to get executive approval of it. When the Lightning Design System came out, I literally just sent them link after link and I said, “This is what we’re doing. We’re building a design system. This is what Salesforce are currently using it for.” I remember her work at the time actually helped me to get stuff through the door.
Andy: Then the design token stuff has always stuck with me as being a really good way of applying these rules. Because I’m a designer by trade, so I can just sort of see that organization and the ability to organize and create a single source of truth being really useful because it’s something we’ve not really had in digital design, especially in the Adobe era of working with Photoshop and stuff, we just didn’t have that lUXury. We had it in print with the Pantone Book but we didn’t have it in digital with random hex codes all over the shop.
Andy: So it’s just great. I love that level of control. Actually, I think it aids in creativity because you’re not thinking about unimportant stuff anymore, you’re just thinking about what you’re doing with it.
Drew: Does the implementation of those design tokens matter particularly with the approach? Is it always CSS custom properties?
Andy: I think that’s a really important point with CUBE. Some of the responses I’ve had, people have struggled with this a little bit. There’s no mention of technology in it whatsoever. The only technology that’s consistent is CSS. You can do it however you want. You could do all this with whatever CSS and JS things people are doing now, or you could it with just Vanilla CSS. You could do it with Sass. I do it with Sass. Less, if that’s what you’re still doing. All these available technologies, post CSS, all these things. You can do however you want to do it, it doesn’t matter.
Andy: The idea is that if you follow those sort of constructs, you’ll be fine. That’s the idea behind it. It’s a very loose and not strict as some of the methodologies are. I’ve seen it with BEM especially, people get really ingrained in the principles of BEM to the point where it’s like you’re not even solving the problem anymore. I think that you’ve got to be flexible. I said it in this talk last year. I was like, “If you stick to your guns too tightly, you can actually cause problems for yourself in the long run because you try and follow a certain path, and you know it’s not working anymore.” You should always be flexible and work with a system rather than working to the letter to it.
Drew: So the B, the B is Block. You’ve talked about this idea, that by the time you get down to the block level, most of everything should be in place, and then the block level styling is only really concerned with the actual very detail of a particular component. Generally, is the concept of a block similar to what people will be familiar with?
Andy: Oh, absolutely, yeah. So imagine your BEM component and take all the visual stuff out of it, and that’s what you’re left with, essentially, the block. This is what I struggled to articulate when I first started thinking of this methodology. A block is actually really a C, it’s a composition, but that makes it really difficult because you’re into recursive territory there and I think people’s brains would explode. But really that’s what a block is, it’s actually another compositional layer but more of a sort of strict context, so like your card, your button, your carousel, if that’s what you like doing still, and all that sort of stuff.
Andy: It’s like a specific thing, a component, and then inside of there you’re setting specific rules for it to follow, really ignoring the rest so you’re not… You might apply tokens in the blocks, and I do do that still, but really it’s more layout orientated, is a block, as far as I work with them, or at least taking the token and applying it in a specific way, like a button hover status, stuff like that. So really your block should be tiny by the time you get down to them, they shouldn’t be really doing much at all.
Drew: So it could be as small as a hyperlink.
Andy: Yeah.
Drew: But it could also be a compound collection of other blocks?
Andy: Yeah. Like a module sort of thing. You could definitely do that. Because, again, that goes back to the sort of compositional aspect of it, is that whatever goes in it shouldn’t matter. The good example of that is like the card. So the content of a card is, say, like a heading, a summary and a button. You shouldn’t really be specifically targeting those three elements. You should be saying, “Look, anything that happens to find itself in content, have some flow rules in there and have some sort of compositional layout rules,” and then it doesn’t matter what you put in there. You might decide that you want to put an image in that content thing and it should just work, it should just look fine.
Andy: That’s the whole point of working with CSS. It’s a very forgiving way of working with CSS. You’re making your life a lot easier by being less rigid because when stuff accidentally finds itself in something, which it will, it doesn’t look horrific as it could do if you were being more specific about things, is what I’ve found.
Drew: I definitely need a lot of forgiveness around my CSS!
Andy: I know you do!
Drew: Cheers! So that’s the B. The last thing is E: E is Exception. Now we’re not talking about error messages, are we?
Andy: No, no. It’s a sort of-
Drew: We’re not talking about JavaScript exceptions.
Andy: Yeah, yeah. There should be none of that at this point. I should hope not anyway, otherwise you really are in the woods at that point: I don’t think I’m going to be able to help you! The whole idea of this is… so you’ve created the context with your block, and an exception is exactly that, it’s like an exception to the rule: so a flipped card, or it might be a ghost button. So you know those buttons that have just got a border and a transparent background? That would be an exception because a button has probably got a solid background color and then the label color. So it’s creating a sort of distinct state of variation.
Andy: The reason why I do this with data attributes instead of classes, and the reason why that is is because a) I think it’s nice to have a distinction. So when you’re scanning through lots of HTML, you can see data, hyphen something, you’re like, “Right, okay, something has definitely changed on this element.” The other thing is that it’s very nice to give JavaScript access to that state, and vice versa as well. So I really like applying state with data attributes in JavaScript. I think that is essentially what they’re for, a sort of communication layer. The harmony between them seems to work really well.
Andy: So a good example is, say you’ve got a status message and then JavaScript will add data state is either success, error or information, or something. You can then hook into that with your exception styles in CSS. So you know that’s an exception of the status component and it’s going against its default state. So it’s just a really handy way of working with things. It’s predictable on both ends: it’s predictable on the CSS end, and it’s predictable on the JavaScript end as well.
Drew: I guess it’s quite nice that something that class names don’t give you is a property and value. So if you want to have something like that which is the state, and it can either be success or failure or warning or what have you, you can specifically address that state property and flip its value. Whereas with a big long list of class names, if you’re manipulating that in JavaScript, for example, you’re going to have to look at each one of them and add that business logic in there that says, “I can only set one of these,” and what happens if two of those classes are applied to the same element? You can’t get that with a data attribute, it only has one value.
Andy: Yeah. That’s a good way of saying that, yeah. It is very helpful, I’ve found, to work like that.
Drew: That’s quite interesting. I don’t think I’ve seen any other methodologies that take that approach. Is that completely unique to CUBE, doing that?
Andy: It might be. I don’t really pay much attention to other stuff, which I should do. Someone else is probably doing that. I’ll tell you now, it’s been the most controversial aspect of it. Some people really did not like the idea of using data attributes. The thing is as well, and how I respond, is, do what you want. We’re not telling you to do things in a certain way, it’s just suggestions. If you want to do exceptions to CSS classes, like modifiers, then knock yourself out. The CUBE police aren’t going to come knocking at your door. It’s absolutely fine.
Andy: The CUBE thing is a thinking thing, it’s a structure. You apply that structure however you want to apply it, with what tooling you want, or whatever technology you want. As long as you keep things consistent, that’s the important thing.
Drew: So there’s no such thing as pure CUBE?
Andy: The way I write it is pure CUBE, Drew. Everyone else is just a fake, it’s just a weak immitation.
Drew: Apart from to you, no-one can say, “That isn’t textbook CUBE.”
Andy: No, that’s it. No-one can dispute that really, can they? So, yeah, I’ll go with that. Gives you a bit of clout or something, I think, something like that.
Drew: Can you mix and match a CUBE approach with other methodologies? Can you use bits of BEM?
Andy: Yeah, I reckon so. I’ve been thinking about it a little bit because I’m going to do some more stuff on it soon because it’s become quite popular, so people will want more work. One thing I’m going to look at is how to approach using the CUBE methodology with something existing.
Andy: So there’s two opposite ends of the scale. A good question that people have asked is: “How does this work with every layout, the other stuff?” I’m like, basically, every layout is the C. That’s what every layout is, it’s the compositional layer. Then someone else asked, “Well, how would this work with something like Atomic Web Design, like their stuff that Brad Frost did? It’s like, well, you could break those pieces up and apply them at each level. Atomic Design goes all the way down into the micro detail. It’s abstracting that into using, right, okay, well I can apply this with utilities, so the molecules, I think. I can apply that with the utilities, and it’s translating what you know already into this slightly different structure of working.
Andy: Really, it’s a renaming for a lot of things. I’ve not invented anything here, I’ve just sort of, like I say, I’ve just stolen things that I like. I love the way that some of the Atomic Design stuff is thought about. That’s really some smart work. And BEM. The stuff Harry did, the Inverted Triangle CSS, I thought that was really cool. So I’ve just sort of nicked bits that I like from each one of them and sort of stitched them all together into this other hybrid thing, approach. More to come, I think.
Drew: Can the CUBE approach be applied to existing projects that already have CSS in place or is it something you really need to start on a fresh project with?
Andy: That very much depends. So if you’ve got like a bootstrap job and it’s just got thousands of lines of custom CSS, that I’ve definitely been involved in before, then I think you might be trying to put a fire out with a bottle of water at that point. But if you… say, for instance, if you’ve got a rough BEM setup and it’s gone a bit layer-y, you could use CUBE to refactor and actually pull it back into shape again.
Andy: It depends, the answer to that one. But it’s doable, as with everything. If you really want it to work, Drew, you can do it if you want, can’t you? The world is our oyster!
Drew: Especially if your BEM site’s gone layer-y.
Andy: Yeah. Nothing worse than a layer-y BEM site!
Drew: I’ve noticed in the examples that you’ve given… and I’ve got an eagle eye, I’ve seen you’ve been doing this for a while… a lot of your class values in the HTML attribute are wrapped in square brackets.
Andy: Oh, God, yeah. Tell you what, Drew-
Drew: What is that about? What is that about?
Andy: I’ll tell you what, if there’s ever one thing that I’ve done in my whole career that’s just been absolutely outrageously controversial… and you follow me on Twitter, you’ve seen what comes out of my mouth… it’s those bloody brackets! My, God! People either love them or hate them. They’re Marmite, they are.
Andy: The reason I do them is a grouping mechanism. So if you look at the way that they’re structured, the way I do it is, block at the start and then I’ll do a utilities after that. Then what I might do is, in between a block group and a utility group, there might be another block class. So a good example of that would be… we’ll go back to the card again. But then say that there’s a specific block called a CTA, like a call to action. You might have that applied to the card as well, and then your utilities are enforcing the design attributes, so the colors and all that business. So then you’ve got three groups of stuff.
Andy: When you come to it, if you’ve got that order in your head each time, you know, okay, right, this first group’s blocks. Oh, that’s looks like another block. I’ve got that one. Then it’s like, right, they’re definitely utility classes. Then what I might even do is, if there’s a lot of design token implementation, have that in a separate group. So it’s just very clear what each group is doing, and there’s a separation inside of the classes there as well. I’ve found it really helpful. Some people find it incredibly offensive. It’s definitely a do it if you want to do it. Definitely you don’t have to do it.
Andy: It’s quite funny, when I published that article, so many people finished halfway through to ask me, “What is it with these brackets?” I was like, “Did you finish the article? Because there’s a big section at the end where it explains exactly what they’re doing,” to the point where I actually had to write a bit in the middle of the article of, “If the brackets are essentially doing your head in, click here and I’ll skip you all the way down to that explanation bit so you can just read about them.” It can be quite controversial.
Andy: When I’ve worked on really, really complex front-ends… and we did a little bit of stuff together, didn’t we, last year?
Drew: Yeah.
Andy: You’ve seen the sort of design implementation on that project that we were on. It requires that sort of grouping because there’s just so much going on at the time, there’s so much different stuff happening. I’ve just found it really, really useful over the years, and also get lots of questions about it, to the point where I was almost going to write just one page on my website that I could just fire people to to answer the question for them.
Drew: Slash, what’s with the brackets?
Andy: Yeah. Slash, brackets. Have you seen that new Hey Email thing that’s just come out? They’ve bought a domain of itsnotatypo.com, just to answer the whole Imbox, like im with an M rather than an in. Basically, I was like, “I think I need to do that,” like, whatswiththebrackets.com, and just do a one-pager about it.
Drew: It strikes me that the approach with brackets actually could be something that might be useful when using things like Tailwind or something that has a lot of classes because that can-
Andy: Yeah. Oh, God, yes.
Drew: You have classes that are addressing your break points and what have you, and then you’ll have things that are for layout, things that are for color or type, or what have you. So it might also be a useful way of dealing in situations like that.
Andy: I’d definitely agree with that. A good analogy… not analogy. A good bit of info about Tailwind is that I actually quite like Tailwind. I’ve used that on very big projects. The one thing that really opened my eyes to Tailwind though was when I saw a junior developer try to work out what was going on, and it was really, really eye-opening because they just didn’t have a clue what was happening.
Andy: I think that’s one problem I’ve found with these sort of over-engineered approaches, which I think it’s fair to say Tailwind is, is that there’s a certain skill level that is required to work with it. I know the industry tends to have an obsession with seniority now, but there’s still people that are just getting into the game that we need to accommodate, and I think having stuff that’s closer to the language itself is more helpful in those situations because they’re probably learning material that is the language as it is. So I think it’s just a bit more helpful. Especially having a diverse team of people as well. Just food for thought for everyone.
Drew: People might look at all the different methodologies that are out there and say, “This is evidence that CSS is terrible and broken, that we need… all these problems have to be solved by hacking stuff on top. We need tools to fix bits of CSS. We need strict procedures for how we implement it, just to get it to work.” Should the platform be adapting itself? Do we need new bits of CSS to try and solve these problems or are we all right just hacking around and making up funny acronyms?
Andy: I think the power of CSS, I think, is its flexibility. So if you’re going to program CSS, a lot of the knowledge is less of the syntax and more of the workings of a browser and how it works. I think that might be a suggestion, that the problem is that people might not have learnt CSS quite as thoroughly as they thought they might have learnt it, who created these problems. I’ve seen that in evidence myself. I spotted a spacing mechanism that had been invested, which was very complicated, and I thought, “This person has not learnt what padding is because padding would actually fix this problem for them, understanding how padding works and the box model.” That’s not to be snidey about it.
Andy: We work in an industry now that moves at an even faster pace than it has done previously and I think there’s a lot less time for people to learn things in detail. But, on that front, I think CSS still does have work to do in terms of the working group, who I think do a bloody good job. A great, shining example of their work was the Grid spec which was just phenomenal. The way that rolled out in pretty much every browser on day one, I thought that was so good.
Andy: But we’ve got more work to do, I think, and I think maybe the pace might need to increase a little, especially with stuff like container queries, we all love talking about them. Stuff like that I think would help to put CSS in a different light with people, I think. But I think CSS is brilliant, I love it. I’ve never had a problem with it in lots of years really. I do find some of the solutions a bit odd, but there you go.
Drew: What’s the response been like to CUBE since you published the article?
Andy: Mind-blowing. I honestly published it as just supporting material, and that’s all I expected it to be, and it’s just blown up all over the place. A lot of people have been reading it, asking about it, been really interested about it. There’s definitely more to come on it.
Andy: I did say in the article, I said, “Look, if people are actually quite interested in this, I’ll expand on this post and actually make some documentation.” I’ve got bits of documentation dotted around all over the place, but to sort of centralize that, and then I was thinking of doing some workshops and stuff. So there’s stuff to go. It’s how Every Layout started as well. We both had these scattered ideas about layout and then we sort of merged them together. So something like that, I suppose, will come in the future.
Drew: Are there any downsides that you’re aware of to using CUBE? Are there problems that it doesn’t attempt to solve?
Andy: Yeah. This accent, Drew, it just won’t go way, no matter what I do! In all seriousness, I think CUBE’s got as close as I can get to being happy with the front-end, which is saying a lot, I think. You never know, things might change again. This has evolved over more recent years. Give it another five years, I’ll probably be struggling with this and trying something else. I think that’s the key point, is to just keep working on yourself and working on what you know and how you approach things.
Andy: This definitely won’t work for everyone as well, I know that for a fact. I know that from my comments. I don’t expect it to work for everyone. I don’t expect anything to work for everyone. It’s the same with JavaScript stuff: some people like the reactive stuff and some people don’t. It is what it is. We’re all people at the end of the day, we all have different tastes. It’s all about communicating with your teammates at the end of the day, that’s the important thing.
Drew: I know you as a very talented designer and developer and you, like many of us, you’re just working on real projects all day, every day. But you’ve recently started publishing on this site, Piccalilli, which is where the CUBE CSS introduction article was. So Piccalilli is kind of a new venture for you, isn’t it? What’s it all about?
Andy: Very kind of you to say, Drew. You’ve actually worked with me, so that’s high praise. But the Piccalilli thing is an evolution. So I’m a freelancer. I do client work, but I think this has become apparent with the pandemic, that that is not the most sustainable thing in the world in some industries. I think freelancing can be very, very tough, as a developer and designer. It’s something that I’ve been doing it for so long now, 10 years… well, 12 years now actually.
Andy: I fancied doing something a bit different and applying the knowledge that I’ve got and actually sharing it with people. I’ve always been very open and sharing, and I wanted to formalize that. So I created Piccalilli to write tutorials, but mainly for courses that I’m producing: that’s the main meat and potatoes. And then there’s the newsletter which is… people are really enjoying the newsletter because I share cool things I’ve found on the internet every week. That’s the backbone of it. It’s just going really well. That’s essentially where I want to see myself doing more and more full-time, as the years go on, I think.
Drew: So what’s coming next for Piccalilli? Have you got anything that you’ve got coming out?
Andy: Thanks for the door open there, Drew! By the time this recording goes out, the first course will be live: Learn Eleventy From Scratch, and that’s where we learn how to build a Gatsby website! No, you learn how to build an Eleventy site. So you start off with a completely empty directory, there’s nothing in it, it’s empty, and then at the end of it you’ll finish up with this really nice-looking agency site. We learn all sorts in it. You learn how to really go to town with Eleventy. We pull remote data in from places. We use CUBE CSS to build a really nice front-end for it.
Andy: If you want to get into the Jamstack and you want to get into static site generators, or just how to build a nice website, it’s just a really handy course, I hope, for that. It’s currently being edited within an inch of its life as we’re talking. It’s going to be cool, I hope, and useful. But that’s an accumulation of a lot of stuff I’ve been doing over the last couple of years. So it should be fun.
Andy: So buy it, and I’ll do a discount code, do like smashingpod for 40% off, and you can get it when it comes out.
Drew: Amazing. We’ll link that up. Have you figured out how to spell Piccalilli reliably yet?
Andy: I was on with Chris and Dave with the ShopTalk Show and I said on there, “If there’s ever one thing you want to hire me for it’s to write Piccalilli by hand first time without even thinking about it,” because I’ve written that word so many times that I just know exactly how to spell it off by heart. So the answer to your question is yes.
Drew: Well, I’m still struggling, I’ll tell you that much!
Andy: It is hard. Oh, God. I totally empathize. It took me a long time to learn how to spell it but it’s one of those words in our vocabulary. This year I’m trying to spell necessary without making a spelling mistake!
Drew: So I’ve been learning all about CUBE CSS. What have you been learning about lately, Andy?
Andy: Do you know what? This is going to surprise you, Drew. MySQL is what I’ve been learning about recently. So, basically, Piccalilli is totally self-published. It’s an Eleventy site but it’s got an API behind it, and that’s got a MySQL database behind it. The stuff that gives people content that they’ve purchased requires some pretty hefty querying. So I’ve just actually properly invested in some MySQL… especially the difference between joins, which I didn’t actually realize there was a difference between each type of join. So that’s been really useful and it’s resulted in some pretty speedy interactions with the database.
Andy: I used to run this thing called Front-End Challenges Club and when I first launched it it just collapsed and died on itself because MySQL was shoddy to say the least. So I’ve really been learning how to do that because I’m not a backend person at all, I’m a pixel-pusher. So it’s definitely not in my remit. That’s more your neck of the woods, isn’t it? I find it really cool, MySQL. I actually really like writing it. It’s a really nice, instructional language, isn’t it?
Drew: It is, it’s great. I learnt SQL at school.
Andy: Wow!
Drew: We’re talking like 20 years ago now.
Andy: Did they have computers in those days?
Drew: They did, yeah. We had to wind-
Andy: Did you have to write it by hand?
Drew: We had to wind them up! We did. But, I tell you, for a developer, it’s akin to learning your times tables: one of those things that seems like a bit of a chore but once you’re fluent, it just becomes useful time and time again.
Andy: Yeah. For sure. There’s really tangible differences as well. You really see the difference in speed. I really like working with Node because that’s really fast but Node and MySQL is just… not a very common choice, but I think it’s a pretty good choice. I think it works really, really well. So I’m happy with that. As you know, I don’t like writing PHP. So that’s never going to be an option.
Drew: If you, dear listener, would like to hear more from Andy, you can follow him on Twitter where he’s at hankchizljaw. You can find Piccalilli at piccalil.li, where you’ll also find the article describing CUBE CSS, and we’ll also add links to all of those in the show notes, of course.
Drew: Thanks for joining us today, Andy. Did you have any parting words?
Andy: Stay safe, and wear your mask.
(il)
Website Design & SEO Delray Beach by DBL07.co
Delray Beach SEO
source http://www.scpie.org/smashing-podcast-episode-19-with-andy-bell-what-is-cube-css/ source https://scpie.tumblr.com/post/622448378468614144
0 notes
scpie · 4 years
Text
Smashing Podcast Episode 19 With Andy Bell: What Is CUBE CSS?
We’re talking about CUBE CSS. What is it, and how does it differ from approaches such as BEM, SMACSS, and OOCSS? Drew McLellan talks to its creator, Andy Bell, to find out.
Today, we’re talking about CUBE CSS. What is it, and how does it differ from approaches such as BEM, SMACSS, and OOCSS? I spoke to its creator, Andy Bell, to find out.
Show Notes
Note: Listeners of the Smashing Podcast can save a whopping 40% on Andy’s Learn Eleventy From Scratch course using the code SMASHINGPOD.
Weekly Update
Transcript
Drew McLellan: He is an educator and freelance web designer based in the U.K. and has worked in the designer web industries for well over a decade. In that time he’s worked with some of the largest organizations in the world, like Harley-Davidson, BSkyB, Unilever, Oracle, and the NHS. Alongside Heydon Pickering, he’s the co-author of Every Layout, as well as running Front-End Challenges Club which is focused on teaching front-end development best practice via short, fun challenges.
Drew: His latest venture is Piccalilli, a website newsletter with tutorials and courses to help you level up as a front-end developer and designer. So we know he’s an experienced developer and educator, but did you know he was the first person allowed to compete at Crufts with a panda?
Drew: My Smashing friends, please welcome, Andy Bell. Hi, Andy, how are you?
Andy Bell: I’m smashing, thanks. How are you?
Drew: I’m very good, thank you very much. Now I wanted to talk to you today about something that you posted on your site, Piccalilli, about a CSS methodology that you’ve developed for yourself over recent years. First of all, I guess we should probably explore what we mean by a CSS methodology because that could mean different things to different people. So when you think of the CSS methodology, what is it to you?
Andy: That’s a good, hard question to start with, Drew. Appreciate that, thank you!
Drew: Welcome!
Andy: It’s a tricky one. So, for context, I’ve used BEM for a long time, and that is Block Element Modifier. That’s been around for a long time. The way that I look at a CSS methodology is, it’s not a framework, it’s an organization structure. That’s how I like to see it. It’s like a process almost. It’s like you’ve got a problem that you need to solve with CSS and you use the methodology to solve it for you and keep things predictable and organized. BEM’s just legendary for that because it’s been wildly successful.
Andy: Then you could almost qualify things like the style components and that sort of thing. You can almost say that they’re methodology orientated even though they’re a bit more framework entwined, but still, it’s a methodology of breaking things into tiny molecules. So essentially that’s what I’m trying to do with CUBE CSS as well. A thinking structure, I think I described it as.
Drew: So it’s an application of process for how you architect and you write CSS, and it’s not so much anything that’s based on tools or any other sort of technology, it’s just a sort of work flow. So there’s lots of different approaches out there. You mentioned BEM. There’s SMACSS, OOCSS, Atomic CSS. And then you’ve got these sort of unusual lovechild approaches like ABEM. Have you seen that one?
Andy: Yeah.
Drew: Why publish your own?
Andy: Yeah, yeah. Why make your own? That’s a very good question. I think those who know me well know I like to sail against the tide a lot. It’s mainly because I tend to do lots of varied projects as well, in varied teams. So it’s very hard, I’ve found, to work with BEM with a traditional developer because they’re used to using CSS for what CSS is all about: the cascade, et cetera, and that’s why I sort of stole that from the language.
Andy: On the other flip side is that less structured methodologies, it’s harder to work with a programmer, JS sort of person because they like structure and organization and small components, which is understandable working with the language that they work in.
Andy: So I found myself in these positions where I was working with different types of people, different types of projects where one methodology wasn’t quite working. Over the years, I’ve just been playing around with this idea of how things go, and then there’s the stuff me and Heydon did, Every Layout, which sort of enforced the big part of it, which is the C, the composition part, and then I’ve just sort of evolved it very rapidly over the last six months.
Andy: The only reason I wrote an article about it was because I was just doing this course and I thought I’d better write some supplementary material to go with it so people understand it, and it’s absolutely blown up. So maybe we’re not over methodologies quite yet, Drew.
Drew: So the course material that you’ve been putting together actually uses CUBE CSS as its methodology, does it?
Andy: Yeah. So a good 50% of the course is actually front-end, even though it’s a course unlimited. It’s so, so deeply entwined in the way that we build the front-end that I couldn’t just say, “Oh, by the way, this is how I write a nice CSS,” and then leave it. I know people like to get into the detail, so I was like, what I’ll do is, I’ll write this post that’s really long and really detailed and then if someone wants to skill up and really understand what we’re doing, then they can do, and the rest is from there. And here we are today, Drew, sitting and chatting about it.
Drew: So if somebody already understands BEM and is maybe already using BEM, as an example, because that’s probably one of the widest adopted methodologies, isn’t it? So if they’ve already got an understanding of BEM and they’re coming to CUBE, is that something that they would find easy to adopt? Are there many similarities or is it completely different?
Andy: Yeah. I’d say going from BEM to CUBE is probably a smooth transition, especially the way I like to still write the CSS for CUBE. So the majority of stuff’s happening at a higher level. So it’s happening at the cascade level and it’s happening global CSS, using the utilities to do a lot of the stuff. But when you come into the nuts and bolts of it, it’s very BEM-like components, blocks and elements. The only thing that’s sort of different from BEM is, instead of having modifiers, we use this thing called exceptions instead which is, instead of using CSS classes, it turns to data attributes, which I think gives a nice bit of separation and a real exception, which is what a modifier should be.
Andy: Part of the reason why I’ve sort of sailed away from BEM was because I found the way I was working with it, especially in design systems, was modifiers were dominated and it became a problem because it was like, what is the role of my block at this point? Because if I’m modifying it to the point where it’s unrecognizable regularly, then is this methodology still working how it’s supposed to work?
Andy: Then there’s the whole design token stuff, the stuff that Jina did with the Lightning Design System which we’ve all started adopting now. The utility class stuff really started to make sense with that approach. So I just sort of smushed all the things I like about other people’s work and slotted into my own instead.
Drew: You talk about with BEM, the sort of modifier approach kind of getting out of control. Was that one of the main pain points with BEM that CUBE tries to address?
Andy: Yeah, absolutely. I do like the modifier approach with BEM, it does make sense. What I like about BEM is something that I still do, is the double underscore for an element, and then there’s the double dash for a modifier. I like that way of organizing things. It was just a case of okay, well, a lot of the modifiers I can actually account for with utility classes and then the other bits…
Andy: So the example I use in the article is, imagine you’ve got a card and then the card is flipped, so the content appears before the image. So then that makes sense, to see display: flex and then you reverse it, reverse the order. That makes sense, to have an exception rule for that because it’s an exception of the card’s default state, and that’s how I like to see it. It’s like an affected state on that component, is what an exception is, and that makes sense.
Andy: With a lot of the stuff that I’ve done more recently, the modern front-end stack with reactive JavaScript, there’s a lot of state changing and it’s makes sense to handle it appropriately between CSS and JavaScript because they are becoming more and more entwined with each other, whether you like it or not. It’s a common language for them. As you can see by my face, very much not, but there you go. You’re probably thinking, “Actually, I’ve been working with react quite a lot recently, so I’m the other way round.” So I can see that as well.
Drew: So let’s get into CUBE then. So CUBE stands for Composition Utility Block Exception. Is that right?
Andy: Yeah. That’s the one.
Drew: What on Earth does that mean?
Andy: Oh, mate, you should have heard it before! I was doing a talk last year. I did a talk, and it was called Keeping it Simple with CSS that scales, and in there I sort of introduced an earlier version of it called CBEUT, which was Cascade Block Element Utility Token. It was rubbish. I hated the name of it. I did it a couple of times, this talk last year, and I really didn’t like the name. Then when I came to doing this stuff this year, I thought, “I really need to think about what it actually is and what it’s called.” I think CUBE is a little less rubbish. I think that’s the best way I can describe it.
Andy: But then, names are always rubbish for these things, aren’t they? I mean, like BEM, what a rubbish name that is! But we all do it. Look at Jamstack: that’s a terrible name as well, isn’t it?
Drew: My lips are sealed!
Andy: Your boss is going, “What?” It’s true. It’s just the way it is, isn’t it, in our industry.
Drew: It seems that a lot of the CSS methodologies try and work around some of the features of CSS, things like the cascade. My understanding from what I read is, CUBE tries to make use of those sort of features and properties of CSS.
Andy: Yeah. A good analogy for it is SCSS, like Sass, is an extension of the natural CSS language, isn’t it? You’re pretty much right in CSS still. So CUBE CSS is like that. So it’s an extension of CSS. So we should still write CSS, as CSS should… well, it’s supposed to be written. Let’s be honest, that how it’s supposed to be written, is the name gives it away: Cascading Style Sheets. So it’s embracing that again because what I’ve found is that I’ve gone all the way down to the micro-optimization level. I’ve been down the path that I see a lot of people going down recently where… and I’ve mentioned this in the article as well, where I can see… there’s some evidence of it recently. I’ve spotted people have been creating spacer components and stuff like that, and I understand that problem, I’ve been in that situation.
Andy: The way I fixed it was, instead of drilling down and trying to micro-optimize, I actually started thinking about things on a compositional level instead because it doesn’t matter how small your components are, at some point they’re going to be pages, they’re going to be views. You cannot avoid that, that’s how it’s going to be. So instead of trying to say, “Right, I need these tiny little helpers to do this layout,” you say, “Right, I’ve got a contact page view, or a product page view, and that’s a skeletal layout composition. Then inside of that I can slot whatever components I want in there.” We’ve got things like Grid and Flexbox now which make that much more achievable, and you can essentially put whatever you want inside of the skeletal layout, it doesn’t matter. Then the components should, at that point, behave how you want them to behave, with or without container queries.
Drew: This is the composition part of CUBE where you’re looking at things at more of a macro level, looking at how components can be composed into a view to create the sort of pages that you need to create for a site or an app or what have you.
Andy: So it’s creating rules, essentially. It’s like guidance. It’s trying to get guidelines for something. It’s not like a strict rules, like, you should do this, you should do that. That’s essentially what you’re doing with the browser, with this methodology, is you’re saying… you’re not forcing it to do anything. You’re saying, “Look, ideally, if you could lay it out like this, that would be great, but I understand that that might not be the case so here’s some bounds and some upper and lower levels that we can work with. Do what you can, and cheers.” Then you just chuck some components at it and let it just do what it does. You add enough control in there for it to not look rubbish.
Andy: So a good example would see… we do a layout in Every Layout called the switcher, which essentially will in-line items until a certain point where the calculation that works out how wide it should will just stack them on top of each other. But because we add margin to the in-line and the block, it works, regardless of what the state of it is, it still looks fine. That’s the idea, is that we’re not telling the browser to say, “You must layer this three column grid out.” We’re saying, “If you can layer a three column grid out, do it. Otherwise, just stack and space instead.” So it’s that sort of methodology, of letting the browser do its job really.
Drew: Many of the different approaches that have come along for CSS over the last few years have very much focused on the component level of dealing with everything like it’s a component. CUBE doesn’t downplay that component aspect so much, it just gives this extra concept over the top of taking those components and composing them into bigger layouts, rather than just saying the layout’s just another component.
Andy: Yeah, that’s a good point, yeah. I think the thing to say about components is they’re important, especially in modern front-end stuff. We do a lot of component stuff, system stuff. But the way I see a component is, it’s a collection of rules that extend what’s already been done.
Andy: The point I make in the article is, by the time you get down to the block level, most of your styling has actually been done, and really what your component is doing is dotting the Is and crossing the Ts and it’s saying, “Right, in this context…” So for a card, for example, make the image have a minimum height of X, and add a bit of padding here. Do this, that and the other. Put a button here. It’s just sort of additional rules on top of what’s already been inherited from the rest of the CSS. I think that’s probably the best way to describe it.
Andy: Whereas in BEM, the component is the source of truth. Until you put that class on the element, nothing has been applied at that point, and that method works. I just found I wrote more CSS by doing that, and more repetitive CSS, which I don’t like doing.
Drew: Would you consider the typography and the colors and the vertical rhythms, spacing, and all of that, is all that part of the idea of composition in this model?
Andy: Yeah. In a global CSS, yeah, absolutely. The vertical rhythm especially, and the flow. We did an article on that at 24 ways, didn’t we, a couple of years ago, the flow and rhythm component. That was a sort of abstract from this approach as well, where you set a base component which essentially uses the lobotomized owl selector. I don’t know how I’m going to describe that on the radio, but we will. We’ll just put, I think, in the show notes about the Heydon article or something. But essentially that, it selects child elements… sorry, sibling elements.
Andy: So it says, “Right, every element that follows element X have margin top of CSS costs and property value,” and then the beauty of that is then you can set that CSS custom property value on a compositional context as well. So you can say, “Right, in this component, if there’s some flow on the go, we’ll set flow space to actually be two rem because we want it to be nice and beefy, the wide space.” Then in another one you might say, “Actually, I want flow space to be half a rem because I want it to be tight.” This is all happening, all the control is coming from a higher level and then what you’re doing is, you’re adding contextual overrides rather than reinventing it each time, reinventing the same thing over and over again.
Drew: So that’s the C, Composition. Next we’ve got U, which is Utility. So what do we mean by utility?
Andy: So it’s a class that does one job, and it does it really well. That could be an implementation of a design token which… it’s an abstract of properties. Usually it’s colors or typography styles, sizing, and rules like that. The idea is you generate utility classes that apply those. So you’ve got a utility that will apply background primary, which is like the primary color, and then color primary, which is the text color. Then you might generate some spacing tokens for marginal padding, and all those sorts of things. They just do one job. They just add that one spacing rule, that one color rule, and that’s it.
Andy: But then you’ve got other utilities as well. So a good example is a wrapper utility. What that will do is, it will put a maximum width on an element and then it will put left and right auto margin to sit it in the middle of the thing. So it’s just got one job, and it’s just doing it efficiently and well.
Andy: So you’ve got your global styles, you’ve done a lot of your typography settings and a lot of your flooring space. Your composition’s then giving context and layout. Then utilities are applying tokens directly to elements to give them those styling that you need. So like a heading, for example, you’re saying, “I want this to be this size and I want it to have this lead in, and I want it to have this measure.” Then at that point… this is what I was saying about the blocks… then you go further down the stack, and you’ve already done most of the work at the point.
Andy: So they give you this really efficient way of working, and because HTML sort of streams down the pipe as well, it’s really nice to abstract the workload onto HTML rather than CSS as well, I’ve found. I used to really get into utility classes, like in this sort of old curmudgeon style of, “Oh, separation of concerns,” but I actually think it’s a really decent way of working. I mention in the article that I actually like Tailwind CSS. I think it does work, and I really like using it for product typing because I can really put something out really quick. But I think it just goes a little bit too far, does Tailwind, whereas I like to rain it in when it goes beyond just applying a single rule on a class. So that’s it, I think. Do you?
Drew: So, yeah, you talk in the article a lot about design tokens, which is something that we’ve talked about on the Smashing Podcast with Jina Anne back in episode three, I think it was. So it sounds like design tokens are a really fundamental aspect.
Andy: Yeah. Oh, God, yeah. I remember so vividly when Jina was doing the Lightning Design System stuff because I was building a design system at the time, or something that resembled a design system, and we were struggling to get executive approval of it. When the Lightning Design System came out, I literally just sent them link after link and I said, “This is what we’re doing. We’re building a design system. This is what Salesforce are currently using it for.” I remember her work at the time actually helped me to get stuff through the door.
Andy: Then the design token stuff has always stuck with me as being a really good way of applying these rules. Because I’m a designer by trade, so I can just sort of see that organization and the ability to organize and create a single source of truth being really useful because it’s something we’ve not really had in digital design, especially in the Adobe era of working with Photoshop and stuff, we just didn’t have that lUXury. We had it in print with the Pantone Book but we didn’t have it in digital with random hex codes all over the shop.
Andy: So it’s just great. I love that level of control. Actually, I think it aids in creativity because you’re not thinking about unimportant stuff anymore, you’re just thinking about what you’re doing with it.
Drew: Does the implementation of those design tokens matter particularly with the approach? Is it always CSS custom properties?
Andy: I think that’s a really important point with CUBE. Some of the responses I’ve had, people have struggled with this a little bit. There’s no mention of technology in it whatsoever. The only technology that’s consistent is CSS. You can do it however you want. You could do all this with whatever CSS and JS things people are doing now, or you could it with just Vanilla CSS. You could do it with Sass. I do it with Sass. Less, if that’s what you’re still doing. All these available technologies, post CSS, all these things. You can do however you want to do it, it doesn’t matter.
Andy: The idea is that if you follow those sort of constructs, you’ll be fine. That’s the idea behind it. It’s a very loose and not strict as some of the methodologies are. I’ve seen it with BEM especially, people get really ingrained in the principles of BEM to the point where it’s like you’re not even solving the problem anymore. I think that you’ve got to be flexible. I said it in this talk last year. I was like, “If you stick to your guns too tightly, you can actually cause problems for yourself in the long run because you try and follow a certain path, and you know it’s not working anymore.” You should always be flexible and work with a system rather than working to the letter to it.
Drew: So the B, the B is Block. You’ve talked about this idea, that by the time you get down to the block level, most of everything should be in place, and then the block level styling is only really concerned with the actual very detail of a particular component. Generally, is the concept of a block similar to what people will be familiar with?
Andy: Oh, absolutely, yeah. So imagine your BEM component and take all the visual stuff out of it, and that’s what you’re left with, essentially, the block. This is what I struggled to articulate when I first started thinking of this methodology. A block is actually really a C, it’s a composition, but that makes it really difficult because you’re into recursive territory there and I think people’s brains would explode. But really that’s what a block is, it’s actually another compositional layer but more of a sort of strict context, so like your card, your button, your carousel, if that’s what you like doing still, and all that sort of stuff.
Andy: It’s like a specific thing, a component, and then inside of there you’re setting specific rules for it to follow, really ignoring the rest so you’re not… You might apply tokens in the blocks, and I do do that still, but really it’s more layout orientated, is a block, as far as I work with them, or at least taking the token and applying it in a specific way, like a button hover status, stuff like that. So really your block should be tiny by the time you get down to them, they shouldn’t be really doing much at all.
Drew: So it could be as small as a hyperlink.
Andy: Yeah.
Drew: But it could also be a compound collection of other blocks?
Andy: Yeah. Like a module sort of thing. You could definitely do that. Because, again, that goes back to the sort of compositional aspect of it, is that whatever goes in it shouldn’t matter. The good example of that is like the card. So the content of a card is, say, like a heading, a summary and a button. You shouldn’t really be specifically targeting those three elements. You should be saying, “Look, anything that happens to find itself in content, have some flow rules in there and have some sort of compositional layout rules,” and then it doesn’t matter what you put in there. You might decide that you want to put an image in that content thing and it should just work, it should just look fine.
Andy: That’s the whole point of working with CSS. It’s a very forgiving way of working with CSS. You’re making your life a lot easier by being less rigid because when stuff accidentally finds itself in something, which it will, it doesn’t look horrific as it could do if you were being more specific about things, is what I’ve found.
Drew: I definitely need a lot of forgiveness around my CSS!
Andy: I know you do!
Drew: Cheers! So that’s the B. The last thing is E: E is Exception. Now we’re not talking about error messages, are we?
Andy: No, no. It’s a sort of-
Drew: We’re not talking about JavaScript exceptions.
Andy: Yeah, yeah. There should be none of that at this point. I should hope not anyway, otherwise you really are in the woods at that point: I don’t think I’m going to be able to help you! The whole idea of this is… so you’ve created the context with your block, and an exception is exactly that, it’s like an exception to the rule: so a flipped card, or it might be a ghost button. So you know those buttons that have just got a border and a transparent background? That would be an exception because a button has probably got a solid background color and then the label color. So it’s creating a sort of distinct state of variation.
Andy: The reason why I do this with data attributes instead of classes, and the reason why that is is because a) I think it’s nice to have a distinction. So when you’re scanning through lots of HTML, you can see data, hyphen something, you’re like, “Right, okay, something has definitely changed on this element.” The other thing is that it’s very nice to give JavaScript access to that state, and vice versa as well. So I really like applying state with data attributes in JavaScript. I think that is essentially what they’re for, a sort of communication layer. The harmony between them seems to work really well.
Andy: So a good example is, say you’ve got a status message and then JavaScript will add data state is either success, error or information, or something. You can then hook into that with your exception styles in CSS. So you know that’s an exception of the status component and it’s going against its default state. So it’s just a really handy way of working with things. It’s predictable on both ends: it’s predictable on the CSS end, and it’s predictable on the JavaScript end as well.
Drew: I guess it’s quite nice that something that class names don’t give you is a property and value. So if you want to have something like that which is the state, and it can either be success or failure or warning or what have you, you can specifically address that state property and flip its value. Whereas with a big long list of class names, if you’re manipulating that in JavaScript, for example, you’re going to have to look at each one of them and add that business logic in there that says, “I can only set one of these,” and what happens if two of those classes are applied to the same element? You can’t get that with a data attribute, it only has one value.
Andy: Yeah. That’s a good way of saying that, yeah. It is very helpful, I’ve found, to work like that.
Drew: That’s quite interesting. I don’t think I’ve seen any other methodologies that take that approach. Is that completely unique to CUBE, doing that?
Andy: It might be. I don’t really pay much attention to other stuff, which I should do. Someone else is probably doing that. I’ll tell you now, it’s been the most controversial aspect of it. Some people really did not like the idea of using data attributes. The thing is as well, and how I respond, is, do what you want. We’re not telling you to do things in a certain way, it’s just suggestions. If you want to do exceptions to CSS classes, like modifiers, then knock yourself out. The CUBE police aren’t going to come knocking at your door. It’s absolutely fine.
Andy: The CUBE thing is a thinking thing, it’s a structure. You apply that structure however you want to apply it, with what tooling you want, or whatever technology you want. As long as you keep things consistent, that’s the important thing.
Drew: So there’s no such thing as pure CUBE?
Andy: The way I write it is pure CUBE, Drew. Everyone else is just a fake, it’s just a weak immitation.
Drew: Apart from to you, no-one can say, “That isn’t textbook CUBE.”
Andy: No, that’s it. No-one can dispute that really, can they? So, yeah, I’ll go with that. Gives you a bit of clout or something, I think, something like that.
Drew: Can you mix and match a CUBE approach with other methodologies? Can you use bits of BEM?
Andy: Yeah, I reckon so. I’ve been thinking about it a little bit because I’m going to do some more stuff on it soon because it’s become quite popular, so people will want more work. One thing I’m going to look at is how to approach using the CUBE methodology with something existing.
Andy: So there’s two opposite ends of the scale. A good question that people have asked is: “How does this work with every layout, the other stuff?” I’m like, basically, every layout is the C. That’s what every layout is, it’s the compositional layer. Then someone else asked, “Well, how would this work with something like Atomic Web Design, like their stuff that Brad Frost did? It’s like, well, you could break those pieces up and apply them at each level. Atomic Design goes all the way down into the micro detail. It’s abstracting that into using, right, okay, well I can apply this with utilities, so the molecules, I think. I can apply that with the utilities, and it’s translating what you know already into this slightly different structure of working.
Andy: Really, it’s a renaming for a lot of things. I’ve not invented anything here, I’ve just sort of, like I say, I’ve just stolen things that I like. I love the way that some of the Atomic Design stuff is thought about. That’s really some smart work. And BEM. The stuff Harry did, the Inverted Triangle CSS, I thought that was really cool. So I’ve just sort of nicked bits that I like from each one of them and sort of stitched them all together into this other hybrid thing, approach. More to come, I think.
Drew: Can the CUBE approach be applied to existing projects that already have CSS in place or is it something you really need to start on a fresh project with?
Andy: That very much depends. So if you’ve got like a bootstrap job and it’s just got thousands of lines of custom CSS, that I’ve definitely been involved in before, then I think you might be trying to put a fire out with a bottle of water at that point. But if you… say, for instance, if you’ve got a rough BEM setup and it’s gone a bit layer-y, you could use CUBE to refactor and actually pull it back into shape again.
Andy: It depends, the answer to that one. But it’s doable, as with everything. If you really want it to work, Drew, you can do it if you want, can’t you? The world is our oyster!
Drew: Especially if your BEM site’s gone layer-y.
Andy: Yeah. Nothing worse than a layer-y BEM site!
Drew: I’ve noticed in the examples that you’ve given… and I’ve got an eagle eye, I’ve seen you’ve been doing this for a while… a lot of your class values in the HTML attribute are wrapped in square brackets.
Andy: Oh, God, yeah. Tell you what, Drew-
Drew: What is that about? What is that about?
Andy: I’ll tell you what, if there’s ever one thing that I’ve done in my whole career that’s just been absolutely outrageously controversial… and you follow me on Twitter, you’ve seen what comes out of my mouth… it’s those bloody brackets! My, God! People either love them or hate them. They’re Marmite, they are.
Andy: The reason I do them is a grouping mechanism. So if you look at the way that they’re structured, the way I do it is, block at the start and then I’ll do a utilities after that. Then what I might do is, in between a block group and a utility group, there might be another block class. So a good example of that would be… we’ll go back to the card again. But then say that there’s a specific block called a CTA, like a call to action. You might have that applied to the card as well, and then your utilities are enforcing the design attributes, so the colors and all that business. So then you’ve got three groups of stuff.
Andy: When you come to it, if you’ve got that order in your head each time, you know, okay, right, this first group’s blocks. Oh, that’s looks like another block. I’ve got that one. Then it’s like, right, they’re definitely utility classes. Then what I might even do is, if there’s a lot of design token implementation, have that in a separate group. So it’s just very clear what each group is doing, and there’s a separation inside of the classes there as well. I’ve found it really helpful. Some people find it incredibly offensive. It’s definitely a do it if you want to do it. Definitely you don’t have to do it.
Andy: It’s quite funny, when I published that article, so many people finished halfway through to ask me, “What is it with these brackets?” I was like, “Did you finish the article? Because there’s a big section at the end where it explains exactly what they’re doing,” to the point where I actually had to write a bit in the middle of the article of, “If the brackets are essentially doing your head in, click here and I’ll skip you all the way down to that explanation bit so you can just read about them.” It can be quite controversial.
Andy: When I’ve worked on really, really complex front-ends… and we did a little bit of stuff together, didn’t we, last year?
Drew: Yeah.
Andy: You’ve seen the sort of design implementation on that project that we were on. It requires that sort of grouping because there’s just so much going on at the time, there’s so much different stuff happening. I’ve just found it really, really useful over the years, and also get lots of questions about it, to the point where I was almost going to write just one page on my website that I could just fire people to to answer the question for them.
Drew: Slash, what’s with the brackets?
Andy: Yeah. Slash, brackets. Have you seen that new Hey Email thing that’s just come out? They’ve bought a domain of itsnotatypo.com, just to answer the whole Imbox, like im with an M rather than an in. Basically, I was like, “I think I need to do that,” like, whatswiththebrackets.com, and just do a one-pager about it.
Drew: It strikes me that the approach with brackets actually could be something that might be useful when using things like Tailwind or something that has a lot of classes because that can-
Andy: Yeah. Oh, God, yes.
Drew: You have classes that are addressing your break points and what have you, and then you’ll have things that are for layout, things that are for color or type, or what have you. So it might also be a useful way of dealing in situations like that.
Andy: I’d definitely agree with that. A good analogy… not analogy. A good bit of info about Tailwind is that I actually quite like Tailwind. I’ve used that on very big projects. The one thing that really opened my eyes to Tailwind though was when I saw a junior developer try to work out what was going on, and it was really, really eye-opening because they just didn’t have a clue what was happening.
Andy: I think that’s one problem I’ve found with these sort of over-engineered approaches, which I think it’s fair to say Tailwind is, is that there’s a certain skill level that is required to work with it. I know the industry tends to have an obsession with seniority now, but there’s still people that are just getting into the game that we need to accommodate, and I think having stuff that’s closer to the language itself is more helpful in those situations because they’re probably learning material that is the language as it is. So I think it’s just a bit more helpful. Especially having a diverse team of people as well. Just food for thought for everyone.
Drew: People might look at all the different methodologies that are out there and say, “This is evidence that CSS is terrible and broken, that we need… all these problems have to be solved by hacking stuff on top. We need tools to fix bits of CSS. We need strict procedures for how we implement it, just to get it to work.” Should the platform be adapting itself? Do we need new bits of CSS to try and solve these problems or are we all right just hacking around and making up funny acronyms?
Andy: I think the power of CSS, I think, is its flexibility. So if you’re going to program CSS, a lot of the knowledge is less of the syntax and more of the workings of a browser and how it works. I think that might be a suggestion, that the problem is that people might not have learnt CSS quite as thoroughly as they thought they might have learnt it, who created these problems. I’ve seen that in evidence myself. I spotted a spacing mechanism that had been invested, which was very complicated, and I thought, “This person has not learnt what padding is because padding would actually fix this problem for them, understanding how padding works and the box model.” That’s not to be snidey about it.
Andy: We work in an industry now that moves at an even faster pace than it has done previously and I think there’s a lot less time for people to learn things in detail. But, on that front, I think CSS still does have work to do in terms of the working group, who I think do a bloody good job. A great, shining example of their work was the Grid spec which was just phenomenal. The way that rolled out in pretty much every browser on day one, I thought that was so good.
Andy: But we’ve got more work to do, I think, and I think maybe the pace might need to increase a little, especially with stuff like container queries, we all love talking about them. Stuff like that I think would help to put CSS in a different light with people, I think. But I think CSS is brilliant, I love it. I’ve never had a problem with it in lots of years really. I do find some of the solutions a bit odd, but there you go.
Drew: What’s the response been like to CUBE since you published the article?
Andy: Mind-blowing. I honestly published it as just supporting material, and that’s all I expected it to be, and it’s just blown up all over the place. A lot of people have been reading it, asking about it, been really interested about it. There’s definitely more to come on it.
Andy: I did say in the article, I said, “Look, if people are actually quite interested in this, I’ll expand on this post and actually make some documentation.” I’ve got bits of documentation dotted around all over the place, but to sort of centralize that, and then I was thinking of doing some workshops and stuff. So there’s stuff to go. It’s how Every Layout started as well. We both had these scattered ideas about layout and then we sort of merged them together. So something like that, I suppose, will come in the future.
Drew: Are there any downsides that you’re aware of to using CUBE? Are there problems that it doesn’t attempt to solve?
Andy: Yeah. This accent, Drew, it just won’t go way, no matter what I do! In all seriousness, I think CUBE’s got as close as I can get to being happy with the front-end, which is saying a lot, I think. You never know, things might change again. This has evolved over more recent years. Give it another five years, I’ll probably be struggling with this and trying something else. I think that’s the key point, is to just keep working on yourself and working on what you know and how you approach things.
Andy: This definitely won’t work for everyone as well, I know that for a fact. I know that from my comments. I don’t expect it to work for everyone. I don’t expect anything to work for everyone. It’s the same with JavaScript stuff: some people like the reactive stuff and some people don’t. It is what it is. We’re all people at the end of the day, we all have different tastes. It’s all about communicating with your teammates at the end of the day, that’s the important thing.
Drew: I know you as a very talented designer and developer and you, like many of us, you’re just working on real projects all day, every day. But you’ve recently started publishing on this site, Piccalilli, which is where the CUBE CSS introduction article was. So Piccalilli is kind of a new venture for you, isn’t it? What’s it all about?
Andy: Very kind of you to say, Drew. You’ve actually worked with me, so that’s high praise. But the Piccalilli thing is an evolution. So I’m a freelancer. I do client work, but I think this has become apparent with the pandemic, that that is not the most sustainable thing in the world in some industries. I think freelancing can be very, very tough, as a developer and designer. It’s something that I’ve been doing it for so long now, 10 years… well, 12 years now actually.
Andy: I fancied doing something a bit different and applying the knowledge that I’ve got and actually sharing it with people. I’ve always been very open and sharing, and I wanted to formalize that. So I created Piccalilli to write tutorials, but mainly for courses that I’m producing: that’s the main meat and potatoes. And then there’s the newsletter which is… people are really enjoying the newsletter because I share cool things I’ve found on the internet every week. That’s the backbone of it. It’s just going really well. That’s essentially where I want to see myself doing more and more full-time, as the years go on, I think.
Drew: So what’s coming next for Piccalilli? Have you got anything that you’ve got coming out?
Andy: Thanks for the door open there, Drew! By the time this recording goes out, the first course will be live: Learn Eleventy From Scratch, and that’s where we learn how to build a Gatsby website! No, you learn how to build an Eleventy site. So you start off with a completely empty directory, there’s nothing in it, it’s empty, and then at the end of it you’ll finish up with this really nice-looking agency site. We learn all sorts in it. You learn how to really go to town with Eleventy. We pull remote data in from places. We use CUBE CSS to build a really nice front-end for it.
Andy: If you want to get into the Jamstack and you want to get into static site generators, or just how to build a nice website, it’s just a really handy course, I hope, for that. It’s currently being edited within an inch of its life as we’re talking. It’s going to be cool, I hope, and useful. But that’s an accumulation of a lot of stuff I’ve been doing over the last couple of years. So it should be fun.
Andy: So buy it, and I’ll do a discount code, do like smashingpod for 40% off, and you can get it when it comes out.
Drew: Amazing. We’ll link that up. Have you figured out how to spell Piccalilli reliably yet?
Andy: I was on with Chris and Dave with the ShopTalk Show and I said on there, “If there’s ever one thing you want to hire me for it’s to write Piccalilli by hand first time without even thinking about it,” because I’ve written that word so many times that I just know exactly how to spell it off by heart. So the answer to your question is yes.
Drew: Well, I’m still struggling, I’ll tell you that much!
Andy: It is hard. Oh, God. I totally empathize. It took me a long time to learn how to spell it but it’s one of those words in our vocabulary. This year I’m trying to spell necessary without making a spelling mistake!
Drew: So I’ve been learning all about CUBE CSS. What have you been learning about lately, Andy?
Andy: Do you know what? This is going to surprise you, Drew. MySQL is what I’ve been learning about recently. So, basically, Piccalilli is totally self-published. It’s an Eleventy site but it’s got an API behind it, and that’s got a MySQL database behind it. The stuff that gives people content that they’ve purchased requires some pretty hefty querying. So I’ve just actually properly invested in some MySQL… especially the difference between joins, which I didn’t actually realize there was a difference between each type of join. So that’s been really useful and it’s resulted in some pretty speedy interactions with the database.
Andy: I used to run this thing called Front-End Challenges Club and when I first launched it it just collapsed and died on itself because MySQL was shoddy to say the least. So I’ve really been learning how to do that because I’m not a backend person at all, I’m a pixel-pusher. So it’s definitely not in my remit. That’s more your neck of the woods, isn’t it? I find it really cool, MySQL. I actually really like writing it. It’s a really nice, instructional language, isn’t it?
Drew: It is, it’s great. I learnt SQL at school.
Andy: Wow!
Drew: We’re talking like 20 years ago now.
Andy: Did they have computers in those days?
Drew: They did, yeah. We had to wind-
Andy: Did you have to write it by hand?
Drew: We had to wind them up! We did. But, I tell you, for a developer, it’s akin to learning your times tables: one of those things that seems like a bit of a chore but once you’re fluent, it just becomes useful time and time again.
Andy: Yeah. For sure. There’s really tangible differences as well. You really see the difference in speed. I really like working with Node because that’s really fast but Node and MySQL is just… not a very common choice, but I think it’s a pretty good choice. I think it works really, really well. So I’m happy with that. As you know, I don’t like writing PHP. So that’s never going to be an option.
Drew: If you, dear listener, would like to hear more from Andy, you can follow him on Twitter where he’s at hankchizljaw. You can find Piccalilli at piccalil.li, where you’ll also find the article describing CUBE CSS, and we’ll also add links to all of those in the show notes, of course.
Drew: Thanks for joining us today, Andy. Did you have any parting words?
Andy: Stay safe, and wear your mask.
(il)
Website Design & SEO Delray Beach by DBL07.co
Delray Beach SEO
source http://www.scpie.org/smashing-podcast-episode-19-with-andy-bell-what-is-cube-css/
0 notes
alscyf · 6 years
Text
Guidelines
Instead of making a special page for this (because every time I’ve made a rules page on other blogs, I always end up hating the way it looks 0.5 seconds after I finish it), I’m just going to make a post here.  This will probably be more of a ‘what to expect on this blog’ kind of thing as opposed to actual rules, so let’s call it a Head’s Up page:
Credit for images and artwork that are not my own can be found on the navigation page!
As stated in my description, this is an independent roleplaying blog.  I am happy to interact with anyone who is interested in writing with me, whether we are mutuals, canon or OC, in the same fandom, or – not.  I just want to write, so if you’re up to it, let’s do this!
As it ALSO says over in the description, I have moved over from 'rafiiiq' because I'm stupid and deactivated the e-mail associated with that account, and then proceeded to forget the password to said account.  I've tried everything I can think of, and so far this was the easier option.
Minor godmodding is a-okay by me.  Like, if you’re writing an ask or starter and need my character doing/saying something specific, go for it!  If it’s a simple action – your character asks mine to pass something, it’s alright to assume it’s been handed over.  As long as it does not stretch beyond that, we’re good!
I tend to use small text and icons, on top of bare-minimum formatting.  This is not set in stone, and I certainly don’t expect my partners to use the same. If you need me to change the small text thing around for our thread or an ask you sent, PLEASE don’t hesitate to let me know!  I’ll be more than happy to use normal text (and will probably make a note of it for future threads/asks/etc).
Constructive criticism is welcome (and I’ll probably ask for it every now and then!).  Hate is not.  Hate sent to me will be laughed at, deleted, and the sender will be blocked.  If you cannot conduct yourself like a decent human being, you’re a waste of time and I’m not going to acknowledge you.  Sorry if this sounds harsh, but sending hate is just so stupid, cowardly, and childish, I’m am absolutely fed up with seeing it around.  So, yeah, just don’t.
Everything on this blog will be tagged, no exceptions.  I am 21+ and perfectly comfortable writing numerous kinds of NSFW material which, needless to say, will likely appear on this blog from time to time.  Violence, gore, smut, darker themes, and the like – it’s all fair game.  But, again, it WILL be tagged as (without parentheses):  NSFW //, (subject) cw, (subject) //, (subject) for ts, and (subject) tw.  Rarely will I reblog or post images that are of anything but my muse on here, so you should be pretty safe as far as that goes.  Still, the same applies in the unlikely case that I do post a thing.
If there’s something you want tagged, send a message and let me know.  I will not post your message (or, anything you send me OOC, unless it’s for a prompt or you specifically say ‘please post this’.  Mun-to-mun communication is between you and I, not us and the dashboard), but I will make a note to tag whatever it is in future posts.
Shipping:  While it’s certainly not the only reason I’m here, I’ll admit that I love to ship as much as the next person, provided the chemistry is there between our muses.  If you’re feeling a thing, don’t hesitate to lemme know!  Chances are, I’ll be 110% up for giving it a shot, at least.
Speaking of prompts, I love them.  Rarely will a day go by that I don’t reblog a thing, ‘cause I think they’re awesome ice breakers (and some of my all-time favorite RP threads have sprung up from memes).  So yeah, if I reblog a thing and you want to send something in?  Do it.  I don’t care if our muses have never spoken, I don’t care if it’s awkward – if you want to send it, send it.  
Replies: I am in the process of recovering from a rather serious illness, and the treatment for it saps a lot of my energy.  I’m also back to work, so it’s safe to say that my replies will be slow as hell.  Patience is greatly appreciated and will be extended to each and every one of my partners.
Contact: Chatting OOC helps spark my muse (seriously, there is nothing more that I love that screaming with my partners about our characters over Skype.  Best thing ever), so I’m certainly not hesitant about giving out my contact info.  You are, of course, more than welcome to contact me via Tumblr’s methods, if you prefer.  Otherwise, if you’d like my Skype or Discord handle, just shoot me a message!  But, I do ask that if you add me, please let me know who you are.  Playing the whole ‘creep or not creep’ game is only fun so many times.
I’m also really, really shy, so…if we’re chatting and I suddenly go quiet, it’s because I suck at conversation and probably have no idea what to say. Or, some kind of work thing has come up and I had to step away in a rush, which..actually happens quite a bit, admittedly.  Either way, I apologize ahead of time.
And that should cover it!  As situations arise, I will update this, but for the time being, it’s good enough.  I…think?  In any case, I’m looking forward to meeting you all, and if you have any questions/concerns/etc, feel free to send them my way!
0 notes