JustalK/PORTFOLIO

View on GitHub
src/assets/less/introduction.less

Summary

Maintainability
Test Coverage
@import (reference) "libs/constants.less";
@import (reference) "libs/mixins.less";
 
.introduction {
opacity: 1;
.transition(opacity 1s ease);
 
&.invisible {
opacity: 0;
}
 
.intro {
position: absolute;
display: block;
width: 100%;
text-align: center;
bottom: 50%;
user-select: none;
opacity: 0;
color: @text-color;
font-family: 'Lato-Light', sans-serif;
.transition(all 2s ease 2s);
 
& span {
display: inline;
 
&.press {
font-size: 16px;
color: @text-color;
position: absolute;
bottom: 43px;
right: 29px;
font-family: 'Lato-Light', sans-serif;
transform: rotateZ(-29deg);
}
}
 
& .jobs {
text-transform: uppercase;
word-spacing: 0.6rem;
.font-size(2.6);
 
&_job:hover {
opacity: 0.125;
}
}
 
& .big {
position: absolute;
bottom: -120px;
width: 250px;
text-transform: uppercase;
line-height: 80px;
color: #009bfa;
cursor: pointer;
transition: color 0.25s ease;
.font-size(3);
 
&::after,
&::before {
content: ' ';
position: absolute;
left: 0;
width: 1px;
height: 0;
background: #61c3ff;
transition: height 0.3s ease 0.3s;
}
 
&::after {
bottom: 50%;
}
 
&::before {
top: 50%;
}
 
& i {
width: 10%;
height: 1px;
background: #61c3ff;
position: absolute;
top: 50%;
 
&::after,
&::before {
content: ' ';
position: absolute;
left: 0;
height: 1px;
width: 0;
background: #61c3ff;
transition: width 0.3s ease 0s;
}
 
&::after {
bottom: -40px;
}
 
&::before {
top: -40px;
}
}
}
 
& .portfolio {
right: calc(50% + 50px);
 
& i {
left: 0;
}
}
 
& .resume {
left: calc(50% + 50px);
 
&::after,
&::before {
left: initial;
right: 0;
}
 
& i {
right: 0;
 
&::after,
&::before {
left: initial;
right: 0;
}
}
}
 
.big.active,
.big:hover {
color: @text-color-white;
 
&::after,
&::before {
transition: height 0.3s ease 0s;
height: 50%;
}
 
& i {
&::after,
&::before {
transition: width 0.3s cubic-bezier(0.18, 0.89, 0.6, 1) 0.3s;
}
 
&::after {
width: 300px;
}
 
&::before {
width: 120px;
}
}
}
 
& .links {
width: 80px;
height: 80px;
position: absolute;
bottom: -120px;
left: 50%;
transform: translateX(-50%) rotateZ(45deg);
 
& a,
& div {
width: 38px;
height: 38px;
display: flex;
justify-content: center;
align-items: center;
background: @background-bloc-0;
position: absolute;
 
& img {
transform: rotateZ(-45deg);
width: 50%;
}
 
&:nth-child(1) {
width: 25px;
height: 25px;
transform: translate3d(6px, 6px, 0) rotateZ(0);
animation: rotation 4s infinite;
 
@keyframes rotation {
from { transform: translate3d(6px, 6px, 0) rotateZ(0); }
to { transform: translate3d(6px, 6px, 0) rotateZ(365deg); }
}
}
 
&:nth-child(2) {
background: @background-bloc-1;
right: 0;
 
& span {
transform: rotateZ(-45deg) translateX(42px) translateY(-18px);
padding-left: 40px;
 
&::after {
right: 20px;
}
}
}
 
&:nth-child(3) {
background: @background-bloc-2;
right: 0;
bottom: 0;
}
 
&:nth-child(4) {
background: @background-bloc-3;
left: 0;
bottom: 0;
 
& img {
filter: brightness(0) invert(1);
}
 
& span {
transform:
rotateZ(
-45deg
) translateX(-22px) translateY(-18px);
padding-right: 40px;
 
&::after {
left: 20px;
}
}
}
}
 
a:hover {
background: @text-color-white;
 
& img {
filter: unset;
}
 
& span {
color: @text-color-white;
}
}
}
 
& .big:hover ~ div > div {
.transition(background 0.35s ease 0.45s);
 
background: white;
}
}
 
.mobile {
display: none;
}
}
 
@keyframes blink-caret {
from,
to { border-color: transparent; }
50% { border-color: @text-color; }
}
 
@media screen and (max-width: @SCREEN_2200) {
.introduction {
.intro {
& .name {
.font-size(15);
}
 
& .jobs {
.font-size(2);
}
 
& .big {
.font-size(2.5);
}
}
}
}
 
@media screen and (max-width: @SCREEN_1800) {
.introduction {
.intro {
& .name {
.font-size(12.5);
}
 
& .jobs {
.font-size(1.7);
}
 
& .big {
.font-size(2);
}
}
}
}
 
@media screen and (max-width: @SCREEN_1600) {
.introduction {
.intro {
& .name {
.font-size(9.5);
}
 
& .jobs {
.font-size(1.4);
}
 
& .big {
bottom: -120px;
}
}
}
}
 
@media screen and (max-width: @SCREEN_1100) {
.introduction {
.intro {
& .name {
.font-size(8);
}
 
& .jobs {
.font-size(1.2);
}
 
& .big {
width: 30%;
}
 
& .portfolio {
right: calc(50% + 55px);
}
 
& .resume {
left: calc(50% + 55px);
}
}
}
}
 
@media screen and (max-width: @TABLET) {
.introduction {
.intro {
& .name {
letter-spacing: 1rem;
word-spacing: 1rem;
.font-size(4);
}
 
& .jobs {
display: none;
}
 
& .big {
width: 30%;
.font-size(1.5);
 
&::before,
&::after,
& i {
display: none;
}
}
 
& .portfolio {
margin-right: 8%;
right: calc(50% + 55px);
}
 
& .resume {
margin-left: 8%;
left: calc(50% + 55px);
}
}
}
}
 
@media screen and (max-width: @MOBILE) {
.introduction {
.intro {
display: none;
}
 
canvas {
display: none;
}
 
.mobile {
position: absolute;
display: block;
width: 100%;
text-align: center;
bottom: 50%;
transform: translateY(50%);
user-select: none;
color: @text-color;
opacity: 0;
font-family: 'Lato-Light', sans-serif;
.transition(all 2s ease 2s);
 
& .name {
text-transform: uppercase;
letter-spacing: 2rem;
word-spacing: 2rem;
margin-left: 2rem;
margin-bottom: 5rem;
text-shadow: 0 0 8px #bddcff;
.font-size(4);
}
 
& ul {
padding: 0;
margin: 0;
 
& .link {
border: 1px solid @text-color-white;
color: #fff;
box-shadow: 0 0 6px white;
list-style-type: none;
text-transform: uppercase;
max-width: 150px;
margin: 20px auto 0;
padding: 10px;
.font-size(1);
}
}
}
}
}
 
.mounted {
.mobile,
.intro {
opacity: 1;
}
}
 
#HOME {
&.invisible {
& .introduction {
opacity: 0;
}
}
}