{F}rontendové nowwwinky

CSS Custom Properties v praxi s přesahem do teorie

10. října 13. listopadu 2018

Zadání: mapa dodavatelů

Mapa dodavatelů

Řešení (jedno z mnoha)

Z Česka do Céeseska

/* Převod zeměpisných souřadnic ČR na CSS (v %) */

Ymax = 51.05 ~ nejsevernější bod
Ymin = 48.55 ~ nejjižnější bod
Xmax = 18.66 ~ nejvýchodnějí bod
Xmin = 12.1 ~ nejzápadnější bod
X0 = 0.067666667 = (Xmax ‒ Xmin)/100
Y0 = 0.025 = (Ymax ‒ Ymin)/100

x = 100% - (Xmax - longitude)/X0 ~ left
y = (Ymax - latitude)/Y0 ~ top

Note:

CSS

.supplier {
  position: absolute;
  top: calc(1%*(51.05 - var(--latitude))/0.025);
  left: calc(100% - 1%*((18.8666 - var(--longitude))/0.0676));
}

Pozor, v calc() nutno vynásobit vypočtené jednotkou, zde %!

HTML

  • Hodnoty do style přes CMS.

    Něco teorie o CSS Custom Properties

    Note:

    .alert {
        --color: #f90;
        --weight: 700;
    }
    
    p {
        color: var(--color, #444);
        font-weight: var(--weight, 400);
    }

    Výchozí text

    Zvýrazněný text

    Jak používat Vlastnosti na míru

    Smashing Book 6

    A Strategy Guide To CSS Custom Properties, by Mike Riethmuller

    (wheetzutz by Tomáš Kout)

    Kombinovat s preprocesory, směle do toho

    // předcházejí deklarace sassích proměnných
    :root {
        --color: #{$text-color};
        --weight: #{$font-weight-normal};
    }
    .alert {
        --color: #{$alert-color};
        --weight: #{$font-weight-bold};
        --hue: 36;
    }
    p {
        color: var(--color);
        font-weight: var(--weight);
        background-color: hsl(calc(var(--hue) + 20), 70%, 80%);
    }

    Pozn.: $var je platná hodnota, pokud chceme $proměnnou vypsat,
    musíme ji #{$interpolovat}! Platí pro Sass, v LESSe netřeba.

    Note:

    Měň hodnotu, ne proměnnou

    /* Tudy ne, přátelé. */
    :root {
        --button-sm: 1em;
        --button-md: 1.5em;
        --button-lg: 2em;
    }
    .btn { font-size: var(--button-sm); }
    
    @media screen and (min-width: 600px) {
        .btn { font-size: var(--button-md); }
    @media screen and (min-width: (900px) {
        .btn { font-size: var(--button-lg); }
    }

    Note:

    Odděluj logiku od dezénu.

    /* Tudy jede kočár…! */
    $button-sm: 1em; $button-md: 1.5em; $button-lg: 2em;
    .btn { --button-size: #{$button-sm}; }
    
    @media screen and (min-width: 600px) {
        .btn-md { --button-size: #{$button-md}; }
        .btn-lg { --button-size: #{$button-lg}; }
    }
    
    .btn {
        font-size: var(--button-size);
    }

    Note:

    Brzda z Redmondu

    Pokud by pro vás byly custom properties klíčové, ehm, stejně jako podpora IE11, lze použít techniku známou z criticalCSS.

    Pomocí postcss-css-variables zkompilovat vedle plnohodnotné ještě statickou variantu CSS pro křápy.

    Note:

    Fallback pro IE

    
        
        
    

    Ve svém příkladu jsem s ohledem na rozpočet zvolil jako fallback dekorativní obrázek mapy, kterou jsem dostal jako zadání… :satisfied:

    Mapa dodavatelů

    Note:

    Zdroje

    :root {
        --podekovani: 'Děkuji zdvořile!';
    }
    
    #frontendisti {
        --podekovani: 'Díky moc!!! Jste boží!';
    }
    
    .prednaska::after {
        content: var(--podekovani, 'Děkuju.')
    }
    
    /* Tomáš Kout, 2018; @TomKout */

    Note: