Last updated on
親要素に連動する border-radius
tailwind.config.ts:
const config = {
// ...
plugins: [
// ...
plugin(({ matchUtilities, addUtilities, theme }) => {
Object.entries(theme('borderRadius') ?? {}).forEach(([borderRadiusKey, borderRadiusValue]) => {
if (borderRadiusKey === 'full') {
return
}
matchUtilities(
{
[borderRadiusKey === 'DEFAULT' ? 'base-rounded-p' : `base-rounded-${borderRadiusKey}-p`]: (
spacingValue: string
) => ({
padding: spacingValue,
'--base-rounded-padding': spacingValue,
'--base-rounded-radius': borderRadiusValue,
'border-radius': borderRadiusValue,
}),
},
{ values: theme('spacing') },
)
})
addUtilities({
'.auto-rounded': {
'border-radius': ['calc(var(--base-rounded-radius) - var(--base-rounded-padding))'],
},
})
}),
],
} satisfies Config
Usage:
<div className="base-rounded-2xl-p-1 border">
<div className="auto-rounded bg-gray-500 h-10 grid place-content-center">
rounded-2xl + p-1 based inner rounded
</div>
</div>
<div className="base-rounded-3xl-p-2 border">
<div className="auto-rounded bg-gray-500 h-10 grid place-content-center">
rounded-3xl + p-2 based inner rounded
</div>
</div>