UNPKG

tailwind-rounded-out

Version:

Tailwind CSS plugin for outer-rounded corners (like tabs) with css mask

160 lines (107 loc) 5.06 kB
# Tailwind Rounded Out (v2) A Tailwind CSS plugin that adds _**"outside" rounded corners**_ to elements, updated to work with __TailwindCSS v4__. <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="public/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 ``` > If you're looking for **a version that works with TailwindCSS v3**, check out the [`1.0.1` branch](https://github.com/simeydotme/tailwind-rounded-out/tree/1.0.1). You can install that with `npm install tailwind-rounded-out@1.0.1`. ## Setup Import the plugin in your tailwind css file: ```css @import "tailwindcss"; @import "tailwind-rounded-out"; ``` <sub>note: The plugin uses your `--radius-*` theme variables to determine the default literal sizes for each corner.</sub> ## 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> ``` ### See the [demo page for a bunch more examples](https://simeydotme.github.io/tailwind-rounded-out)! ## Available Classes ### Basic outside 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}` - e.g. `rounded-out-[25px]` - `rounded-out-{direction}-{size}` - e.g. `rounded-out-t-[25px]` ## 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. You can, however, use `:hover`, `:focus`, etc to toggle the corners on and off. 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="public/images/tab-like-nav.png" alt="Tab-like navigation"> ### Card with Diagonal Gradient Corners ```html <div class="relative min-h-[200px] rounded-out-tl-2xl rounded-out-br-2xl bg-gradient-to-br from-blue-500 to-purple-500 p-8 rounded-tr-xl rounded-bl-xl before:bg-blue-500 before:bg-none after:bg-purple-500 after:bg-none"> Card with diagonal gradient corners </div> ``` #### Produces; <img src="public/images/mixed-corners.png" alt="Card with diagonal gradient 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 Visit the [demo page](https://simeydotme.github.io/tailwind-rounded-out) for more examples. #### Backgrounds are able to show through, no fake backgrounds. <img src="public/images/readme-example2.png" alt="Demo of the plugin"> #### A range of corner variations <img src="public/images/readme-example3.png" alt="Demo of the plugin">