CSS Borders - Width, Style, Color & Radius

What You'll Learn

  • Control border thickness with border-width using keywords and pixel values
  • Master all border styles (solid, dashed, dotted, double, groove, ridge, inset, outset)
  • Set border colors with border-color for one or all four sides
  • Use the border shorthand for cleaner code
  • Control individual sides with border-top, border-right, etc.
  • Create rounded corners with border-radius
  • Build perfect circles, pills, and custom shapes with radius
  • Create gradient borders with border-image
  • Combine gradient borders with border-radius using workarounds

Introduction to CSS Borders

Borders define the edges of elements, creating visual boundaries and structure. Every border has three essential components: width (thickness), style (line pattern), and color. All three must be specified for a border to appear.

Beyond basic borders, CSS provides border-radius for rounded corners and border-image for gradient and pattern borders, enabling sophisticated designs without images.

border-width - Controlling Thickness

The border-width property controls how thick borders appear. Use keywords (thin, medium, thick) or precise pixel/em values.

/* Keyword values */ border-width: thin; /* Usually 1px */ border-width: medium; /* Usually 3px (default) */ border-width: thick; /* Usually 5px */ /* Pixel values (most common) */ border-width: 1px; border-width: 3px; border-width: 5px; border-width: 10px; /* Different width per side (clockwise from top) */ border-width: 2px 5px 10px 15px; /* top: 2px, right: 5px, bottom: 10px, left: 15px */ /* Two values (vertical | horizontal) */ border-width: 5px 10px; /* top/bottom: 5px, left/right: 10px */ /* Three values */ border-width: 2px 5px 10px; /* top: 2px, left/right: 5px, bottom: 10px */

border-style - Line Patterns

The border-style property determines how the border line appears. This property is required for borders to be visible.

/* Most common styles */ border-style: solid; /* Solid line (most used) */ border-style: dashed; /* Dashed line */ border-style: dotted; /* Dotted line */ border-style: double; /* Two parallel lines */ /* 3D effect styles (appearance varies by browser) */ border-style: groove; /* 3D grooved line */ border-style: ridge; /* 3D ridged line */ border-style: inset; /* 3D inset (sunken) */ border-style: outset; /* 3D outset (raised) */ /* Special values */ border-style: none; /* No border (default) */ border-style: hidden; /* Like none, but for table conflict resolution */ /* Different style per side */ border-style: solid dashed dotted double; /* top: solid, right: dashed, bottom: dotted, left: double */ /* Practical examples */ .card { border-style: solid; /* Required for border to show */ } .separator { border-style: dashed; /* Visual separator */ } .fancy-box { border-style: double; /* Decorative double border */ }

border-color - Setting Colors

The border-color property sets the color of borders. Like width and style, you can specify different colors for each side.

/* Single color (all sides) */ border-color: #2196f3; border-color: rgb(33, 150, 243); border-color: currentColor; /* Inherits text color */ /* Different color per side */ border-color: #f44336 #4caf50 #2196f3 #ff9800; /* top: red, right: green, bottom: blue, left: orange */ /* Two values */ border-color: #2196f3 #4caf50; /* top/bottom: blue, left/right: green */ /* Transparent borders (useful for tricks) */ border-color: transparent; /* Practical examples */ .highlight { border-color: #2196f3; /* Brand color */ } .error { border-color: #f44336; /* Error red */ } .rainbow { border-color: #f44336 #4caf50 #2196f3 #ff9800; }

Border Shorthand - Cleaner Syntax

The border shorthand combines width, style, and color into a single declaration. This is the most common way to set borders.

/* Shorthand syntax: width style color */ border: 3px solid #2196f3; /* Equivalent to: */ border-width: 3px; border-style: solid; border-color: #2196f3; /* Common patterns */ border: 1px solid #e0e0e0; /* Subtle divider */ border: 2px dashed #757575; /* Dashed separator */ border: 3px double #2196f3; /* Decorative double */ border: 5px solid currentColor; /* Matches text color */ /* Minimal shorthand (using defaults) */ border: solid; /* Uses medium width, currentColor */ border: 2px solid; /* Uses currentColor */ border: solid #2196f3; /* Uses medium width */

Individual Side Control

Control borders on specific sides using border-top, border-right, border-bottom, and border-left.

/* Individual side shorthands */ border-top: 3px solid #2196f3; border-right: 2px dashed #4caf50; border-bottom: 4px dotted #ff9800; border-left: 5px double #e91e63; /* Common patterns */ /* Bottom border only (underline effect) */ .underline { border-bottom: 2px solid #2196f3; } /* Left accent bar */ .accent { border-left: 4px solid #4caf50; padding-left: 1rem; } /* Top and bottom borders */ .separator { border-top: 1px solid #e0e0e0; border-bottom: 1px solid #e0e0e0; } /* Specific property for one side */ border-top-width: 5px; border-right-style: dashed; border-bottom-color: #2196f3; border-left-width: 2px;

border-radius - Rounded Corners

The border-radius property creates rounded corners on elements. It works with or without visible borders.

/* Same radius on all corners */ border-radius: 5px; border-radius: 10px; border-radius: 20px; /* Perfect circle (when width = height) */ border-radius: 50%; /* Pill shape */ border-radius: 50px; border-radius: 100px; /* Different radius per corner (clockwise from top-left) */ border-radius: 10px 20px 30px 40px; /* top-left: 10px, top-right: 20px, bottom-right: 30px, bottom-left: 40px */ /* Two values (diagonal corners) */ border-radius: 20px 10px; /* top-left & bottom-right: 20px, top-right & bottom-left: 10px */ /* Individual corners */ border-top-left-radius: 50px; border-top-right-radius: 50px; border-bottom-right-radius: 50px; border-bottom-left-radius: 50px; /* Common shapes */ /* Perfect circle */ .circle { width: 100px; height: 100px; border-radius: 50%; } /* Pill/capsule */ .pill { border-radius: 50px; padding: 0.5rem 1.5rem; } /* Rounded card */ .card { border-radius: 8px; } /* Tab shape (rounded top) */ .tab { border-radius: 10px 10px 0 0; }

Elliptical Border Radius

Create elliptical corners by specifying separate horizontal and vertical radii using a slash /.

/* Elliptical corners: horizontal / vertical */ border-radius: 50px / 25px; /* All corners: 50px horizontal radius, 25px vertical radius */ /* Different ellipses per corner */ border-radius: 100px 50px / 50px 25px; /* top-left & bottom-right: 100px/50px, top-right & bottom-left: 50px/25px */ /* Complex organic shapes */ border-radius: 50px 100px 150px 50px / 100px 50px 50px 100px; /* Practical examples */ /* Subtle ellipse */ .ellipse-box { border-radius: 20px / 10px; } /* Extreme ellipse */ .egg-shape { width: 150px; height: 200px; border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; }

border-image - Gradient Borders

The border-image property allows you to use gradients, patterns, or images as borders. Perfect for colorful, modern designs.

/* Gradient border (simple) */ .gradient-border { border: 10px solid; border-image: linear-gradient(135deg, #667eea, #764ba2) 1; } /* Multi-color gradient */ .rainbow-border { border: 15px solid; border-image: linear-gradient(90deg, #667eea, #764ba2, #f093fb, #f5576c, #4facfe, #00f2fe ) 1; } /* Radial gradient border */ .radial-border { border: 12px solid; border-image: radial-gradient(circle, #667eea, #764ba2) 1; } /* Conic gradient border (spinning effect) */ .conic-border { border: 12px solid; border-image: conic-gradient( from 90deg, #667eea, #764ba2, #f093fb, #667eea ) 1; } /* The "1" at the end is the slice value */ /* It determines how the gradient is divided among border sides */

Gradient Borders with border-radius

Since border-radius doesn't work with border-image, use a creative double-background technique to achieve rounded gradient borders.

/* Rounded gradient border technique */ .gradient-border-rounded { border: 5px solid transparent; border-radius: 20px; background: linear-gradient(white, white) padding-box, linear-gradient(135deg, #667eea, #764ba2) border-box; } /* How it works: 1. Set transparent border to create space 2. First background fills content area (padding-box) 3. Second background fills border area (border-box) 4. border-radius rounds both backgrounds */ /* Animated gradient border */ .gradient-border-animated { border: 5px solid transparent; border-radius: 20px; background: linear-gradient(white, white) padding-box, linear-gradient(90deg, #f093fb, #f5576c, #4facfe, #00f2fe) border-box; background-size: 100%, 200% 100%; animation: gradient-shift 3s linear infinite; } @keyframes gradient-shift { to { background-position: 0%, 200% 0%; } } /* Different content background */ .gradient-border-dark { border: 5px solid transparent; border-radius: 20px; background: linear-gradient(#1a1a1a, #1a1a1a) padding-box, linear-gradient(135deg, #667eea, #764ba2) border-box; color: white; }

Key Takeaways

  • Three required properties: width, style, and color (style must be set for borders to appear)
  • border shorthand: border: width style color; is the cleanest syntax
  • border-width: Use pixels for precision; keywords (thin/medium/thick) are less common
  • border-style: solid, dashed, and dotted are most used
  • border-color: Defaults to currentColor (text color) if not specified
  • Individual sides: Use border-top, border-right, border-bottom, border-left
  • Multiple values: Follow clockwise order (TRouBLe: Top, Right, Bottom, Left)
  • border-radius: Creates rounded corners; use 50% for circles
  • Elliptical radius: Use slash syntax (50px / 25px) for elliptical corners
  • border-image: Creates gradient borders but doesn't work with border-radius
  • Rounded gradient borders: Use double-background technique with transparent border
  • border-radius works with or without visible borders