Кнопки не "квадратные". border-radius работает. Скруглённые углы обрезаются overflow: hidden на AG Grid ячейке.
- AG Grid ячейка:
height: 42px,overflow: hidden - AG Grid row задаёт
line-height: 39px(через CSS-переменную--ag-internal-content-line-height) - Tailwind Preflight содержит:
button { line-height: inherit } - Для
<span>—line-heightнаследуется от родителя по стандарту CSS, Tailwind тут не при чём - Кнопка/спан внутри cellRenderer наследует
line-height: 39px - С
padding: 5pxсверху и снизу, итоговая высота элемента ~49px - Контейнер 42px с
overflow: hidden→ обрезает ~7px сверху и снизу border-radius: 8pxполностью срезается → элемент выглядит прямоугольным
Ячейка AG Grid (42px, overflow: hidden)
┌──────────────────────────┐
│ ┌─ - - - - - - - - ┐ │ ← обрезанный верх (border-radius не виден)
│ │ Yes │ │
│ └─ - - - - - - - - ┘ │ ← обрезанный низ (border-radius не виден)
└──────────────────────────┘
Без overflow: hidden (или с line-height: normal)
╭──────────────────╮
│ Yes │ ← border-radius виден
╰──────────────────╯
[class*="ag-theme-"] button,
[class*="ag-theme-"] input,
[class*="ag-theme-"] span {
line-height: normal;
}AG Grid. Архитектура ячейки — overflow: hidden + фиксированная высота + наследуемый line-height — это мина для любого cellRenderer с кастомными элементами (кнопки, бейджи, инпуты с padding и border-radius).
Tailwind Preflight просто обнажает проблему: без него браузер ставит свой line-height на <button>, и элемент влезает в ячейку. С Preflight'овским line-height: inherit — кнопка вырастает и обрезается.
Что AG Grid могли бы сделать лучше:
- Использовать
overflow: clipвместоoverflow: hidden(не создаёт scroll context, но позволяет border-radius выходить за границы) - Или
overflow: visibleна ячейках - Или не пробрасывать
line-heightчерез row внутрь ячейки — ячейка должна изолировать свои стили - В их официальном HR demo они сами фиксят
.ag-cell { display: flex; align-items: center }— признание того что дефолтное поведение недостаточно
AG Grid — лучший data grid на рынке, альтернатив на таком уровне нет. Но конкретно эта деталь — плохое решение. Grid рассчитан на текстовые данные, cellRenderer с кастомными элементами — advanced use case, и они ожидают что разработчик сам позаботится о размерах.
Бинарная бисекция 53KB index.css: разрезали пополам → тестировали каждую половину → за 7 итераций нашли конкретное правило button { line-height: inherit }. Затем визуальный тест с разными line-height + container с overflow:hidden доказал механизм.
В минимальных тестах с Tailwind Preflight + AG Grid кнопки были круглые, потому что:
- AG Grid CDN версия инжектирует стили после нашего
<style>блока - Порядок каскада отличался от реального Vite-билда
- Только полный
index.css(53KB) в комбинации с AG Grid JS-инжектированными стилями давал нужный порядок каскада
- AG Grid Community/Enterprise: 35.2.1
- Tailwind CSS: 3.4.19
- Svelte 5, Vite 6