- Ant Design
- Global Styles
- Design Patterns
- Design Patterns (Research)
- Overview
- Template Document
- Global Rules
- Visualization
- Motion
- Illustrations
Shadow
Shadow originates from the physical phenomenon of reflecting the distance between objects in real life. For the user interface (UI), we often simulate this through element projection to inform the user about the height distance and layer hierarchy between elements.
Shadows are produced by two surfaces at different levels, and the intensity is determined by the distance between them. Therefore, the height of an object directly affects its shadow. The farther an object is from the ground, the larger and blurrier the shadow becomes. We will divide the system into four UI levels: none, low, medium, and high, each distributed across different height levels, with varying shadow properties.
Layer 0: When an object is close to the ground, its shadow overlaps completely with the object itself. In the UI, no shadow value is defined for this layer. For example: input boxes.
Layer 1: When an object appears at the low level, it enters a floating state when manipulated (hovered, clicked, etc). Once the operation is completed or canceled, the hover state feedback disappears, and the object returns to its original level. For example: card hovering.
Layer 2: When an object appears at the medium level, it expands and follows the relationship with the reference layer. The object opens from elements on the ground and moves with the movement of the elements at that level. For example: dropdown panels.
Layer 3: When an object appears at the high level, its movement is independent of other levels. For example: dialog boxes.
The direction of a shadow is determined by the relative position of the light source and the object. Assuming the height of the light source remains constant, the distance between the light source and the object, as well as the distance between the object and the shadow, are directly proportional. The further away the light source, the further away the shadow from the object. In the UI, the direction of shadows is typically represented using the X, Y
coordinates.
As mentioned above, shadows are generated by illumination. The main factors affecting their values are the height of the object and the position of the light source:
At different heights, the shadow's color, blur, and area vary. Objects further from the ground produce lighter shadows with higher blur and larger area, while those closer to the ground create darker shadows with lower blur and smaller area.
The direction of the projection is primarily determined by the relative position of the light source and the object.
In Ant Design, different shadow directions are used in various contexts:
Shadow simulates real-world feedback. To make shadows more realistic, Ant Design adopted a three-layer shadow expression method in version 4.0, making shadows softer and more realistic.
Layer One:
Shadow Type | Shadow Color (rgba) | Direction (X, Y) | Blur | Spread |
---|---|---|---|---|
@shadow-1-up | rgba(0, 0, 0, 0.16) | 0px, -1px | 2px | -2px |
rgba(0, 0, 0, 0.12) | 0px, -3px | 6px | 0px | |
rgba(0, 0, 0, 0.09) | 0px, -5px | 12px | 4px | |
@shadow-1-down | rgba(0, 0, 0, 0.16) | 0px, 1px | 2px | -2px |
rgba(0, 0, 0, 0.12) | 0px, 3px | 6px | 0px | |
rgba(0, 0, 0, 0.09) | 0px, 5px | 12px | 4px | |
@shadow-1-left | rgba(0, 0, 0, 0.16) | -1px, 0px | 2px | -2px |
rgba(0, 0, 0, 0.12) | -3px, 0px | 6px | 0px | |
rgba(0, 0, 0, 0.09) | -5px, 0px | 12px | 4px | |
@shadow-1-right | rgba(0, 0, 0, 0.16) | 1px, 0px | 2px | -2px |
rgba(0, 0, 0, 0.12) | 3px, 0px | 6px | 0px | |
rgba(0, 0, 0, 0.09) | 5px, 0px | 12px | 4px |
Layer Two:
Shadow Type | Shadow Color (rgba) | Direction (X, Y) | Blur | Spread |
---|---|---|---|---|
@shadow-2-up | rgba(0, 0, 0, 0.12) | 0px, -3px | 6px | -4px |
rgba(0, 0, 0, 0.08) | 0px, -6px | 16px | 0px | |
rgba(0, 0, 0, 0.05) | 0px, -9px | 28px | 8px | |
@shadow-2-down | rgba(0, 0, 0, 0.12) | 0px, 3px | 6px | -4px |
rgba(0, 0, 0, 0.08) | 0px, 6px | 16px | 0px | |
rgba(0, 0, 0, 0.05) | 0px, 9px | 28px | 8px | |
@shadow-2-left | rgba(0, 0, 0, 0.12) | -3px, 0px | 6px | -4px |
rgba(0, 0, 0, 0.08) | -6px, 0px | 16px | 0px | |
rgba(0, 0, 0, 0.05) | -9px, 0px | 28px | 8px | |
@shadow-2-right | rgba(0, 0, 0, 0.12) | 3px, 0px | 6px | -4px |
rgba(0, 0, 0, 0.08) | 6px, 0px | 16px | 0px | |
rgba(0, 0, 0, 0.05) | 9px, 0px | 28px | 8px |
Layer Three:
Shadow Type | Shadow Color (rgba) | Direction (X, Y) | Blur | Spread |
---|---|---|---|---|
@shadow-3-up | rgba(0, 0, 0, 0.08) | 0px, -6px | 16px | -8px |
rgba(0, 0, 0, 0.05) | 0px, -9px | 28px | 0px | |
rgba(0, 0, 0, 0.03) | 0px, -12px | 48px | 16px | |
@shadow-3-down | rgba(0, 0, 0, 0.08) | 0px, 6px | 16px | -8px |
rgba(0, 0, 0, 0.05) | 0px, 9px | 28px | 0px | |
rgba(0, 0, 0, 0.03) | 0px, 12px | 48px | 16px | |
@shadow-3-left | rgba(0, 0, 0, 0.08) | -6px, 0px | 16px | -8px |
rgba(0, 0, 0, 0.05) | -9px, 0px | 28px | 0px | |
rgba(0, 0, 0, 0.03) | -12px, 0px | 48px | 16px | |
@shadow-3-right | rgba(0, 0, 0, 0.08) | 6px, 0px | 16px | -8px |
rgba(0, 0, 0, 0.05) | 9px, 0px | 28px | 0px | |
rgba(0, 0, 0, 0.03) | 12px, 0px | 48px | 16px |