Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ CSS Flexbox: наглядноС Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² систСму ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ элСмСнтов Π½Π° Π²Π΅Π±-страницС

Π—Π°Π΄Π°Π²Π°Π»ΠΈΡΡŒ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ вопросом, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ CSS Flexbox? Наглядно объясняСм возмоТности Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ с использованиСм Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ.

ОблоТка: Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ CSS Flexbox: наглядноС Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² систСму ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ элСмСнтов Π½Π° Π²Π΅Π±-страницС

CSS Flexbox β€” это тСхнология для создания слоТных Π³ΠΈΠ±ΠΊΠΈΡ… ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π·Π° счёт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ размСщСния элСмСнтов Π½Π° страницС. О самой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΠΈΡˆΡƒΡ‚ здСсь. ΠœΡ‹ ΠΆΠ΅ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ возмоТности CSS Flexbox с использованиСм Π³ΠΈΡ„ΠΎΠΊ β€” настоящая flex ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ°.

  1. display: flex
  2. flex-direction
  3. justify-content
  4. align-items
  5. align-self
  6. flex-basis
  7. flex-grow
  8. flex-shrink
  9. flex
  10. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ

Display: flex

РазбСрёмся, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ display flex CSS. Π•ΡΡ‚ΡŒ страница:На Π½Π΅ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΎ 4 div Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π²Π½ΡƒΡ‚Ρ€ΠΈ сСрого div. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ div Π΅ΡΡ‚ΡŒ свойство display: block. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всю ΡˆΠΈΡ€ΠΈΠ½Ρƒ строки. И Π²ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ CSS display flex. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с CSS Flexbox, Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ flex ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ. ДСлаСтся это Ρ‚Π°ΠΊ:

			#container {  display: flex;}
		

Π’Π°ΠΊ Ρƒ Π±Π»ΠΎΠΊΠΎΠ² появилось свойство flex-контСкст, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² дальнСйшСм ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΠΌΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ с использованиСм стандартного CSS.

flex-direction

Π£ flex-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ оси: главная ΠΈ пСрпСндикулярная Π΅ΠΉ.По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ вдоль Π³Π»Π°Π²Π½ΠΎΠΉ оси β€” слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ. ИмСнно поэтому Π±Π»ΠΎΠΊΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡΡ‚Ρ€ΠΎΠΈΠ»ΠΈΡΡŒ Π² линию, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ display: flex. А Π²ΠΎΡ‚ flex-direction позволяСт Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π³Π»Π°Π²Π½ΡƒΡŽ ось.

			#container {  display: flex;  flex-direction: column;}
		

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ flex-direction: column Π½Π΅ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈ ΠΏΠΎ оси, пСрпСндикулярной Π³Π»Π°Π²Π½ΠΎΠΉ. Главная ось сама мСняСт своё располоТСниС, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° свСрху Π²Π½ΠΈΠ·.Π•ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΏΠ°Ρ€ΠΎΡ‡ΠΊΠ° свойств для flex-direction: row-reverse ΠΈ column-reverse.

justify-content

ΠžΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ элСмСнтов ΠΏΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ оси:

			#container {  display: flex;  flex-direction: row;  justify-content: flex-start;}
		

Justify-content ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ 5 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

  1. tflex-start
  2. flex-end
  3. center
  4. space-between
  5. space-around

Space-between Π·Π°Π΄Π°Ρ‘Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ, Π½ΠΎ Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ. Space-around Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Ρ‘Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ.

align-items

Если justify-content Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π³Π»Π°Π²Π½ΠΎΠΉ осью, Ρ‚ΠΎ align-items Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с осью, пСрпСндикулярной Π³Π»Π°Π²Π½ΠΎΠΉ оси. ВСрнёмся ΠΊ flex-direction: row ΠΈ пройдёмся ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ align-items:

  1. flex-start
  2. flex-end
  3. center
  4. stretch
  5. baseline

Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для align-items: stretch высота Π±Π»ΠΎΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½Π° auto. Для align-items: baseline Ρ‚Π΅Π³ΠΈ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π° ΡƒΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ получится Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ оси, объСдиним justify-content с align-items ΠΈ посмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ для Π΄Π²ΡƒΡ… свойств flex-direction:

align-self

ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ элСмСнты ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

			#container {  align-items: flex-start;}.square#one {  align-self: center;}// Only this square will be centered.
		

Для Π΄Π²ΡƒΡ… Π±Π»ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ align-self, Π° для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… β€” align-items: center ΠΈ flex-direction: row.

flex-basis

ΠžΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнтов Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ свойствами CSS Flexbox. flex-basis влияСт Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнтов вдоль Π³Π»Π°Π²Π½ΠΎΠΉ оси. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ случится, Ссли ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎΠΉ оси:

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ высоту элСмСнтов: flex-basis ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊ высоту элСмСнтов, Ρ‚Π°ΠΊ ΠΈ ΠΈΡ… ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π² зависимости ΠΎΡ‚ направлСния оси.

flex-grow

Π­Ρ‚ΠΎ свойство Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС. Для Π½Π°Ρ‡Π°Π»Π° Π·Π°Π΄Π°Π΄ΠΈΠΌ Π±Π»ΠΎΠΊΠ°ΠΌ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π² 120px:По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ flex-grow Ρ€Π°Π²Π½ΠΎ 0. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊΠ°ΠΌ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ…. Π—Π°Π΄Π°Π΄ΠΈΠΌ flex-grow Ρ€Π°Π²Π½Ρ‹ΠΌ 1 для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π±Π»ΠΎΠΊΠΈ заняли ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π΅ΡΡ мСсто Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Но Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ flex-grow: 1? ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ flex-grow Ρ€Π°Π²Π½Ρ‹ΠΌ 999:

Π˜β€¦ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Π’Π°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ flex-grow ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ значСния, Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρƒ flex-grow, Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΎΠ½ΠΎ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π±Π»ΠΎΠΊΠ°ΠΌ:

Π’Π½Π°Ρ‡Π°Π»Π΅ flex-grow ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Ρ€Π°Π²Π΅Π½ 1, Π² суммС получится 6. Π—Π½Π°Ρ‡ΠΈΡ‚, наш ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½ Π½Π° 6 частСй. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ 1/6 Ρ‡Π°ΡΡ‚ΡŒ доступного пространства Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Когда flex-grow Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π±Π»ΠΎΠΊΠ° становится Ρ€Π°Π²Π½Ρ‹ΠΌ 2, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ дСлится Π½Π° 7 частСй: 1 + 1 + 2 + 1 + 1 + 1. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π±Π»ΠΎΠΊ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2/7 пространства, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ β€” ΠΏΠΎ 1/7. И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

flex-grow Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π³Π»Π°Π²Π½ΠΎΠΉ оси, ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π΅Ρ‘ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.

flex-shrink

ΠŸΡ€ΡΠΌΠ°Ρ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ flex-grow. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚, насколько Π±Π»ΠΎΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒΡΡ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅. flex-shrink ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° элСмСнты Π½Π΅ Π²ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π’Ρ‹ опрСдСляСтС, ΠΊΠ°ΠΊΠΈΠ΅ элСмСнты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒΡΡ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ…, Π° ΠΊΠ°ΠΊΠΈΠ΅ β€” Π½Π΅Ρ‚. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ flex-shrink для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Ρ€Π°Π²Π½ΠΎ 1. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ.Π—Π°Π΄Π°Π΄ΠΈΠΌ flex-grow ΠΈ flex-shrink Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ 1:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ помСняСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ flex-shrink для Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π±Π»ΠΎΠΊΠ° Π½Π° 0. Π•ΠΌΡƒ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ»ΠΈ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒΡΡ, поэтому Π΅Π³ΠΎ ΡˆΠΈΡ€ΠΈΠ½Π° останСтся Ρ€Π°Π²Π½ΠΎΠΉ 120px:

flex-shrink основываСтся Π½Π° пропорциях. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° flex-shrink Ρ€Π°Π²Π΅Π½ 6, Π° Ρƒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ½ Ρ€Π°Π²Π΅Π½ 2, Ρ‚ΠΎ, это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π² Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° быстрСС, Ρ‡Π΅ΠΌ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅.

flex

ЗамСняСт flex-grow, flex-shrink ΠΈ flex-basis. ЗначСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 0 (grow) 1 (shrink) auto (basis).Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄Π²Π° Π±Π»ΠΎΠΊΠ°:

			.square#one {  flex: 2 1 300px;}.square#two {  flex: 1 2 300px;}
		

Π£ ΠΎΠ±ΠΎΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ flex-basis. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° Π±ΡƒΠ΄ΡƒΡ‚ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ Π² 300px (ΡˆΠΈΡ€ΠΈΠ½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°: 600px плюс margin ΠΈ padding). Но ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π°Ρ‡Π½Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ…, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ (с большим flex-grow) Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Π΄Π²Π° Ρ€Π°Π·Π° быстрСС, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π»ΠΎΠΊ (с наибольшим flex-shrink) Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π² Π΄Π²Π° Ρ€Π°Π·Π° быстрСС:Π•Ρ‰Ρ‘ большС возмоТностСй свойства Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ руководствС ΠΏΠΎ CSS flex​.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ

Как с CSS Flexbox мСняСтся Ρ€Π°Π·ΠΌΠ΅Ρ€?

Когда увСличиваСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ, ΠΎΠ½ Π½Π΅ становится Π² Π΄Π²Π° Ρ€Π°Π·Π° большС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ, ΠΈ ΠΊΠΎΠ³Π΄Π° ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π²Ρ‚ΠΎΡ€ΠΎΠΉ, ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ становится Π² Π΄Π²Π° Ρ€Π°Π·Π° мСньшС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ. Π­Ρ‚ΠΎ происходит ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ flex-grow ΠΈ flex-shrink ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° Ρ‚Π΅ΠΌΠΏ роста ΠΈ сокращСния.

НСмного ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ

И послСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎ flex box CSS. ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°: 640px. Π’Ρ‹Ρ‡Ρ‚Π΅ΠΌ ΠΏΠΎ 20px с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стороны для padding, ΠΈ Ρƒ нас останСтся 600px для Π΄Π²ΡƒΡ… Π±Π»ΠΎΠΊΠΎΠ². Когда ΡˆΠΈΡ€ΠΈΠ½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° становится Ρ€Π°Π²Π½ΠΎΠΉ 430px (потСря Π² 210px), ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ (flex-shrink: 1) тСряСт 70px. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π»ΠΎΠΊ (flex-shrink: 2) тСряСт 140px. Когда ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ сТимаСтся Π΄ΠΎ 340px, ΠΌΡ‹ тСряСм 300px. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ тСряСт 100px, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” 200px. Π’ΠΎ ΠΆΠ΅ самоС происходит ΠΈ с flex-grow.

Если ΠΏΠΎΠΌΠΈΠΌΠΎ flex CSS Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΠ΅Ρ‚Π΅ΡΡŒ CSS Grid, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с нашСй ΡΡ‚Π°Ρ‚ΡŒΡ‘ΠΉ, Π³Π΄Π΅ ΠΌΡ‹ рассматриваСм Flexbox ΠΈ Grid.

​

НадССмся, Π²Π°ΠΌ Π±Ρ‹Π»Π° ΠΏΠΎΠ»Π΅Π·Π½Π° наша анимированная Flexbox ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ°. ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° Ρ‚Π΅Π³ CSS, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ возмоТностях ЀлСксбокс ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ