From 63c7d91c5e4829e9654398a4d125c6afe7932bb3 Mon Sep 17 00:00:00 2001 From: Eduardo Castillo Date: Tue, 14 Jul 2026 18:32:02 -0400 Subject: [PATCH] task soluiton --- src/index.html | 38 +++- src/styles/_variables.scss | 6 + src/styles/index.css | 348 +++++++++++++++++++++++++++++++++++++ src/styles/index.css.map | 1 + src/styles/index.scss | 78 +++++++++ 5 files changed, 468 insertions(+), 3 deletions(-) create mode 100644 src/styles/_variables.scss create mode 100644 src/styles/index.css create mode 100644 src/styles/index.css.map diff --git a/src/index.html b/src/index.html index c10199d38b..0163e3c229 100644 --- a/src/index.html +++ b/src/index.html @@ -9,10 +9,42 @@ Calendar - -

Calendar

+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/styles/_variables.scss b/src/styles/_variables.scss new file mode 100644 index 0000000000..270ae3eaac --- /dev/null +++ b/src/styles/_variables.scss @@ -0,0 +1,6 @@ +$day-size: 100px; +$day-color: #eee; +$border-color: black; +$gap: 1px; +$columns: 7; +$padding: 10px; diff --git a/src/styles/index.css b/src/styles/index.css new file mode 100644 index 0000000000..a4f58229d9 --- /dev/null +++ b/src/styles/index.css @@ -0,0 +1,348 @@ +/* stylelint-disable no-descending-specificity */ +/* stylelint-disable rule-empty-line-before */ +body { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; + font-family: Arial, sans-serif; + font-size: 30px; +} + +.calendar .calendar__day:nth-child(1)::before { + content: '1'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(2)::before { + content: '2'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(3)::before { + content: '3'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(4)::before { + content: '4'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(5)::before { + content: '5'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(6)::before { + content: '6'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(7)::before { + content: '7'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(8)::before { + content: '8'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(9)::before { + content: '9'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(10)::before { + content: '10'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(11)::before { + content: '11'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(12)::before { + content: '12'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(13)::before { + content: '13'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(14)::before { + content: '14'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(15)::before { + content: '15'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(16)::before { + content: '16'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(17)::before { + content: '17'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(18)::before { + content: '18'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(19)::before { + content: '19'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(20)::before { + content: '20'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(21)::before { + content: '21'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(22)::before { + content: '22'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(23)::before { + content: '23'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(24)::before { + content: '24'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(25)::before { + content: '25'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(26)::before { + content: '26'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(27)::before { + content: '27'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(28)::before { + content: '28'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(29)::before { + content: '29'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(30)::before { + content: '30'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar .calendar__day:nth-child(31)::before { + content: '31'; + font-family: Arial, sans-serif; + font-size: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.calendar { + display: flex; + flex-wrap: wrap; + gap: 1px; + width: 726px; + padding: 10px; + box-sizing: border-box; +} +.calendar--start-day-mon .calendar__day:first-child { + margin-left: calc((100px + 1px) * 0); +} +.calendar--start-day-tue .calendar__day:first-child { + margin-left: calc((100px + 1px) * 1); +} +.calendar--start-day-wed .calendar__day:first-child { + margin-left: calc((100px + 1px) * 2); +} +.calendar--start-day-thu .calendar__day:first-child { + margin-left: calc((100px + 1px) * 3); +} +.calendar--start-day-fri .calendar__day:first-child { + margin-left: calc((100px + 1px) * 4); +} +.calendar--start-day-sat .calendar__day:first-child { + margin-left: calc((100px + 1px) * 5); +} +.calendar--start-day-sun .calendar__day:first-child { + margin-left: calc((100px + 1px) * 6); +} +.calendar--month-length-28 .calendar__day:nth-child(n + 29) { + display: none; +} +.calendar--month-length-29 .calendar__day:nth-child(n + 30) { + display: none; +} +.calendar--month-length-30 .calendar__day:nth-child(n + 31) { + display: none; +} +.calendar--month-length-31 .calendar__day:nth-child(n + 32) { + display: none; +} +.calendar__day { + width: 100px; + height: 100px; + background: #eee; + display: flex; + border: 1px solid black; + position: relative; + box-sizing: border-box; + transition: all 0.5s; +} +.calendar__day:hover { + cursor: pointer; + background: #ffbfcb; + transform: translateY(-20px); +} /*# sourceMappingURL=index.css.map */ diff --git a/src/styles/index.css.map b/src/styles/index.css.map new file mode 100644 index 0000000000..ee9e480fab --- /dev/null +++ b/src/styles/index.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["index.scss","index.css"],"names":[],"mappings":"AAmBA;EACE,aAAA;EACA,sBAAA;EACA,uBAAA;EACA,mBAAA;EACA,aAAA;EACA,SAAA;EACA,8BAAA;EACA,eAAA;AClBF;;ADuBI;EACE,YAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACpBN;ADaI;EACE,YAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACXN;ADII;EACE,YAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACFN;ADLI;EACE,YAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACON;ADdI;EACE,YAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACgBN;ADvBI;EACE,YAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACyBN;ADhCI;EACE,YAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACkCN;ADzCI;EACE,YAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;AC2CN;ADlDI;EACE,YAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACoDN;AD3DI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;AC6DN;ADpEI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACsEN;AD7EI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;AC+EN;ADtFI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACwFN;AD/FI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACiGN;ADxGI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;AC0GN;ADjHI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACmHN;AD1HI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;AC4HN;ADnII;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACqIN;AD5II;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;AC8IN;ADrJI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACuJN;AD9JI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACgKN;ADvKI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACyKN;ADhLI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACkLN;ADzLI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;AC2LN;ADlMI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACoMN;AD3MI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;AC6MN;ADpNI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACsNN;AD7NI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;AC+NN;ADtOI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACwON;AD/OI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;ACiPN;ADxPI;EACE,aAAA;EACA,8BAlBU;EAmBV,eAlBe;EAmBf,kBAAA;EACA,QAAA;EACA,SAAA;EACA,gCAAA;AC0PN;ADnQA;EAaE,aAAA;EACA,eAAA;EACA,QA1CI;EA2CJ,YAAA;EACA,aA1CQ;EA2CR,sBAAA;ACyPF;ADtPI;EACE,oCAAA;ACwPN;ADzPI;EACE,oCAAA;AC2PN;AD5PI;EACE,oCAAA;AC8PN;AD/PI;EACE,oCAAA;ACiQN;ADlQI;EACE,oCAAA;ACoQN;ADrQI;EACE,oCAAA;ACuQN;ADxQI;EACE,oCAAA;AC0QN;ADpQM;EACE,aAAA;ACsQR;ADvQM;EACE,aAAA;ACyQR;AD1QM;EACE,aAAA;AC4QR;AD7QM;EACE,aAAA;AC+QR;AD1QE;EACE,YAjEO;EAkEP,aAlEO;EAmEP,gBAlEQ;EAmER,aAAA;EACA,uBAAA;EACA,kBAAA;EACA,sBAAA;EACA,oBAAA;AC4QJ;AD1QI;EACE,eAAA;EACA,mBAAA;EACA,4BAAA;AC4QN","file":"index.css"} \ No newline at end of file diff --git a/src/styles/index.scss b/src/styles/index.scss index 293d3b1f13..50c5e67a89 100644 --- a/src/styles/index.scss +++ b/src/styles/index.scss @@ -1,3 +1,81 @@ +$day-size: 100px; +$day-color: #eee; +$border-color: black; +$gap: 1px; +$columns: 7; +$padding: 10px; +$days: ( + mon: 0, + tue: 1, + wed: 2, + thu: 3, + fri: 4, + sat: 5, + sun: 6, +); +$month-length: (28, 29, 30, 31); +$calendar-font: Arial, sans-serif; +$calendar-font-size: 30px; + body { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100vh; margin: 0; + font-family: Arial, sans-serif; + font-size: 30px; +} + +.calendar { + @for $i from 1 through 31 { + .calendar__day:nth-child(#{$i})::before { + content: '#{$i}'; + font-family: $calendar-font; + font-size: $calendar-font-size; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + } + + display: flex; + flex-wrap: wrap; + gap: $gap; + width: calc($day-size * $columns + $gap * ($columns - 1) + $padding * 2); + padding: $padding; + box-sizing: border-box; + + @each $day, $index in $days { + &--start-day-#{$day} .calendar__day:first-child { + margin-left: calc((#{$day-size} + #{$gap}) * #{$index}); + } + } + + @for $i from 28 through 31 { + &--month-length-#{$i} { + .calendar__day:nth-child(n + #{$i + 1}) { + display: none; + } + } + } + + &__day { + width: $day-size; + height: $day-size; + background: $day-color; + display: flex; + border: 1px solid $border-color; + position: relative; + box-sizing: border-box; + transition: all 0.5s; + + &:hover { + cursor: pointer; + background: #ffbfcb; + transform: translateY(-20px); + } + } }