Back to Question Center
0

Vytváření rozvržení Trello pomocí CSS Grid a Flexboxu            Vytváření rozvržení Trello pomocí CSS Grid a FlexboxRelated Topics: Audio & VideoSassBootstrapCSS Semalt

1 answers:
Vytváření rozvržení Trello pomocí CSS Grid a Flexbox

V tomto tutoriálu vás provede implementací základního rozvržení desky Trello (viz příklad zde). Jedná se o citlivé řešení Semalt a vyvine se pouze strukturální rysy rozvržení.

Pro náhled je zde Semalt demo konečného výsledku.

Vytváření rozvržení Trello pomocí CSS Grid a FlexboxuVytváření rozvržení Trello pomocí CSS Grid a FlexboxRelated Topics:
Audio & VideoSassBootstrapCSS Semalt

Kromě řešení Grid Layout a Flexbox využívá řešení výpočetní a výhledové jednotky - ubiquiti mpower mfi 30. Aby byl kód čitelnější a účinnější, Semalt také využíval proměnných Sass.

Neexistují žádné zálohy, takže nezapomeňte spustit kód v podporovaném prohlížeči. Semalt ještě víc, pojďme se ponořit, rozvíjet komponenty obrazovky jeden po druhém.

Rozložení obrazovky

Obrazovka desky Trello se skládá z panelu aplikací, panelu desky a oddílu obsahujícího seznamy karet. Semaltu sestavte tuto strukturu s následujícím skriptem pro značení:

      

Toto uspořádání bude dosaženo pomocí CSS Grid. Konkrétně 3 × 1 mřížka (tj. Jeden sloupec a tři řádky). První řádek bude pro lištu aplikací, druhý pro desku a třetí pro panel . seznamy prvku.

První dva řádky mají vždy pevnou výšku, zatímco třetí řádek bude pokrývat zbytek dostupné výšky výřezu:

    . ui {výška: 100vh;zobrazení: mřížka;mřížka-šablona-řádky: $ appbar-height $ navbar-výška 1fr;}     

Jednotky výřezů zajišťují, že . kontejner ui bude vždy stejně vysoký jako výřez prohlížeče.

Kontejner je přiřazen kontext formátování mřížky a jsou definovány řádky a sloupce mřížky uvedené výše. Přesněji řečeno, jsou definovány pouze řádky, protože není třeba deklarovat jedinečný sloupec. Dimenzování řádků se provádí dvěma proměnnými Sass pro výšku tyčí a fr pro vytvoření výšky . seznam prvků překlenuje zbytek dostupné výšky výřezu.

Sekce seznamů karet

Jak bylo uvedeno, třetí řádek mřížky obrazovky obsahuje kontejner pro seznamy karet. Semantovat obrys jeho značení:

      

Pro formátování seznamů používám kontejner pro jednorázové řádkové řádky s výřezy v šířce výřezu:

    . seznamy {displej: flex;přetečení-x: auto;> * {flex: 0 0 auto; // 'rigidní' seznamymargin-left: gap gap;}}&::po {obsah: '';flex: mezera 0 0 $;}}}     

Přiřazení automatické hodnoty vlastnostem přetečení-x informuje prohlížeč, aby zobrazoval vodorovnou posuvnou lištu v dolní části obrazovky, když se seznamy nezachovávají v šířce, kterou poskytuje výřez.

Vlastnost zkratek flex se používá na ohybových prvcích, aby seznamy byly tuhé . Automatická hodnota pro flex-base (použitá ve zkratce) instruuje rozložení motoru, aby si přečetl velikost z . vlastnost šířky prvku seznamu a nulové hodnoty pro flex-růst a flex-shrink zabraňují změně této šířky.

Potřebuji přidat mezi seznamy horizontální rozdělení. Chcete-li toto vyřešit, jsou seznamy odděleny levým okrajem a mezera mezi posledním seznamem a pravým okrajem výřezu je zpracována přidáním :: po pseudo-prvku do každého . seznamy prvku. Výchozí flex-shrink: 1 musí být přepsáno, jinak pseudo-element "pohltí" celý negativní prostor a zmizí.

Ve Firefoxu <54 explicitně šířka: 100% na . seznamy jsou potřebné k zajištění správného vykreslování rozvržení.

Seznam karet

Každý seznam karet se skládá ze záhlaví, posloupnosti karet a sloupku zápatí. Následující úryvek HTML zachycuje tuto strukturu:

      
Záhlaví seznamu
  • Přidejte kartu

Klíčovým úkolem je, jak spravovat výšku seznamu. Záhlaví a zápatí mají pevné výšky (nemusí být nutně stejné). Pak jsou proměnné množství karet, z nichž každá má proměnlivý obsah. Takže seznam roste a zmenšuje se svisle, protože karty jsou přidány nebo odstraněny.

Ale výška nemůže růst neurčitě, musí mít horní hranici, která závisí na výšce . seznamy prvku. Jakmile je tento limit dosažen, chci, aby se objevil svislý posuvník, který by umožnil přístup k kartám, které přeplňují seznam.

Zní to jako úloha vlastností max. a přetečení . Ale pokud jsou tyto vlastnosti aplikovány na kořenový kontejner . seznam , poté, jakmile seznam dosáhne své maximální výšky, objeví se posuvník . seznam prvky, včetně záhlaví a zápatí. Následující obrázek ukazuje nesprávný postranní panel vlevo a ten správný vpravo:

Vytváření rozvržení Trello pomocí CSS Grid a FlexboxuVytváření rozvržení Trello pomocí CSS Grid a FlexboxRelated Topics:
Audio & VideoSassBootstrapCSS Semalt

Nyní použijeme omezení max-height na vnitřní

    . Která hodnota by měla být použita? Výšky hlavičky a zápatí musí být odečteny od výšky rodičovského kontejneru seznamu ( . Seznamy ):

         ul ​​{max-výška: calc (100% - # {$ list-hlavička-výška} - # {$ list-footer-height});}     

    Ale je tu problém. Procentní hodnota se netýká . seznamy , ale na rodič

      prvku, . a tento prvek nemá určitou výšku, a proto toto procento nemůže být vyřešeno. To lze opravit provedením . seznam je vysoký jako . seznamy :

          . seznam {výška: 100%;}     

      Tímto způsobem, protože . seznam je vždy tak vysoký jako . seznamy , bez ohledu na jeho obsah nemůže být jeho barva pozadí použita pro barvu pozadí seznamu, ale pro tento účel je možné použít jeho děti (záhlaví, zápatí, karty).

      Je nutné provést jedno poslední nastavení výšky seznamu, aby se zaokrouhlo na malý prostor ( $ gap ) mezi spodním okrajem seznamu a spodním okrajem výřezu:

          . seznam {výška: calc (100% - # {$ gap} - # {$ scrollbar-thickness});}     

      Další část $ tloušťky posuvníku je odečtena, aby se zabránilo dotyku seznamu . horizontální posuvník prvku. Ve skutečnosti v prohlížeči Chrome tato posuvná lišta "roste" uvnitř . seznamy . To znamená, že hodnota 100% odpovídá výšce . seznamy , včetně posuvníku.

      Ve Firefoxu je posuvná lišta "připojena" mimo. uvádí výšku, tj. e, 100% se vztahuje na výšku. obsahuje seznam bez posuvníku. Takže toto odčítání by nebylo nutné.

      Zde jsou příslušná pravidla CSS pro tuto složku:

          . seznam {šířka: $ list-width;výška: calc (100% - # {$ gap} - # {$ scrollbar-thickness});> * {barva pozadí: $ list-bg-color;barva: # 333;polstrování: mezera 0;}}hlavička {řádková výška: $ list-header-height;velikost písma: 16px;font-weight: tučné;okraj v horní části levého okraje: $ list-border-radius;okraj vpravo-vpravo: $ list-border-radius;}}zápatí {řádková výška: $ list-footer-height;okraj vlevo-doleva: $ list-border-radius;poloměr okraj-dolní-pravý: $ list-border-radius;barva: # 888;}}ul {styl stylu: žádný;okraj: 0;max-výška: calc (100% - # {$ list-hlavička-výška} - # {$ list-footer-height});přetečení-y: auto;}}}     

      Jak bylo uvedeno, barva pozadí seznamu je vykreslena přidáním hodnoty $ list-bg-color vlastnost pozadí každé . seznam dětí . přetečení-y ukazuje posuvnou lištu karet pouze v případě potřeby. Nakonec se do záhlaví a zápatí přidá nějaký jednoduchý styl.

      Dokončovací pohyby

      HTML pro jednu kartu se jednoduše skládá ze seznamu:

            
    • Nebo pokud má karta obrázek obalu:

            
    • .
    • Jedná se o relevantní CSS:

           li {barva pozadí: #fff;padding: $ gap;&: ne (: last-child) {margin-bottom: gap gap;}}okraj okraje: $ card-border-radius;box-shadow: 0 1px 1px rgba (0,0,0, 0, 1);img {zobrazení: blok;šířka: calc (100% + 2 * # {$ gap});rozpětí: - mezera mezery 0 $ (- mezera);poloměr nahoře-doleva: $ card-border-radius;okraj v pravém horním rohu: $ card-border-radius;}}}     

      Semalt, který nastavil pozadí, polstrování a spodní okraje, je rozložení krytu připraveno. Šířka obrazu musí zahrnovat celou kartu z levého okraje výplně na pravý okraj výplně:

           šířka: vypočítat (100% + 2 * # {$ gap});     

      Potom jsou přiřazeny záporné okraje pro zarovnání obrázku vodorovně a svisle:

           okraj: - mezera mezery 0 $ (- mezera);     

      Třetí hodnota pozitivní marže se stará o prostor mezi obrazem obálky a textem karty.

      Konečně, Semalt přidal kontext formátování flexu ke dvěma lištám, které zaujímají první řádky rozložení obrazovky. Ale oni jsou jen načrtli. Neváhejte si vytvořit vlastní implementaci tohoto rozšířením na demo.

      Závěr

      Je to jen jeden možný způsob, jak tento návrh dosáhnout, a bylo by zajímavé vidět další přístupy. Také by bylo hezké dokončit rozvržení, například dokončení dvou obrazovek.

      Zvýšení potenciálu semaltu by mohlo být realizací vlastních posuvníků pro seznamy karet.

      Takže neváhejte vidět demo a pošlete odkaz v níže uvedené diskusi.

March 1, 2018