tailwind-rounded-out
Version:
Tailwind CSS plugin for outer-rounded corners with background inheritance
160 lines (110 loc) • 4.55 kB
Markdown
# Tailwind Rounded Out
A Tailwind CSS plugin that adds _**"outside" rounded corners**_ to elements
<small>Similar to folder tabs or protruding cards. The plugin maintains background color/image inheritance while providing a wide range of customization options.</small>
<div align="center">
<img src="docs/images/readme-example.png" alt="Demo of the plugin">
</div>
## Features
- Maintains background inheritance (colors, gradients, images)
- Supports all corners and sides independently
- Works with Tailwind's default radius sizes
- Supports arbitrary values
- Zero dependencies besides Tailwind CSS
## Installation
```bash
npm install tailwind-rounded-out
```
## Setup
Add the plugin to your `tailwind.config.js`:
```js
module.exports = {
content: [
// ...
],
theme: {
// Optionally customize default sizes
roundedOut: {
sm: "0.125rem",
// ... other sizes
},
},
plugins: [require("tailwind-rounded-out")],
};
```
<small>note: if you don't supply custom sizes, the plugin will use the same values from either the `theme.borderRadius` or the default theme sizes</small> <
## Basic Usage
```html
<!-- All corners -->
<div class="rounded-out-lg">Basic card with large outer corners</div>
<!-- Specific sides -->
<div class="rounded-out-b-xl">Bottom corners only</div>
<!-- Individual corners -->
<div class="rounded-out-bl-2xl">Just bottom-left corner</div>
<!-- Mixed sizes -->
<div class="rounded-out-bl-xl rounded-out-br-sm">
Different sizes for bottom-left and bottom-right
</div>
<!-- Arbitrary values -->
<div class="rounded-out-[25px]">Custom radius size</div>
```
## Available Classes
### Full Rounding
- `rounded-out-{size}`
- Sizes: `sm`, `md`, `lg`, `xl`, `2xl`, `3xl`
### Directional Variants
- `rounded-out-{t|b|l|r}-{size}` - Top, Bottom, Left, Right
- `rounded-out-{tl|tr|bl|br}-{size}` - Top-Left, Top-Right, etc.
- `rounded-out-{lt|lb|rt|rb}-{size}` - Left-Top, Left-Bottom, etc.
### Arbitrary Values
- `rounded-out-[size]`
- `rounded-out-{direction}-[size]`
## How It Works
This plugin uses CSS `::before` and `::after` pseudo-elements to create the rounded corner effect with a CSS Mask, and so it can let the real background show through. The pseudo-elements are positioned absolutely and use CSS masks to create the rounded shape so there's no need for a fake background color.
### Important Notes
1. **Pseudo-element Usage**: Because this plugin uses `::before` and `::after` pseudo-elements, you cannot apply additional `::before` or `::after` styles to elements using these classes.
2. **Position Context**: Elements using these classes should have `position: relative` or any other position that creates a containing block.
3. **Background Inheritance**: The rounded corners will automatically inherit background colors, images, and gradients from the parent element.
## Examples
### Tab-like Navigation
```html
<nav class="flex gap-px text-slate-600">
<a class="relative rounded-out-b-xl bg-blue-300 px-4 py-2 rounded-t-xl">
Inactive Tab
</a>
<a
class="relative rounded-out-b-xl bg-blue-500 px-4 py-2 rounded-t-xl z-10 text-slate-200"
>
Active Tab
</a>
</nav>
```
#### Produces;
<img src="docs/images/tab-like-nav.png" alt="Card with mixed corners">
### Card with Mixed Corners
```html
<div
class="relative rounded-out-tl-xl rounded-out-br-xl bg-gradient-to-r from-blue-500 to-purple-500 p-6 rounded-tr-xl rounded-bl-xl before:bg-blue-500 before:bg-none after:bg-purple-500 after:bg-none"
>
Card with diagonal corners
</div>
```
#### Produces;
<img src="docs/images/mixed-corners.png" alt="Card with mixed corners">
## Troubleshooting
### Common Issues
1. **Backgrounds Not Showing**
- Ensure the parent element has a background color/image set
- The element this is applied to needs to have `position: relative` or any other position that creates a containing block
2. **Conflicts with Other Styles**
- Remove any ::before or ::after pseudo-elements on the same element
- Check z-index values if elements appear in wrong order
3. **Overflow notes**
- The corners are _outside_ of the bounding box
- Setting an overflow hidden will prevent the pseudo-elements from showing
## License
MIT License - See [LICENSE](LICENSE) file for details
## More Examples
#### Backgrounds are able to show through, no fake backgrounds.
<img src="docs/images/readme-example2.png" alt="Demo of the plugin">
#### A range of corner variations
<img src="docs/images/readme-example3.png" alt="Demo of the plugin">