Pigułka CSS

Cezary Walenciuk

Pigułka CSS

@walenciukC

Speaker
blog
Copyright © Cezary Walenciuk
blog
Copyright © Cezary Walenciuk
blog
Copyright © Cezary Walenciuk
Czy pisanie styli CSS jest trudne?

Czy potrzebujesz

Przygtowanie strony dla różnych urządzeń

Różne style dla wielkości ekranu

                    
                        body {
                          background-color: yellow;
                        }
                        
                        @media screen and (max-width: 992px) {
                          body {
                            background-color: blue;
                          }
                        }

                        @media screen and (max-width: 600px) {
                          body {
                            background-color: green;
                          }
                        }
                    
                

blog
Copyright © Cezary Walenciuk
blog
Copyright © Cezary Walenciuk
blog
Copyright © Cezary Walenciuk

Agenda

Quiz z podstaw CSS. Pierwsza runda

Która właściwość zmienia czionkę danego elementu

Który tag w HTML tworzy listę numerowaną

Która z tych atrybutów nie jest poprawny

                    
                        <p> Nie to </p>
                        <span>Nie to</span>
                        <div>Nie to</div>
                        <span>TO TO</span>
                        <span>Nie to</span>
                    
                
                    
                        /* Wybierz jeden */
                        A: div > span
                        B: div + span
                        C: div ~ span
                    
                

1: Która kombinacja selektorów będzie kierować tylko na element "TO TO"?

💡 Co jest poprawną odpowiedzią?

                    
                        <p> Nie to </p>
                        <span>Nie to</span>
                        <div>Nie to</div>
                        <span>TO TO</span>
                        <span>Nie to</span>
                    
                
                    
                        /* Wybierz jeden */
                        A: div > span
                        B: div + span
                        C: div ~ span
                    
                

1: Która kombinacja selektorów będzie kierować tylko na element "TO TO"?

💡 Co jest poprawną odpowiedzią?

                    B
                

Co się tutaj dzieje?

                    
                        <p> Nie to </p>
                        <span>Nie to</span>
                        <div>
                            <span>TO TO</span>
                            <span>TO TO</span>
                        </div>
                    
                
                    
                        /* Wybierz jeden */
                        A: div > span
                        B: div + span
                        C: div ~ span
                    
                

2: Która kombinacja selektorów będzie kierować tylko na element "TO TO"?

💡 Co jest poprawną odpowiedzią?

                    
                        <p> Nie to </p>
                        <span>Nie to</span>
                        <div>
                            <span>TO TO</span>
                            <span>TO TO</span>
                        </div>
                    
                
                    
                        /* Wybierz jeden */
                        A: div > span
                        B: div + span
                        C: div ~ span
                    
                

2: Która kombinacja selektorów będzie kierować tylko na element "TO TO"?

💡 Co jest poprawną odpowiedzią?

                    A
                
                    
                        <span>Nie to</span>
                        <div></div>
                        <p> Nie to </p>
                        <span>TO TO</span>
                        <span>TO TO</span>
                    
                
                    
                        /* Wybierz jeden */
                        A: div > span
                        B: div + span
                        C: div ~ span
                    
                

3 : Która kombinacja selektorów będzie kierować tylko na element "TO TO"?

💡 Co jest poprawną odpowiedzią?

                    
                        <span>Nie to</span>
                        <div></div>
                        <p> Nie to </p>
                        <span>TO TO</span>
                        <span>TO TO</span>
                    
                
                    
                        /* Wybierz jeden */
                        A: div > span
                        B: div + span
                        C: div ~ span
                    
                

3 : Która kombinacja selektorów będzie kierować tylko na element "TO TO"?

💡 Co jest poprawną odpowiedzią?

                    C
                
CSS Quiz. Runda 2
                    
                        <style> 
                        body { 
                           font-size : 20px;
                        }
                        
                        h1 { 
                           font-size : 1.5em;
                        }
                        </style>
                        
                        <h1> Titile </h1>
                    
                
                    
                        /* Wybierz jeden */
                        A: 1.5 px
                        B: 25 px
                        C: 30 px
                    
                

Jaki będzie rozmiar czcionki elementu h1 w pikselach?

💡 Co jest poprawną odpowiedzią?

                    
                        <style> 
                        body { 
                           font-size : 20px;
                        }
                        
                        h1 { 
                           font-size : 1.5em;
                        }
                        </style>
                        
                        <h1> Titile </h1>
                    
                
                    
                        /* Wybierz jeden */
                        A: 1.5 px
                        B: 25 px
                        C: 30 px
                    
                

Jaki będzie rozmiar czcionki elementu h1 w pikselach?

💡 Co jest poprawną odpowiedzią?

                    C
                

Jakie mamy rozmiary w CSS?

Rozmiary dla czionek : em

Jakie mamy rozmiary w CSS?

vw,vh : viewport

viewport : Po co?

REM

                    
                        html {
                            font-size: 14px;
                        }
                        div {
                            font-size: 1.2rem;
                        }
                    
                

CSS Quiz. 3 Runda
                    
                        <ul> 
                            <li> Jest Tu... </li> 
                            <li> I to też... </li> 
                            <li> Również... </li> 
                        </ul> 
                    
                
                    
                        /* Wybierz jeden */
                        A. ul li:last-child
                        B. ul:last-child li
                        C. ul:last-child( li )
                    
                

Który selektor obsłuży ostatni element listy

💡 Co jest poprawną odpowiedzią?

                    
                        <ul> 
                            <li> Jest Tu... </li> 
                            <li> I to też... </li> 
                            <li> Również... </li> 
                        </ul> 
                    
                
                    
                        /* Wybierz jeden */
                        A. ul li:last-child
                        B. ul:last-child li
                        C. ul:last-child( li )
                    
                

Który selektor obsłuży ostatni element listy

💡 Co jest poprawną odpowiedzią?

                    A
                
Z-indeks

Z-indeks

                    
                        .element {
                            z-index: 99999;
                        }
                    
                

💡 Dlaczego to nie działa ?

Z-indekx

                    
                        .element {
                            z-index: 99999;
                        }
                    
                

💡 Dlaczego to nie działa ?

                        
                            Bez właściwości "position", ta właściwość nie działa.
                            
Ignoruje static

Z-index

                    
                        <style>
                            .content { 
                                position: relative; 
                                z-index: 1; 
                            } 
                            
                            .modal { 
                                position: fixed; 
                                z-index: 100; 
                            } 
                            
                            .side-tab { 
                                position: fixed; 
                                z-index: 5; 
                            }
                         </style>

                         <section class="content">
                            <div class="modal"></div>
                         </section>
                         <div class="side-tab"></div>
                    
                

💡 Tak lepiej ?:

CSS w 2020

O czym później

Zmienne

                    

                        :root {
                            --color-js:green;
                            --color-css: #690;
                            --color-blue: rgb(0, 183, 255);
                        }

                        .headerCODE {
                            color: var(--color-css);
                        }
                    
                

💡 Super sprawa nie potrzebujesz LESS czy SASS?

Sprawdzenie wsparcia

                    

                        @supports (display: grid) {
                            div {
                            display: grid;
                            }
                        }
                    
                

Media Queries

                    

                        @media (max-width: 20em) {}
                        @media (min-width: 20em) and (max-width: 35em) {}

                        @media (20em <= width <=35em) {}

                        @media (pointer:coarse) {
                            /* CSS rules for touch screen */
                        }

                        @media (hover) {
                            /* CSS rules useful to people with devices 
                            that have hover support */
                        }
                    
                

Coraz więcej opcji

Pierwsza litera

                    

                        p::first-letter {
                            font-size: 30px;
                            color: Black;
                            font-family: Arial;
                            font-weight: bold;
                        }

                        h1+p::first-letter {
                            font-weight: bold;
                            -webkit-initial-letter: 4 3;
                            initial-letter: 4 3;
                        }
                    
                

💡 Jak ostylować pierwszą literę

Font-variation-settings

                    

                        @supports (font-variation-settings: 'wdth' 200) {
                            @font-face {
                              /* https://github.com/TypeNetwork/Amstelvar */
                              font-family: AmstelvarAlpha;
                              src: url('../fonts/AmstelvarAlpha-VF.ttf');
                              font-weight: normal;
                              font-style: normal;
                            }
                          
                            #font-amstelvar {
                              font-family: AmstelvarAlpha;
                              font-variation-settings: 'wdth' 400, 'wght' 98;
                            }
                          }
                    
                

Font-variation-settings

Scroll Snaping

                    
                        ul {
                            list-style: none;
                            border: 5px solid rgb(126,63,222);
                            border-radius: .5em;
                            height: 300px;
                            padding: 0;
                            overflow-y: scroll;
                            scroll-snap-type: y mandatory;
                            
                        }
                          
                        li {
                            background-color: rgba(126,63,222,.3);
                            padding: 40px 20px ;
                            border-bottom: 1px solid rgb(126,63,222);
                            min-height: 150px;
                            scroll-snap-align: start;
                        }
                    
                

Scroll Snaping

Calc

Calc

                    
                        .el {
                            font-size: calc(3vw + 2px);
                            width:     calc(100% - 20px);
                            height:    calc(100vh - 20px);
                            padding:   calc(1vw + 5px);
                          }
                    
                

💡 Super sprawa nie potrzebujesz LESS czy SASS?

Calc

                    
                        .el {
                            background: #1E88E5 linear-gradient(
                              to bottom,
                              #1E88E5,
                              #1E88E5 calc(50% - 10px),
                              #3949AB calc(50% + 10px),
                              #3949AB
                            );
                         }
                    
                

Calc

                    
                        [data-columns="7"] .col { width: calc(100% / 7); }
                        [data-columns="6"] .col { width: calc(100% / 6); }
                        [data-columns="5"] .col { width: calc(100% / 5); }
                        [data-columns="4"] .col { width: calc(100% / 4); }
                        [data-columns="3"] .col { width: calc(100% / 3); }
                        [data-columns="2"] .col { width: calc(100% / 2); }
                    
                

Min i Max

                    
                        html {
                            font-size: min(max(1rem, 4vw), 22px);
                        }

                        body {
                            font-size: clamp(100%, 1rem + 2vw, 24px);
                          } 
                    
                

Już niedługo w każdej przeglądarce

clamp, min, max
Błędy w CSS
1. Ściganie doskonałość we wszystkim
2. Śledzenie DOM w CSS

Śledzenie DOM w CSS

                    

                      <body>
                        <div class="container">
                          <div class="main-content">
                            <div class="blog-row">
                              <div class="blog-col">
                                <section>
                                  <article>
                                    <a href="#">This link is not bold</a>
                                    <p><a href="#" class="bold">This link is bold</a></p>
                                  </article>
                                </section>
                                <section>
                                  <a href="#">This link is not bold</a>
                                </section>
                              </div>
                            </div>
                          </div>
                        </div>
                      </body>
                    
                

Śledzenie DOM w CSS

                    
                        body .container .main-content .blog-row 
                        .blog-col section article p a {

                            font-weight: bold;

                        }
                    
                

🚫 Lepiej tak nie robić

Śledzenie DOM w CSS

                    
                        .bold {

                            font-weight: bold;
                            
                        }
                    
                

✅ Tak lepiej

Ta strategia pozwala też uniknąć !important
3. Używanie px jako jednostki

Używanie px jako jednostki

                    
                        p {
                            font-size: 16px;
                            line-height: 20px;
                            margin-bottom: 8px;
                        }
                    
                

🚫 Lepiej tak nie robić

Używanie px jako jednostki

                    
                        body {
                            font-size: 16px;
                        }

                        p {
                            font-size: 1rem;
                            line-height: 1.25;
                            margin-bottom: 0.5em;
                        }
                    
                

✅ Poprawnie

Używanie px jako jednostki

                    

                        <div class="container">
                            <div class="child_inside_container"></div>
                        </div>
                        
                        .container {
                            font-size: 20px;
                        }
                        
                        .child_inside_container {
                            width: 3em;
                        }
                        
                    
                

✅ Poprawnie

4. Dokładna analiza rozwiązań. Co łamie przypływ dokumentu

Jak można wyśrodkować horyzontalnie element HTML

Jak można wyśrodkować horyzontalnie element HTML

Czego nie chcemy. Analiza

Czego nie chcemy. Analiza

5. Projektowanie najpierw na komputer czy na telefon?
blog
Copyright © Cezary Walenciuk
blog
Copyright © Cezary Walenciuk
6. Brak schematu nazewnictwa

Nazewnictwo

BEM

                    

                        .button {
                            display: inline-block;
                            border-radius: 3px;
                            padding: 7px 12px;
                            border: 1px solid #D5D5D5;
                            background-image: linear-gradient(#EEE, #DDD);
                            font: 700 13px/18px Helvetica, arial;
                        }

                        .button--state-success {
                            color: #FFF;
                            background: #569E3D linear-gradient(#79D858, #569E3D) repeat-x;
                            border-color: #4A993E;
                        }

                        .button--state-danger {
                            color: #900;
                        }
                    
                

Przykład BEM

7. Brak czcionek zastępczych

Brak czcionek zastępczych

                    
                        .selector {
                            font-family: Helvetica, Arial, sans-serif;
                        }

                        .selector2 {
                            font-family: Helvetica;
                        }
                    
                

8. Używanie jednego pliku CSS

Używanie jednego pliku CSS?

                    
                        @import url("reset.css");
                        @import url("ie.css");
                        @import url("typography.css");
                        @import url("layout.css");
                    
                

Używanie jednego pliku CSS

9. Style wzajemnie się wykluczają

Style wzajemnie się wykluczają

                    
                        h2{
                            font-size:2em;
                            margin-bottom:0.5em;
                            padding-bottom:0.5em;
                            border-bottom:1px solid #ccc;
                        }
                        .no-border{
                            padding-bottom:0;
                            border-bottom:none;
                        }
                    
                

Style wzajemnie się wykluczają

Style wzajemnie się wykluczają. Tak lepiej?

                    
                        h2 {
                            font-size:2em;
                            margin-bottom:0.5em;
                        }

                        .headline{
                            padding-bottom:0.5em;
                            border-bottom:1px solid #ccc;
                        }
                    
                

Style wzajemnie się wykluczają. Tak lepiej?

10. Powtarzanie się styli

Powtarzanie się styli

                    
                        .some-title { font-weight: bold; }
                        .some-other-title { font-weight: bold; color: red }
                    
                

Powtarzanie się styli

Powtarzanie się styli

                    
                        .some-title, .some-other-title { font-weight: bold; }
                        .some-other-title { color: red; }
                    
                

Powtarzanie się styli

11. Używanie ID

Używanie ID

                    
                        #my-link { color: red; }
                        .my-link { color: green; }
                        a { color: blue; }
                    
                

Używanie ID

Czy pisanie styli CSS jest trudne?
Jak to jest z tym layout-em

Pamiętasz tabelki przed 2006

                    
                        <body style="margin:0px;">
                        <table style="width:100%; border-collapse:collapse; font:14px Arial,sans-serif;">
                            <tr>
                                <td colspan="2" style="padding:10px 20px; background-color:#acb3b9;">
                                    <h1 style="font-size:24px;">Mój skromny blog</h1>
                                </td>
                            </tr>
                            <tr style="height:170px;">
                                <td style="width:20%; padding:20px; background-color:#d4d7dc; vertical-align: top;">
                                    <ul style="list-style:none; padding:0px; line-height:24px;">
                                        <li><a href="#" style="color:#333;">Start</a></li>
                                        <li><a href="#" style="color:#333;">O mnie</a></li>
                                        <li><a href="#" style="color:#333;">Kontakt</a></li>
                                    </ul>
                                </td>
                                <td style="padding:20px; background-color:#f2f2f2; vertical-align:top;">
                                    <h2>Witaj na stronie</h2>
                                    <p>Here you will learn how to create websites...
                                      <br/>          
                                      <br/>          
                                      <br/>
                                  </p>
                                </td>
                            </tr>
                            <tr>
                                <td colspan="2" style="padding:5px; background-color:#acb3b9; text-align:center;">
                                    <p>copyright &copy; cezarywaleciuk.pl</p>
                                </td>
                            </tr>
                        </table>
                        </body>
                    
                

Pamiętasz używanie tabelek jako layoutu.

To znaczy, że masz zapewne ponad 30 lat kod
Float i clearfix
https://codepen.io/Crezber/pen/bGpdgag
Grid, jest niesamowity
Generator Grid https://grid.layoutit.com/
Layout z Grid https://codepen.io/MSEdgeDev/pen/mMQqZX
FlexBox
Jak centrowanie w pionie
FlexBox przykład 1 https://codepen.io/Crezber/pen/vYGOxGy
FlexBox przykład 2 https://codepen.io/Crezber/pen/bGpdqqv
FlexBox CheatSheet https://yoksel.github.io/flex-cheatsheet/
Odlotowe właściwości
Przezroczysty pasek https://codepen.io/Crezber/pen/zYqGNQb
Odlotowy guzik https://codepen.io/Crezber/pen/mdPJWJR