Slide 1
            
                
                
                    Utility First CSS Isn’t Inline Styles Sarah Dayan | Principal Engineer at Algolia | CSS Day 2024
                 
             
                    Slide 2
            
                
                
                    CSS
Hi, I’m Sarah! 👋 Principal Engineer at Algolia JavaScript & CSS Lover Massive Cheese Enthusiast
                 
             
                    Slide 3
            
                
                
                    “
Is CSS even a programming language?
                 
             
                    Slide 4
            
                
                
                    “
Are you sure you don’t want to be a manager?
                 
             
                    Slide 5
            
                    Slide 6
            
                
                
                    
                    <ul class=”divide-y divide-gray-100”> <li class=”flex gap-x-4 py-5”> <img class=”size-12 flex-none rounded” src=”avatar.jpg” /> <div class=”min-w-0”> <p class=”text-sm font-semibold leading-6 text-gray-900”> Sarah Dayan </p> <p class=”mt-1 truncate text-xs leading-5 text-gray-500”> Principal Engineer at Algolia </p> </div> </li> </ul>                
             
                    Slide 7
            
                
                
                    
                    <ul class=”divide-y divide-gray-100”> <li class=”flex gap-x-4 py-5”> <img class=”size-12 flex-none rounded” src=”avatar.jpg” /> <div class=”min-w-0”> <p class=”text-sm font-semibold leading-6 text-gray-900”> Sarah Dayan </p> <p class=”mt-1 truncate text-xs leading-5 text-gray-500”> Principal Engineer at Algolia </p> </div> </li> Atomic (or utility-first) CSS </ul>
Visual APIs                
             
                    Slide 8
            
                
                
                    
                    <ul class=”list”> <li class=”list-item”> <img class=”list-avatar” src=”avatar.jpg” /> <div class=”list-content”> <p class=”list-heading”> Sarah Dayan </p> <p class=”list-subheading”> Principal Engineer at Algolia </p> </div> </li> </ul>                
             
                    Slide 9
            
                
                
                    
                    <ul class=”list”> <li class=”list-item”> <img class=”list-avatar” src=”avatar.jpg” /> <div class=”list-content”> <p class=”list-heading”> Sarah Dayan </p> <p class=”list-subheading”> Principal Engineer at Algolia </p> </div> </li> </ul>
Semantic CSS
Identity-based contract                
             
                    Slide 10
            
                    Slide 11
            
                    Slide 12
            
                    Slide 13
            
                
                
                    “
It violates separation of concerns!
                 
             
                    Slide 14
            
                    Slide 15
            
                
                
                    “
It’s ugly and hard to read!
                 
             
                    Slide 16
            
                    Slide 17
            
                
                
                    “
It’s just the same as inline styles!
                 
             
                    Slide 18
            
                
                
                    “
It’s just the same as inline styles!
                 
             
                    Slide 19
            
                
                
                    Inline styles only have a local impact.
                 
             
                    Slide 20
            
                    Slide 21
            
                
                
                    
                    <article style=”color: darkblue”> <header> <h2>Blade Runner 2049</h2> </header> <section> <p> Officer K (Ryan Gosling), a new blade runner for the Los Angeles Police Department, unearths a long-buried secret that has the potential to plunge what’s left of society into chaos. </p> </section> </article>                
             
                    Slide 22
            
                
                
                    No pseudo-classes No pseudo-elements No combinators No media queries No animations
                 
             
                    Slide 23
            
                
                
                    Atomic classes live in style sheets.
                 
             
                    Slide 24
            
                
                
                    .on-hover:text-red:hover { color: red; }
                 
             
                    Slide 25
            
                
                
                    
                    <article> <header> <h2>Blade Runner 2049</h2> </header> <section> <p> Officer K (<a class=”on-hover:text-red” href=”#”>Ryan Gosling</a>), a new blade runner for the Los Angeles Police Department, unearths a long-secret that has the potential to plunge what’s left of society into chaos. </p> </section> </article>                
             
                    Slide 26
            
                
                
                    .group:hover .group-hover:text-red { color: red; }
                 
             
                    Slide 27
            
                
                
                    
                    <article class=”group”> <header class=”group-hover:text-red”> <h2>Blade Runner 2049</h2> </header> <section> <p> Officer K (Ryan Gosling), a new blade runner for the Los Angeles Police Department, unearths a long-secret that has the potential to plunge what’s left of society into chaos. </p> </section> </article>                
             
                    Slide 28
            
                    Slide 29
            
                    Slide 30
            
                
                
                    .peer:in-range ~ .peer-invalid { visibility: hidden; } .peer:out-of-range ~ .peer-invalid { visibility: visible; }
                 
             
                    Slide 31
            
                
                
                    
                    <form> <label> <span>Date</span> <input type=”date” class=”peer” min=”2024-01-01” max=”2024-12-31” /> <p class=”peer-invalid”> Please provide a valid date. </p> </label> </form>                
             
                    Slide 32
            
                    Slide 33
            
                    Slide 34
            
                
                
                    @media (min-width: 768px) { .col-md-1 { flex: 0 0 auto; width: 8.33333333%; } .col-md-2 { flex: 0 0 auto; width: 16.66666667%; } .col-md-3 { flex: 0 0 auto; width: 25%; }
                 
             
                    Slide 35
            
                
                
                    @media (hover: none) and (pointer: coarse) { .on-touch:block { display: block; } }
                 
             
                    Slide 36
            
                
                
                    @media (orientation: landscape) { .on-landscape:hidden { display: none; } }
                 
             
                    Slide 37
            
                
                
                    @media (prefers-color-scheme: dark) { .dark:bg-darkblue { color: darkblue; } }
                 
             
                    Slide 38
            
                
                
                    Atomic classes have context.
                 
             
                    Slide 39
            
                    Slide 40
            
                
                
                    Inline styles are unbounded.
                 
             
                    Slide 41
            
                    Slide 42
            
                    Slide 43
            
                
                
                    Inline styles don’t have a strategy.
                 
             
                    Slide 44
            
                
                
                    Atomic classes are a system.
                 
             
                    Slide 45
            
                
                
                    Inline styles convey no intent.
                 
             
                    Slide 46
            
                
                
                    .col
fl
fl
fl
{
oat: left }
.col {
oat: left }
.col {
oat: left }
                 
             
                    Slide 47
            
                
                
                    .col {
oat: left }
.col {
oat: left }
fi
fl
fl
fl
.clear x
.col {
oat: left }
                 
             
                    Slide 48
            
                
                
                    .clearfix:after { content: ”; display: table; clear: both; }
                 
             
                    Slide 49
            
                
                
                    
                    <header> <h2 style=” overflow: hidden; text-overflow: ellipsis; white-space: nowrap ” > Blade Runner 2049 </h2> </header>                
             
                    Slide 50
            
                
                
                    
                    <header> <h2 class=”truncate”> Blade Runner 2049 </h2> </header>                
             
                    Slide 51
            
                
                
                    
                    <header> <h2 style=” overflow: hidden; text-overflow: ellipsis; white-space: nowrap ” > Blade Runner 2049 </h2> </header>
<header> <h2 class=”truncate”> Blade Runner 2049 </h2> </header>                
             
                    Slide 52
            
                
                
                    All abstractions convey intent.
                 
             
                    Slide 53
            
                
                
                    Atomic CSS abstracts visuals, not identity.
                 
             
                    Slide 54
            
                
                
                    Atomic CSS abstracts visuals, not identity.
                 
             
                    Slide 55
            
                
                
                    Inline styles aren’t cacheable.
                 
             
                    Slide 56
            
                    Slide 57
            
                    Slide 58
            
                    Slide 59
            
                    Slide 60
            
                    Slide 61
            
                    Slide 62
            
                    Slide 63
            
                
                
                    You can cache inline styles. But that’s pointless.
                 
             
                    Slide 64
            
                    Slide 65
            
                
                
                    HTML
CSS
File updates
Time
                 
             
                    Slide 66
            
                    Slide 67
            
                
                
                    Assets freshness speaks volumes on where to spend focus.
                 
             
                    Slide 68
            
                
                
                    A healthy codebase grants you focus.
                 
             
                    Slide 69
            
                    Slide 70
            
                    Slide 71
            
                    Slide 72
            
                
                
                    CSS compositions always have to be mentally compiled.
                 
             
                    Slide 73
            
                
                
                    
                    <div class=”flex mb-16 md:mr-0 mr-24”> <a class=”text-color-inherit hover:underline” href=”/doc/guides/security/api-keys/” > API keys </a> </div> <div class=”flex mb-16 md:mr-0 mr-24”> <a class=”text-color-inherit hover:underline” href=”/doc/guides/security/security-best-practices/” > Security best practices </a> </div>                
             
                    Slide 74
            
                    Slide 75
            
                
                
                    Well-crafted systems liberate you.
                 
             
                    Slide 76
            
                
                
                    Well-crafted systems liberate you.
                 
             
                    Slide 77
            
                    Slide 78
            
                
                
                    Constructive criticism is necessary.
                 
             
                    Slide 79
            
                
                
                    “
Your brain rewards you for classifying new information into existing buckets. Looking for similarities is lower energy than understanding new differences. Matthias Verraes | Software consultant, curator of DDD Europe
                 
             
                    Slide 80
            
                
                
                    “
Proclaiming that the new idea is the same as the old idea gives you permission not to investigate it deeply, stick to the existing reality where you are an expert in the old idea, and the new ones are merely repackaging of your insight. Matthias Verraes | Software consultant, curator of DDD Europe
                 
             
                    Slide 81
            
                
                
                    “
Proclaiming that the new idea is the same as the old idea gives you permission not to investigate it deeply, stick to the existing reality where you are an expert in the old idea, and the new ones are merely repackaging of your insight. Matthias Verraes | Software consultant, curator of DDD Europe
                 
             
                    Slide 82
            
                
                
                    “
There’s such a firehose of information that keeping up with even a single topic is impossible. We should be forgiven for not knowing and understanding and keeping up with everything, even if our job is knowing and understanding and keeping up with everything. Matthias Verraes | Software consultant, curator of DDD Europe
                 
             
                    Slide 83
            
                
                
                    “
But let’s try to make a habit of this. When you feel “oh I get it, it’s just like…”, then follow up with “so what makes the new thing different from the old thing?”
Matthias Verraes | Software consultant, curator of DDD Europe
                 
             
                    Slide 84
            
                
                
                    “
But let’s try to make a habit of this. When you feel “oh I get it, it’s just like…”, then follow up with “so what makes the new thing different from the old thing?”
Matthias Verraes | Software consultant, curator of DDD Europe
                 
             
                    Slide 85
            
                
                
                    Atomic CSS isn’t a one-size-fits-all.
                 
             
                    Slide 86
            
                
                
                    And sometimes, problems don’t exist.
                 
             
                    Slide 87
            
                    Slide 88
            
                    Slide 89
            
                
                
                    This is not for me. But it might, eventually.
                 
             
                    Slide 90
            
                
                
                    Think different critically.
                 
             
                    Slide 91
            
                
                
                    CSS
Thank you! sarahdayan.dev algolia.com