-
Notifications
You must be signed in to change notification settings - Fork 186
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tech(Flex): add support flex with gap #8212
Conversation
size-limit report 📦
|
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. |
e2e tests |
👀 Docs deployed
Commit bd3505e |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #8212 +/- ##
=======================================
Coverage 95.51% 95.51%
=======================================
Files 404 404
Lines 11531 11531
Branches 3830 3829 -1
=======================================
Hits 11014 11014
Misses 517 517
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👏 👏 👏
8d6659c
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔥
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👏 👍 🚀
Описание
На данный момент мы не можем использовать свойство
gap
в flex контейнере - наша браузерная поддержка не покрывает поддержку этого свойства совместно сdisplay: flex
. Поэтому в компонентеFlex
для реализацииgap
используются хаки с margin-ами. Хотелось бы использовать свойствоgap
как основную реализацию, и если она не поддерживается, то использовать фолбэк с текущей реализацией. Нужно придумать как это можно сделать используя толькоcss
.Исследования
Первым делом попробовал использовать
@support (gap: 1px)
для проверки поддержкиgap
. Как оказалось этот способ не работает, так как само свойство появилось раньше. А его поддержка вflex
контейнере появилась позжеНашел issue на github в котором обсуждали эту проблему. В одном из комментариев пользователь предложил следующий способ:


Можно использовать
@support (inset: 0)
, так как его браузерная поддержка максимально близка к поддержкеgap + flex
Поддержка gap + flex
Поддержка inset
Из этого можно сделать вывод:
@support (inset: 0)
не будет срабатывать на все браузеры, которые не поддерживаютflex + gap
. Но также и не будет срабатывать для нескольких версий браузеров, гдеgap
уже поддерживается, а именно:Chrome 84 - 86
,Edge 84 - 86
,Firefox 63 - 65
,Opera 70 - 72
.Решение есть, осталось только определить плюсы и минусы данной доработки:
Плюс и минусы
+
У большинства пользователей будет использоваться нативное решение, у которого не будет багов, которые есть у фолбек решения, такие как вложенныеFlex
и тд.-
Разработчикам придется поддерживать в будущем(пока полностью не откажемся от фолбека) два подхода. Но я бы не сказал, что это будет проблемно, учитывая, что кода в целом то немного. Плюс небольшая вероятность, что в компонентFlex
будет добавляться много функционала.Немного статистики
Есть страничка со статистикой использования браузеров и их версий на caniuse. Исходя из нее можно сделать вывод, что очень мало пользователей пользуется браузерами, которые еще не поддерживают
gap
Еще сайт со статистикой по браузерам
Кейсы, которые будут работать в новой реализации
Если прокинуть в


children
один Fragment, в котором будет несколькоchildren
Реализация через
gap
:В fallback реализации не будет выставлен:
Это происходит из-за этого кода:

Данный код правит баг из #7463. Можно, конечно, рекурсивно рассчитывать настоящее количество
child-ов
, но скорее всего это может ударить по производительностиВ новой реализации обоих этих багов не будет
Изменения
gap
если поддерживается свойствоinset
gap
рассчитывались всегда, даже, когда 1children
. Это исправляет проблему, когда вchildren
прокинутFragment
с множествомchild-ов
. Правда это исправляет проблему только для нового решения черезgap
storybook
компонента для более удобной работы сFlex
Release notes