live demo: https://pslib-studium.github.io/CSSFlexPSLIBList/
Cílem tohoto cvičení je procvičit práci s CSS Flexbox pro vytvoření responzivního seznamu článků. Naučíte se, jak pomocí flexboxu:
- Uspořádat elementy horizontálně
- Ovládat pořadí elementů pomocí
order - Pracovat s růstem a smrštěním flexbox položek
- Kombinovat flexbox s dalšími CSS vlastnostmi
- Modifikujte pouze soubor
styles/style.css - Změny v HTML nejsou povoleny
- Soubor
styles/noedit.cssneupravujte - Přesto že se jedná o cvičení na flexbox, není účelem dávat
display: flexi tam, kam přirozeně patřídisplay: blocknebotext-align
Obrázky v článcích musí být responzivní a správně se přizpůsobit kontejneru.
Úkol: Vytvořte CSS třídu .img-responsive s následujícími vlastnostmi:
- Obrázek musí být responzivní - šířka a výška se přizpůsobí kontejneru
- Použijte vlastnost
object-fitpro zachování poměru stran obrázku - Obrázek se zobrazí jako inline-block element
Poznámka: Kontejner odkazu .news-item__image-link má aspect-ratio 4/3 a výšku 90px, což je již nastaveno v noedit.css.
Vytvořte responzivní kontejner s těmito vlastnostmi:
- Maximální šířka: 1200px
- Minimální šířka: 600px
- Kontejner musí být horizontálně vycentrovaný
Každá zpravodajská položka se skládá ze tří částí:
- Datum (
.news-item__date) - Barevná tečka (vizuální separátor)
- Článek (
.news-item__article)
Úkol: Uspořádejte tyto tři části horizontálně vedle sebe pomocí flexboxu.
Datum se zobrazuje ve čtverci o hraně 116px a obsahuje měsíc a den (rozměry jsou již nastaveny v noedit.css).
Požadavky:
- Text musí být vystředěn (horizontálně)
- Box používá flexbox s vertikálním směrem (
flex-direction: column) - Mezi měsícem a dnem je růžová linka (bottom border, 2px, barva
--color-bg-pink) - Pod dnem je akcentová linka (bottom border, 6px, barva
--category-accent) - Den roste do volného prostoru (
flex-grow) - Box nesmí být deformován při změně šířky stránky (
flex-shrink) - Datum se zobrazuje jako první v pořadí
Mezi datumem a článkem je vizuální separator.
Specifikace:
- Tečka průměr 8px (barva
--category-accent) - Růžový okraj (border) 3px (barva
--color-bg-pink) - Kulatý tvar (border-radius 50%)
- Tečka je vertikálně vycentrovaná vzhledem k celé výšce položky
- Zobrazuje se jako druhá v pořadí
- Překrývá se středem s okrajem datumu a článku (negativní margin -3px)
- Musí být nad ostatními elementy (
z-index: 1)
Nápověda: Použijte pseudoelement ::before na .news-item
Box obsahuje obrázek (volitelný), nadpis, text a patičku.
Požadavky:
- Všechny boxy s perexem článku jsou stejně široké (rostou do volného prostoru)
- Box je zobrazený jako třetí v pořadí
- Obsah boxu (obrázek a text) je uspořádán horizontálně pomocí flexboxu
- Obrázek nesmí být deformován (
flex-shrink) - Mezera mezi obrázkem a textem: 1rem
- Pravé vnitřní odsazení perexu (padding-right): 2.5rem - aby se červená šipka nepřekrývala s textem
Bílá šipka v gradientním kroužku slouží jako odkaz na celý článek.
Požadavky:
- Text "více" je neviditelný (použijte
font-size: 0) - Bílá šipka "->" je viditelná díky
::afterpseudoelementu (stylováno vnoedit.css) - Po najetí myší se barva rámečku změní na vínovou (
border-color: --color-accent1)
Všechny odkazy musí vizuálně reagovat na přejetí myší:
-
Odkaz v nadpisu (
.news-item__title-link):- Při hover: barva textu se změní na
--color-hover-title
- Při hover: barva textu se změní na
-
Odkaz v kategorii (
.news-item__category-link):- Při hover: přidá se podtržení (
text-decoration: underline)
- Při hover: přidá se podtržení (
-
Odkaz "více" (
.news-item__more-link):- Při hover: barva rámečku kolem šipky se změní na
--color-accent1
- Při hover: barva rámečku kolem šipky se změní na
Různé kategorie článků mají různé barevné schéma. Barvy se mění pomocí CSS proměnných.
Požadavky: Vytvořte modifikátory pro tři kategorie:
.news-item--school- barva--color-accent2.news-item--engineering- barva--color-accent3.news-item--success- barva--color-accent4
Každý modifikátor přepisuje proměnné --category-text a --category-accent na odpovídající barvu
Pro snadnější práci s barvami jsou v noedit.css definovány CSS proměnné:
--color-white /* bílá */
--color-hover-title /* barva nadpisu při hover */
--color-shadow /* barva stínu (RGB hodnoty) */
--color-text /* hlavní barva textu */
--color-text1 /* růžová pro nadpis h1 */
--color-text2 /* fialová pro nadpisy článků */
--color-text3 /* tmavě fialová pro datum */
--color-text4 /* šedá pro patičku */
--color-bg-pink /* růžové pozadí */
--color-accent1 /* vínová (hover rámeček) */
--color-accent2 /* tmavě růžová (výchozí kategorie) */
--color-accent3 /* modrá (strojírenství) */
--color-accent4 /* zelená (úspěchy) */
--color-gradient /* gradient pro šipku */
/* Proměnné pro kategorie (přepisovatelné modifikátory) */
--category-text /* barva textu kategorie */
--category-bg /* pozadí kategorie */
--category-accent /* akcentová barva kategorie */Projekt využívá BEM (Block Element Modifier) metodiku pro pojmenování CSS tříd:
Hlavní sémantický blok reprezentující jednu zpravodajskou položku.
news-item__date- box s datemnews-item__date-part- měsíc nebo dennews-item__article- box s obsahem článkunews-item__image-link- odkaz s obrázkemnews-item__title- nadpis článkunews-item__title-link- odkaz v nadpisunews-item__content- textový obsahnews-item__excerpt- perex článkunews-item__more-link- odkaz "více"news-item__footer- patička s metadatynews-item__category- kategorie článkunews-item__category-link- odkaz na kategoriinews-item__author- jméno autora
news-item__date-part--month- modifikátor pro měsícnews-item__date-part--day- modifikátor pro dennews-item--school- modifikátor pro kategorii "O škole"news-item--engineering- modifikátor pro kategorii "Strojírenství"news-item--success- modifikátor pro kategorii "Úspěchy"
display: flex- zapne flexbox režimflex-direction- směr hlavní osy (row, column)order- určuje pořadí zobrazení flex položekflex-shrink- určuje, zda se položka může zmenšitflex-grow- určuje, zda položka může růst do volného prostorualign-self- vertikální zarovnání konkrétní položkygap- mezera mezi flex položkami
text-align- horizontální zarovnání textuborder-bottom- spodní ohraničeníborder-color- barva ohraničenímargin- vnější okraje (může být i záporný!)padding- vnitřní odsazeníz-index- vrstvení elementů
var(--nazev-promenne)- použití CSS proměnné- Přepsání proměnné v selektoru:
--category-accent: var(--color-accent3);
widthaheight- šířka a výška (v %, px, rem, atd.)object-fit- způsob přizpůsobení obrázku do kontejneru (cover, contain, fill)display- typ zobrazení elementu (block, inline, inline-block)
::before- vložení obsahu před element::after- vložení obsahu za element
:hover- stav při najetí myši