CSS’də Flexbox modeli

Orkhan Shukurlu
Frontend Azerbaijan
7 min readJan 13, 2019

--

Flexbox , geniş proyektlərdə , eləcə də qarışıq strukturlu Web səhifələrdə Front-End Developerin işini asanlaşdıracaq CSS özəlliyidir . Mənası elastik qutu deməkdir . Flex modelinin əsas funksiyası , elementləri horizontal və vertical olaraq nizamlamaqdan ibarətdir . Bu özəllik , 2009 ilinə qədər 2 dəfə yenilənmişdir . Ən son versiyası 2012-ci ildə güncəllənib .

Flexbox modelinin üstünlükləri

  • Flexbox elastik qutu olduğundan , flexboxla səhifəni responsiv etmək daha sadədir
  • Flexboxla elementləri ( bu bloklar , və ya content ola bilər ) sağa və sola nizamlaya bildiyimiz üçün float parametrinə ehtiyac yoxdu . Bu da saytın strukturunun pozulmasını əngəlləyir
  • Elementlərin ölçülərini daha asan yolla nizamlamaq olur
  • Bu CSS özəlliyi ilə elementləri şaquli ( vertical ) olaraq nizamlamaq çox sadədir

Flexbox modelinin üstün olmayan cəhətləri

  • Brauzer dəstəyi hələ də istənilən səviyyədə deyil
  • Bəzən bu modeli öyrənmək çətin kimi görünə bilər

Flexbox nədir və necə işlədilir ???

Flex əsas elementə ( bu içində çox sayda element olan blokdur ) , və onun daxilindəki alt elementlərə təsir edir . Bildiyimiz kimi HTML elementləri ya block , ya da inline element olur . Bu elementlərə bu özəlliyi verən display parametridir . Flexboxu istifadə etmək üçün

display : flex ;

Display parametrinə flex təyinatını ötürmək lazımdır . Flex-i istifadə etmək üçün Element və ona aid alt elementlərin olması əsas şərtdir . Element dedikdə blok ( qutu ) nəzərdə tutulur . Bunu şəkil üzərində daha yaxşı başa düşmək olar .

Burada sarı rənglə rənglənmiş hissə əsas element , digər rənglərlə rənglənmiş hissə isə əsas elementin alt elementləridir .

Digər brauzerlər üçün yazılış aşağıdakı kimidir .

display: -webkit-box;

display: -webkit-flex;

display: -ms-flexbox;

display: flex;

İndi isə digər parametrlərə baxaq :

1. flex-direction

Bu özəllik blok içində olan elementlərin vertical və horizontal olaraq necə düzüləcəyini təyin edir . 4 təyinat götürür .

  • flex-direction: row;
  • flex-direction: column;
  • flex-direction: row-reverse;
  • flex-direction: column-reverse;
  • Row təyinatı standart təyinatdır . Blokları soldan sağa doğru ( sətir üzrə ) düzür
  • Column təyinati blokları yuxarıdan aşağı ( sütün üzrə ) düzür
  • Row-reverse təyinatı row təyinatının tam əksidir
  • Column-reverse təyinatı isə column təyinatının tam əksidir

Digər brauzerlər üçün yazılış aşağıdakı kimidir .

-webkit-box-orient: horizontal;

-webkit-box-direction: normal;

-webkit-flex-direction: row;

-ms-flex-direction: row;

flex-direction: row;

2. flex-wrap

Bu özəllik blok içindəki elementlərin blokun enliliyini aşdıqda eyni sətirdəmi və ya bir aşağı sətirdəmi yerləşəcəyini təyin edir . 3 təyinat götürür .

  • flex-wrap: nowrap;
  • flex-wrap: wrap;
  • flex-wrap: wrap-reverse;
  • Nowrap təyinatı standart təyinatdır . Elementlər blokun genişliyini aşsa da , eyni sətirdə düzülür
  • Wrap təyinatında elementlər blokun genişliyini aşan kimi bir alt sətrə keçir
  • Wrap-reverse təyinatı eynən wrap kimidir , amma fərq ondadır ki , elementlər ən alt sətirdən başlayaraq düzülür

Digər brauzerlər üçün yazılış aşağıdakı kimidir .

-webkit-flex-wrap: nowrap;

-ms-flex-wrap: nowrap;

flex-wrap: nowrap;

3. flex-flow

Bu özəllik flex-direction və flex-wrap özəlliklərini bir yerdə yazmaq üçündür . 2 təyinat ötürülür . Birinci təyinat flex-direction-ın aldığı təyinat , ikinci təyinat isə flex-wrap-ın aldığı təyinatdır . Məsələn :

flex-flow: row wrap;

4. justify-content

Bu özəllik blok içindəki elementlərin horizontal olaraq nece düzüləcəyini təyin edir .

  • justify-content: flex-start;
  • justify-content: flex-end;
  • justify-content: center;
  • justify-content: space-around;
  • justify-content: space-between;
  • Flex-start təyinatında blok içindəki elementlər soldan sağa doğru düzülür
  • Flex-end təyinatında blok içindəki elementlər sağdan sola doğru düzülür
  • Center təyinatında blok içindəki elementlər ortalanır
  • Space-around təyinatında blok içindəki elementlər soldan və sağdan bərabər ölçüdə məsafə saxlayaraq düzülür
  • Space-between təyinatında blok içindəki elementlər sola və sağa sıxılaraq düzülür

Digər brauzerlər üçün yazılış aşağıdakı kimidir

-webkit-box-pack: justify;

-webkit-justify-content: space-between;

-ms-flex-pack: justify;

justify-content: space-between;

5. align-items

Bu özəllik blok içindəki elementlərin vertical olaraq nece düzüləcəyini təyin edir .

  • align-items: flex-start;
  • align-items: flex-end;
  • align-items: center;
  • align-items: stretch;
  • align-items: baseline;
  • Flex-start təyinatında blok içindəki elementlər yuxarıya sıxılaraq düzülür
  • Flex-end təyinatında blok içindəki elementlər aşağıya sıxılaraq düzülür
  • Center təyinatında blok içindəki elementlər yuxarı və aşağıya nəzərən eyni məsafədə boşluq buraxaraq ortada yerləşir
  • Stretch təyinatında blok içindəki elementlər blokun hündürlüyünə görə hər elementin eyni hündürlükdə blokda yerləşməsini təyin edir . Hündürlüyü blokun hündürlüyünü tutur
  • Baseline təyinatı blok içindəki elementləri , elementlərin içindəki ilk sətrə əsasən yerləşməsinə imkan edir

Digər brauzerlər üçün yazılış aşağıdakı kimidir

-webkit-box-align: center;

-webkit-align-items: center;

-ms-flex-align: center;

align-items: center;

6. align-content

Bu özəllik blok içindəki tək sətirlik elementlərin yox , çox sətirlik elementlərin nece yerləşəcəyini təyin edir .

  • align-content: flex-start;
  • align-content: flex-end;
  • align-content: center;
  • align-content: stretch;
  • align-content: space-around;
  • align-content: space-between;
  • Flex-start təyinatında blok içindəki elementlər yuxarıya sıxılaraq düzülür
  • Flex-end təyinatında blok içindəki elementlər aşağıya sıxılaraq düzülür
  • Center təyinatında blok içindəki elementlər yuxarı və aşağıya nəzərən eyni məsafədə boşluq buraxaraq ortada yerləşir
  • Stretch təyinatında blok içindəki elementlər blokun hündürlüyünə görə hər elementin eyni hündürlükdə blokda yerləşməsini təyin edir . Hündürlüyü blokun hündürlüyünü tutur
  • Space-around təyinatı blok içindəki element sətirlərini aralarında eyni məsafə ilə düzür
  • Space-between təyinatı blok içindəki element sətirlərinin birincisini yuxarı , axırıncısını aşağı sıxır və qalanları arasında eyni məsafə buraxır

Digər brauzerlər üçün yazılış aşağıdakı kimidir

-webkit-align-content: flex-start;

-ms-flex-line-pack: start;

align-content: flex-start;

Yuxarıdakı özəlliklər əsas elementə ( bloka ) verilən özəlliklər idi . İndi isə blok içindəki elementlərə verilən özəlliklərə baxaq :

1. order

Bu özəllik blok içindəki hər hansı elementi istədiyimiz yerdə yerləşdirməyimizə imkan verir . Təyinat olaraq 1 dən başlayan müsbət tam ədəd götürür . Bu özəlliklə 5-ci sıradakı elementə order: 1; verərək ilk sırada yerləşdirə bilərik .

2. flex-grow

Bu özəllik blok içindəki elementlərə genişlik vermək üçün işlədilir . Məsələn : blok içində 3 elementin olduğunu düşünək . 2 elementə flex-grow: 1; digər 1 elementə isə flex-grow: 3; təyinatını versək , onda təyinatı 3 olan element digər iki elementə görə 3 dəfə genişlənəcək . Təyinat olaraq order kimi natural ədədlər götürülür . Bu özəlliyin standart təyinatı 0-dır .

3. flex-shrink

Bu özəllik isə flex-grow təyinatının tam əksinə blok içindəki elementləri genişlətmək yox , daraltmaq üçün istifadə olunur . Məsələn : blok içində 2 elementin olduğunu düşünək . 1 elementə flex-shrink: 1; digər elementə isə flex-shrink: 2; təyinatını versək , onda təyinatı 2 olan element digər elementə görə 2 dəfə daralacaq . Təyinat olaraq flex-grow və order kimi natural ədədlər götürülür . Bu özəlliyin standart təyinatı 0-dır .

4. flex-basis

Bu özəllik elementin blok içindəki boş qalan yerə görə alacağı standart genişliyini təyin etmək üçün işlədilir . Standart təyinatı auto-dur .

5. flex

Bu özəllik yuxarıdakı 3 özəlliyi ayrı-ayrı yox , bir yerdə yazmaq üçün istifadə olunur . Birinci təyinatı flex-grow , ikinci təyinatı flex-shrink , üçüncü təyinatı isə flex-basis təyinatının aldığı qiymətdir . flex: 0 1 auto;

6. align-self

Bu özəllik flex elementinin digər elementlərə görə fərqli hərəkət etməsini təyin edir . Məsələn , blok içindəki elementlərə align-items: flex-start; təyinatını versək bu elementlər blok içində yuxarıdan başlayaraq düzüləcək . Daha sonra elementlərdən hansısa birinə align-self: flex-end; təyinatını versək onda həmin element aşağıdan başlayaraq düzüləcək .

Sonda Flexboxu dəstəkləyən brauzerlərə baxaq :

  • Chrome : 21+ (-webkit- ile), 29+ (-webkitsiz)
  • Firefox : 28+
  • Internet Explorer : 10(-ms- ilə),11
  • Safari : 6.1+(-webkit- ilə)
  • Opera : 17+

--

--