CSSskew()

skew() Transform

skew() distorts an element by slanting it along the X and Y axes. Unlike rotate, which spins an element, skew stretches it at an angle. This creates italic or parallelogram effects. You can skew on one axis with skewX() or skewY(), or both with skew(x, y).

The skew() function

CSS
/* skew(x-angle, y-angle): distort element on both axes */
.skewed {
  transform: skew(20deg, 10deg);
  /* Tilts 20deg on X axis, 10deg on Y axis */
}

/* Single angle skews X axis */
.skew-x {
  transform: skew(30deg);
  /* Same as skewX(30deg) */
}

/* skewX: distort on horizontal axis only */
.italic-text {
  transform: skewX(-15deg);
  /* Creates italic-like effect */
}

/* skewY: distort on vertical axis only */
.slanted {
  transform: skewY(25deg);
  /* Slants vertically */
}

/* Negative angles skew opposite direction */
.reverse-skew {
  transform: skewX(-20deg);
  /* Skews in opposite direction */
}

/* Combining skew with other transforms */
.complex {
  transform: translateX(50px) skew(15deg, 10deg) scale(1.1);
  /* Multiple transforms applied left to right */
}
skewX() vs skewY()

Function

Effect

Axis

Use Case

skewX()

Horizontal slant

X only

Italic text effect, parallelograms

skewY()

Vertical slant

Y only

Perspective-like effects

skew(x,y)

Both axes

X and Y

Complex distortions

CSS
/* Italic text style with skewX */
.italic-style {
  font-style: italic;  /* or use transform */
  transform: skewX(-12deg);
}

/* CSS-based italic alternative */
.text-italic {
  display: inline-block;
  transform: skewX(-15deg);
  /* Programmatically italic */
}

/* Parallelogram shape */
.parallelogram {
  width: 200px;
  height: 100px;
  background: #3498db;
  transform: skewX(20deg);
  /* Creates parallelogram effect */
}

/* Diamond shape with skew and rotation */
.diamond {
  width: 100px;
  height: 100px;
  background: #e74c3c;
  transform: rotate(45deg) skew(10deg);
  /* Combines rotation and skew */
}

/* Interactive skew on hover */
.hover-skew {
  background: #2ecc71;
  padding: 20px;
  transition: transform 0.3s ease;
}

.hover-skew:hover {
  transform: skew(10deg, 5deg);
  /* Skews on hover */
}

/* Skew with perspective */
.with-perspective {
  perspective: 1000px;
}

.perspective-element {
  transform: skewY(20deg);
  /* Appears to tilt in 3D space */
}
Skew use cases and patterns

CSS
/* Banner with skewed background */
.skewed-banner {
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  padding: 60px 20px;
  transform: skewY(-3deg);
  margin-bottom: 30px;
  /* Subtle skew for visual interest */
}

/* Skewed card design */
.skew-card {
  background: white;
  padding: 30px;
  border-radius: 8px;
  box-shadow: 0 4px 6px rgba(0,0,0,0.1);
  transform: skewX(-5deg);
  /* Subtle skew for modern look */
}

/* Angled divider */
.angled-divider {
  height: 100px;
  background: #f0f0f0;
  transform: skewY(-2deg);
  /* Creates angled section break */
}

/* Skewed button */
.skew-button {
  display: inline-block;
  padding: 12px 24px;
  background: #3498db;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  transition: transform 0.2s;
  transform: skewX(-5deg);
}

.skew-button:hover {
  transform: skewX(-5deg) scale(1.05);
  /* Maintains skew while scaling */
}

/* Skewed text label */
.label {
  display: inline-block;
  padding: 4px 12px;
  background: #e74c3c;
  color: white;
  border-radius: 3px;
  transform: skewX(-15deg);
  font-weight: bold;
  /* Creates italic label effect */
}

/* Skew animation */
@keyframes skew-animation {
  0% { transform: skewX(0deg); }
  50% { transform: skewX(10deg); }
  100% { transform: skewX(0deg); }
}

.skew-animate {
  animation: skew-animation 3s infinite ease-in-out;
  /* Continuous skew animation */
}

/* Combining skew with translateX for shearing */
.shear-effect {
  transform: skewX(20deg) translateX(20px);
  /* Shearing/perspective effect */
}
Skew with other transforms

CSS
/* Transform origin affects skew pivot point */
.skew-origin {
  transform-origin: left center;
  transform: skew(30deg);
  /* Skews from left edge instead of center */
}

/* Skew + Rotate combination */
.skew-rotate {
  transform: skew(15deg) rotate(45deg);
  /* First skews, then rotates */
}

/* Order matters in transforms */
.transform-order-1 {
  transform: skew(20deg) scale(1.2);
  /* Skew first, then scale */
}

.transform-order-2 {
  transform: scale(1.2) skew(20deg);
  /* Scale first, then skew (different result!) */
}

/* Skew with 3D perspective */
.with-3d {
  perspective: 1000px;
}

.skew-3d {
  transform: skew(20deg) rotateY(30deg);
  /* Combines skew with 3D rotation */
}

/* Skew animation with bounce */
@keyframes skew-bounce {
  0%, 100% { transform: skew(0deg); }
  50% { transform: skew(25deg); }
}

.skew-bounce {
  animation: skew-bounce 1s ease-in-out infinite;
}

/* Negative skew for counter effect */
.parent {
  transform: skew(20deg);
}

.child {
  transform: skew(-20deg);
  /* Counteracts parent skew */
}
Performance considerations

CSS
/* Skew is GPU-accelerated (performant) */
.hardware-accelerated {
  transform: skew(20deg);
  /* Uses GPU, smooth animation */
}

/* Avoid excessive skew values */
.extreme-skew {
  transform: skew(85deg);
  /* Very distorted, may look bad */
}

/* Use will-change for animated skew */
.animated-skew {
  will-change: transform;
  animation: skew-animation 2s infinite;
}

/* Skew on large elements can impact readability */
.skewed-text-block {
  transform: skewX(20deg);
  /* Can distort text legibility */
}

/* Better: use skew on decorative elements only */
.decoration {
  width: 200px;
  height: 200px;
  background: linear-gradient(45deg, #667eea, #764ba2);
  transform: skew(30deg);
  /* Decorative, not critical content */
}

/* Combine with readability fixes */
.skewed-container {
  transform: skew(15deg);
}

.skewed-container p {
  transform: skew(-15deg);
  /* Unrotates text for readability */
}

/* Use transition for smooth skew */
.smooth-skew {
  transition: transform 0.3s cubic-bezier(0.4, 0.0, 0.2, 1);
  transform: skew(0deg);
}

.smooth-skew:hover {
  transform: skew(20deg);
}
Note
`skew()` distorts elements along axes without rotating them. `skewX()` slants horizontally (italic-like effect), `skewY()` slants vertically. Useful for parallelograms, angled dividers, and decorative effects. Remember: skew distorts content, so use sparingly on text. Combine with `transform-origin` to change the pivot point. Order matters when combining with other transforms—`skew(20deg) scale(1.2)` differs from `scale(1.2) skew(20deg)`.
Next
Matrix transforms: [matrix()](/css/matrix).