Выделенное текстовое поле было действительно сложно реализовать.При нажатии на эту функцию нам пришлось рассмотреть несколько вариантов, каждый из которых имел свои недостатки
- Элемент SVG
Легко создавать и анимировать, но сложно масштабировать с окружающимэлементы.Если бы мы пошли по этому пути, нам нужно было бы прослушивать какое-либо событие изменения размера, что означало бы либо использование события изменения размера окна, которое не является надежным, либо использование более новой и менее поддерживаемой функции, такой как ResizeObserver / MutationObserver.Существуют полифилы, но это увеличило бы размер пакета примерно на 2 КБ для относительно небольшой функции.
Вероятно, что в будущем будет использоваться маршрут SVG.Также стоит отметить, что именно так Google Material Components Web решает эту проблему.
Обычная старая рамка с фоном на ярлыке
Это, безусловно, самый простой подход, но он также несколько негибкий.Вы можете увидеть пример этого в новом потоке входа в Google.Там они фактически устанавливают цвет фона на белый.Это, вероятно, хороший подход для большого количества пользователей, но, конечно, не сработает, если ваш фон имеет градиент или какой-то подобный крайний случай.Тем не менее, не нужно беспокоиться об изменении размера, потому что это просто граница.
Fieldset и легенды
Это то, чем мы закончили, во многом благодаря его гибкости для конечных пользователей.Fieldset и его компонент легенды являются встроенными способами достижения в значительной степени этой точной функциональности.Большой недостаток этого заключается в том, что стилизация в разных браузерах жесткая, а свойства, которые мы будем анимировать, не эффективны, такие как ширина легенды.Кроме того, всегда лучше использовать семантический HTML, конечно, это не так, что означает, что нам нужно использовать aria-hidden
, чтобы указывать программам чтения с экрана игнорировать элемент.
В зависимости от ваших целей, любой из этихрешения могут работать лучше для вас.Помните, что получить идеальное решение, которое решает все эти проблемы, может быть очень сложно!