intermediate css 12 min read

CSS Transforms: Rotate, Scale, and More

Learn to manipulate elements with CSS transforms including 2D and 3D effects.

css transform rotate css scale css css 3d

2D Transforms

Translate (Move)

.element {
    transform: translateX(50px);   /* Move right */
    transform: translateY(-20px);  /* Move up */
    transform: translate(50px, -20px);  /* Both */
}

Rotate

.element {
    transform: rotate(45deg);    /* Clockwise */
    transform: rotate(-45deg);   /* Counter-clockwise */
}

Scale

.element {
    transform: scale(1.5);       /* 150% size */
    transform: scaleX(2);        /* Double width */
    transform: scaleY(0.5);      /* Half height */
    transform: scale(1.2, 0.8);  /* Width, height */
}

Skew

.element {
    transform: skewX(15deg);
    transform: skewY(10deg);
    transform: skew(15deg, 10deg);
}

Combining Transforms

.element {
    transform: translateX(50px) rotate(45deg) scale(1.2);
}

Order matters—transforms are applied right to left.

Transform Origin

.element {
    transform-origin: center;      /* Default */
    transform-origin: top left;
    transform-origin: 50% 100%;
    transform-origin: 20px 40px;
}

3D Transforms

Enable 3D Space

.container {
    perspective: 1000px;
}

3D Rotate

.element {
    transform: rotateX(45deg);
    transform: rotateY(45deg);
    transform: rotateZ(45deg);
    transform: rotate3d(1, 1, 0, 45deg);
}

3D Translate

.element {
    transform: translateZ(50px);
    transform: translate3d(50px, 20px, 100px);
}

Flip Card Example

.card-container {
    perspective: 1000px;
}

.card {
    width: 200px;
    height: 300px;
    position: relative;
    transform-style: preserve-3d;
    transition: transform 0.6s;
}

.card:hover {
    transform: rotateY(180deg);
}

.card-front,
.card-back {
    position: absolute;
    width: 100%;
    height: 100%;
    backface-visibility: hidden;
}

.card-back {
    transform: rotateY(180deg);
}

Performance

Transforms are GPU-accelerated and very performant for animations. Prefer transforms over animating properties like top, left, width, or height.

/* Good - uses transform */
.move:hover {
    transform: translateX(100px);
}

/* Avoid - causes reflow */
.move:hover {
    left: 100px;
}

Related Tools

Continue Learning