portfolio-page/src/scss/mixins.scss

77 lines
1.4 KiB
SCSS

@use 'variables' as *;
// Button base mixin
@mixin button-base {
display: inline-flex;
align-items: center;
justify-content: center;
font-weight: 500;
text-decoration: none;
border: none;
cursor: pointer;
transition: all 0.3s ease;
border-radius: $border-radius-sm;
&:focus {
outline: none;
box-shadow: var(--box-shadow-sm);
}
}
// Card hover effect mixin
@mixin card-hover {
transition: all 0.3s ease;
&:hover {
transform: translateY(-2px);
box-shadow: var(--box-shadow-lg);
}
}
// Gradient text mixin
@mixin gradient-text($gradient) {
background: $gradient;
background-clip: text;
-webkit-background-clip: text;
color: transparent;
-webkit-text-fill-color: transparent;
}
// Flex center mixin
@mixin flex-center {
display: flex;
align-items: center;
justify-content: center;
}
// Aspect ratio mixin
@mixin aspect-ratio($ratio: 1) {
aspect-ratio: $ratio;
@supports not (aspect-ratio: 1) {
&::before {
content: '';
float: left;
padding-top: calc(100% / #{$ratio});
}
&::after {
content: '';
display: table;
clear: both;
}
}
}
// Responsive breakpoint mixins
@mixin mobile-only {
@media (max-width: variables.$mobile-breakpoint) {
@content;
}
}
@mixin desktop-only {
@media (min-width: variables.$desktop-breakpoint) {
@content;
}
}