@buun_group/brutalist-ui
Version:
A brutalist-styled component library
98 lines (84 loc) • 2.23 kB
CSS
/* Aspect Ratio Component - Brutalist Styling */
.container {
--brutal-aspect-ratio-bg: var(--brutal-gray-100, #f3f4f6);
--brutal-aspect-ratio-border: var(--brutal-black, #000000);
--brutal-aspect-ratio-radius: var(--brutal-radius, 4px);
position: relative;
width: 100%;
overflow: hidden;
background-color: var(--brutal-aspect-ratio-bg);
border: 2px solid var(--brutal-aspect-ratio-border);
border-radius: var(--brutal-aspect-ratio-radius);
box-shadow: 4px 4px 0px var(--brutal-aspect-ratio-border);
}
.sizer {
width: 100%;
/* padding-bottom is set inline based on ratio */
}
.content {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
display: flex;
align-items: center;
justify-content: center;
}
/* Direct child image/video handling */
.content > img,
.content > video,
.content > iframe,
.content > svg {
width: 100%;
height: 100%;
display: block;
}
/* Object fit variations */
.container[data-object-fit="contain"] > .content > img,
.container[data-object-fit="contain"] > .content > video {
object-fit: contain;
}
.container[data-object-fit="cover"] > .content > img,
.container[data-object-fit="cover"] > .content > video {
object-fit: cover;
}
.container[data-object-fit="fill"] > .content > img,
.container[data-object-fit="fill"] > .content > video {
object-fit: fill;
}
.container[data-object-fit="none"] > .content > img,
.container[data-object-fit="none"] > .content > video {
object-fit: none;
}
.container[data-object-fit="scale-down"] > .content > img,
.container[data-object-fit="scale-down"] > .content > video {
object-fit: scale-down;
}
/* Dark mode support */
@media (prefers-color-scheme: dark) {
.container {
--brutal-aspect-ratio-bg: var(--brutal-gray-800, #1f2937);
--brutal-aspect-ratio-border: var(--brutal-white, #ffffff);
}
}
/* High contrast mode */
@media (prefers-contrast: high) {
.container {
border-width: 3px;
box-shadow: 5px 5px 0px var(--brutal-aspect-ratio-border);
}
}
/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
.container {
transition: none;
}
}
/* Print styles */
@media print {
.container {
box-shadow: none;
border: 1px solid black;
}
}