├── README.md ├── assets ├── css │ └── styles.css ├── img │ ├── about.png │ ├── card1.png │ ├── card2.png │ ├── card3.png │ ├── card4.png │ ├── favicon.png │ ├── home.png │ ├── product1.png │ ├── product2.png │ ├── product3.png │ ├── product4.png │ ├── product5.png │ └── product6.png ├── js │ ├── main.js │ └── scrollreveal.min.js └── scss │ ├── base │ └── _base.scss │ ├── components │ ├── _about.scss │ ├── _breakpoints.scss │ ├── _buttons.scss │ ├── _contact.scss │ ├── _footer.scss │ ├── _header.scss │ ├── _home.scss │ ├── _products.scss │ ├── _questions.scss │ ├── _scroll.scss │ └── _steps.scss │ ├── config │ └── _variables.scss │ ├── layout │ └── _layout.scss │ ├── styles.scss │ └── theme │ └── _theme.scss ├── index.html └── preview.png /README.md: -------------------------------------------------------------------------------- 1 | # Responsive Plants Website 🎍 2 | ## [Watch it on youtube](https://youtu.be/lpzExNZDizI) 3 | ### Responsive Plants Website 🎍 4 | 5 | - Responsive Plants Website Using HTML, CSS and JavaScript. 6 | - Contains animations when scrolling. 7 | - Includes a dark and light mode. 8 | - Developed first with the Mobile First methodology, then for desktop. 9 | - Compatible with all mobile devices and with a beautiful and pleasant user interface. 10 | 11 | Join the channel to see more videos like this. [Bedimcode](https://www.youtube.com/c/Bedimcode) 12 | 13 | ![plants website](/preview.png) 14 | -------------------------------------------------------------------------------- /assets/css/styles.css: -------------------------------------------------------------------------------- 1 | /*=============== GOOGLE FONTS ===============*/ 2 | @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap'); 3 | 4 | /*=============== VARIABLES CSS ===============*/ 5 | :root { 6 | --header-height: 3.5rem; /*56px*/ 7 | 8 | /*========== Colors ==========*/ 9 | /*Color mode HSL(hue, saturation, lightness)*/ 10 | --hue: 152; 11 | --first-color: hsl(var(--hue), 24%, 32%); 12 | --first-color-alt: hsl(var(--hue), 24%, 28%); 13 | --first-color-light: hsl(var(--hue), 24%, 66%); 14 | --first-color-lighten: hsl(var(--hue), 24%, 92%); 15 | --title-color: hsl(var(--hue), 4%, 15%); 16 | --text-color: hsl(var(--hue), 4%, 35%); 17 | --text-color-light: hsl(var(--hue), 4%, 55%); 18 | --body-color: hsl(var(--hue), 0%, 100%); 19 | --container-color: #FFF; 20 | 21 | /*========== Font and typography ==========*/ 22 | /*.5rem = 8px | 1rem = 16px ...*/ 23 | --body-font: 'Poppins', sans-serif; 24 | --big-font-size: 2rem; 25 | --h1-font-size: 1.5rem; 26 | --h2-font-size: 1.25rem; 27 | --h3-font-size: 1rem; 28 | --normal-font-size: .938rem; 29 | --small-font-size: .813rem; 30 | --smaller-font-size: .75rem; 31 | 32 | /*========== Font weight ==========*/ 33 | --font-medium: 500; 34 | --font-semi-bold: 600; 35 | 36 | /*========== Margenes Bottom ==========*/ 37 | /*.5rem = 8px | 1rem = 16px ...*/ 38 | --mb-0-5: .5rem; 39 | --mb-0-75: .75rem; 40 | --mb-1: 1rem; 41 | --mb-1-5: 1.5rem; 42 | --mb-2: 2rem; 43 | --mb-2-5: 2.5rem; 44 | 45 | /*========== z index ==========*/ 46 | --z-tooltip: 10; 47 | --z-fixed: 100; 48 | } 49 | 50 | /* Responsive typography */ 51 | @media screen and (min-width: 968px) { 52 | :root { 53 | --big-font-size: 3.5rem; 54 | --h1-font-size: 2.25rem; 55 | --h2-font-size: 1.5rem; 56 | --h3-font-size: 1.25rem; 57 | --normal-font-size: 1rem; 58 | --small-font-size: .875rem; 59 | --smaller-font-size: .813rem; 60 | } 61 | } 62 | 63 | /*=============== BASE ===============*/ 64 | *{ 65 | box-sizing: border-box; 66 | padding: 0; 67 | margin: 0; 68 | } 69 | 70 | html{ 71 | scroll-behavior: smooth; 72 | } 73 | 74 | body, 75 | button, 76 | input, 77 | textarea{ 78 | font-family: var(--body-font); 79 | font-size: var(--normal-font-size); 80 | } 81 | 82 | body{ 83 | margin: var(--header-height) 0 0 0; 84 | background-color: var(--body-color); 85 | color: var(--text-color); 86 | transition: .4s; /*For animation dark mode*/ 87 | } 88 | 89 | button{ 90 | cursor: pointer; 91 | border: none; 92 | outline: none; 93 | } 94 | 95 | h1,h2,h3{ 96 | color: var(--title-color); 97 | font-weight: var(--font-semi-bold); 98 | } 99 | 100 | ul{ 101 | list-style: none; 102 | } 103 | 104 | a{ 105 | text-decoration: none; 106 | } 107 | 108 | img{ 109 | max-width: 100%; 110 | height: auto; 111 | } 112 | 113 | /*=============== THEME ===============*/ 114 | /*========== Variables Dark theme ==========*/ 115 | body.dark-theme{ 116 | --first-color-dark: hsl(var(--hue), 8%, 20%); 117 | --title-color: hsl(var(--hue), 4%, 95%); 118 | --text-color: hsl(var(--hue), 4%, 75%); 119 | --body-color: hsl(var(--hue), 8%, 12%); 120 | --container-color: hsl(var(--hue), 8%, 16%); 121 | } 122 | 123 | /*========== Button Dark/Light ==========*/ 124 | .change-theme{ 125 | color: var(--title-color); 126 | font-size: 1.15rem; 127 | cursor: pointer; 128 | } 129 | 130 | .nav__btns{ 131 | display: inline-flex; 132 | align-items: center; 133 | column-gap: 1rem; 134 | } 135 | 136 | /*========== 137 | Color changes in some parts of 138 | the website, in dark theme 139 | ==========*/ 140 | 141 | .dark-theme .steps__bg, 142 | .dark-theme .questions{ 143 | background-color: var(--first-color-dark); 144 | } 145 | 146 | .dark-theme .product__circle, 147 | .dark-theme .footer__subscribe{ 148 | background-color: var(--container-color); 149 | } 150 | 151 | .dark-theme .scroll-header{ 152 | box-shadow: 0 1px 4px hsla(var(--hue), 4%, 4%, .3); 153 | } 154 | 155 | /*=============== REUSABLE CSS CLASSES ===============*/ 156 | .section{ 157 | padding: 5.5rem 0 1rem; 158 | } 159 | 160 | .section__title, 161 | .section__title-center{ 162 | font-size: var(--h2-font-size); 163 | margin-bottom: var(--mb-2); 164 | line-height: 140%; 165 | } 166 | 167 | .section__title-center{ 168 | text-align: center; 169 | } 170 | 171 | .container{ 172 | max-width: 968px; 173 | margin-left: var(--mb-1-5); 174 | margin-right: var(--mb-1-5); 175 | } 176 | 177 | .grid{ 178 | display: grid; 179 | } 180 | 181 | .main{ 182 | overflow: hidden; /*For animation*/ 183 | } 184 | 185 | /*=============== HEADER ===============*/ 186 | .header{ 187 | width: 100%; 188 | background-color: var(--body-color); 189 | position: fixed; 190 | top: 0; 191 | left: 0; 192 | z-index: var(--z-fixed); 193 | transition: .4s; /*For animation dark mode*/ 194 | } 195 | 196 | /*=============== NAV ===============*/ 197 | .nav{ 198 | height: var(--header-height); 199 | display: flex; 200 | justify-content: space-between; 201 | align-items: center; 202 | } 203 | 204 | .nav__logo, 205 | .nav__toggle, 206 | .nav__close{ 207 | color: var(--title-color); 208 | } 209 | 210 | .nav__logo{ 211 | text-transform: uppercase; 212 | font-weight: 700; 213 | letter-spacing: -1px; 214 | display: inline-flex; 215 | align-items: center; 216 | column-gap: .5rem; 217 | transition: .3s; 218 | } 219 | 220 | .nav__logo-icon{ 221 | font-size: 1.15rem; 222 | color: var(--first-color); 223 | } 224 | 225 | .nav__logo:hover{ 226 | color: var(--first-color); 227 | } 228 | 229 | .nav__toggle{ 230 | display: inline-flex; 231 | font-size: 1.25rem; 232 | cursor: pointer; 233 | } 234 | 235 | @media screen and (max-width: 767px){ 236 | .nav__menu{ 237 | position: fixed; 238 | background-color: var(--container-color); 239 | width: 80%; 240 | height: 100%; 241 | top: 0; 242 | right: -100%; 243 | box-shadow: -2px 0 4px hsla(var(--hue), 24%, 15%, .1); 244 | padding: 4rem 0 0 3rem; 245 | border-radius: 1rem 0 0 1rem; 246 | transition: .3s; 247 | z-index: var(--z-fixed); 248 | } 249 | } 250 | 251 | .nav__close{ 252 | font-size: 1.5rem; 253 | position: absolute; 254 | top: 1rem; 255 | right: 1.25rem; 256 | cursor: pointer; 257 | } 258 | 259 | .nav__list{ 260 | display: flex; 261 | flex-direction: column; 262 | row-gap: 1.5rem; 263 | } 264 | 265 | .nav__link{ 266 | color: var(--title-color); 267 | font-weight: var(--font-medium); 268 | transition: .3s; 269 | } 270 | 271 | .nav__link:hover{ 272 | color: var(--first-color); 273 | } 274 | 275 | /* Show menu */ 276 | .show-menu{ 277 | right: 0; 278 | } 279 | 280 | /* Change background header */ 281 | .scroll-header{ 282 | box-shadow: 0 1px 4px hsla(var(--hue), 4%, 15%, .1); 283 | } 284 | 285 | /* Active link */ 286 | .active-link{ 287 | position: relative; 288 | color: var(--first-color); 289 | } 290 | 291 | .active-link::after{ 292 | content: ''; 293 | position: absolute; 294 | bottom: -.5rem; 295 | left: 0; 296 | width: 50%; 297 | height: 2px; 298 | background-color: var(--first-color); 299 | } 300 | 301 | /*=============== HOME ===============*/ 302 | .home{ 303 | padding: 3.5rem 0 2rem; 304 | } 305 | 306 | .home__container{ 307 | position: relative; 308 | row-gap: 2rem; 309 | } 310 | 311 | .home__img{ 312 | width: 200px; 313 | justify-self: center; 314 | } 315 | 316 | .home__title{ 317 | font-size: var(--big-font-size); 318 | line-height: 140%; 319 | margin-bottom: var(--mb-1); 320 | } 321 | 322 | .home__description{ 323 | margin-bottom: var(--mb-2-5); 324 | } 325 | 326 | .home__social{ 327 | position: absolute; 328 | top: 2rem; 329 | right: -1rem; 330 | display: grid; 331 | justify-items: center; 332 | row-gap: 3.5rem; 333 | } 334 | 335 | .home__social-follow{ 336 | font-weight: var(--font-medium); 337 | font-size: var(--smaller-font-size); 338 | color: var(--first-color); 339 | position: relative; 340 | transform: rotate(90deg); 341 | } 342 | 343 | .home__social-follow::after{ 344 | content: ''; 345 | position: absolute; 346 | width: 1rem; 347 | height: 2px; 348 | background-color: var(--first-color); 349 | right: -45%; 350 | top: 50%; 351 | } 352 | 353 | .home__social-links{ 354 | display: inline-flex; 355 | flex-direction: column; 356 | row-gap: .25rem; 357 | } 358 | 359 | .home__social-link{ 360 | font-size: 1rem; 361 | color: var(--first-color); 362 | transition: .3s; 363 | } 364 | 365 | .home__social-link:hover{ 366 | transform: translateX(.25rem); 367 | } 368 | 369 | /*=============== BUTTONS ===============*/ 370 | .button{ 371 | display: inline-block; 372 | background-color: var(--first-color); 373 | color: #FFF; 374 | padding: 1rem 1.75rem; 375 | border-radius: .5rem; 376 | font-weight: var(--font-medium); 377 | transition: .3s; 378 | } 379 | 380 | .button:hover{ 381 | background-color: var(--first-color-alt); 382 | } 383 | 384 | .button__icon{ 385 | transition: .3s; 386 | } 387 | 388 | .button:hover .button__icon{ 389 | transform: translateX(.25rem); 390 | } 391 | 392 | .button--flex{ 393 | display: inline-flex; 394 | align-items: center; 395 | column-gap: .5rem; 396 | } 397 | 398 | .button--link{ 399 | color: var(--first-color); 400 | font-weight: var(--font-medium); 401 | } 402 | 403 | .button--link:hover .button__icon{ 404 | transform: translateX(.25rem); 405 | } 406 | 407 | /*=============== ABOUT ===============*/ 408 | .about__container{ 409 | row-gap: 2rem; 410 | } 411 | 412 | .about__img{ 413 | width: 280px; 414 | justify-self: center; 415 | } 416 | 417 | .about__title{ 418 | margin-bottom: var(--mb-1); 419 | } 420 | 421 | .about__description{ 422 | margin-bottom: var(--mb-2); 423 | } 424 | 425 | .about__details{ 426 | display: grid; 427 | row-gap: 1rem; 428 | margin-bottom: var(--mb-2-5); 429 | } 430 | 431 | .about__details-description{ 432 | display: inline-flex; 433 | column-gap: .5rem; 434 | font-size: var(--small-font-size); 435 | } 436 | 437 | .about__details-icon{ 438 | font-size: 1rem; 439 | color: var(--first-color); 440 | margin-top: .15rem; 441 | } 442 | 443 | /*=============== STEPS ===============*/ 444 | .steps__bg{ 445 | background-color: var(--first-color); 446 | padding: 3rem 2rem 2rem; 447 | border-radius: 1rem; 448 | } 449 | 450 | .steps__container{ 451 | gap: 2rem; 452 | padding-top: 1rem; 453 | } 454 | 455 | .steps__title{ 456 | color: #FFF; 457 | } 458 | 459 | .steps__card{ 460 | background-color: var(--container-color); 461 | padding: 2.5rem 3rem 2rem 1.5rem; 462 | border-radius: 1rem; 463 | } 464 | 465 | .steps__card-number{ 466 | display: inline-block; 467 | background-color: var(--first-color-alt); 468 | color: #FFF; 469 | padding: .5rem .75rem; 470 | border-radius: .25rem; 471 | font-size: var(--h2-font-size); 472 | margin-bottom: var(--mb-1-5); 473 | transition: .3s; 474 | } 475 | 476 | .steps__card-title{ 477 | font-size: var(--h3-font-size); 478 | margin-bottom: var(--mb-0-5); 479 | } 480 | 481 | .steps__card-description{ 482 | font-size: var(--small-font-size); 483 | } 484 | 485 | .steps__card:hover .steps__card-number{ 486 | transform: translateY(-.25rem); 487 | } 488 | 489 | /*=============== PRODUCTS ===============*/ 490 | .product__description{ 491 | text-align: center; 492 | } 493 | 494 | .product__container{ 495 | padding: 3rem 0; 496 | grid-template-columns: repeat(2, 1fr); 497 | gap: 2.5rem 3rem; 498 | } 499 | 500 | .product__card{ 501 | display: grid; 502 | position: relative; 503 | } 504 | 505 | .product__img{ 506 | position: relative; 507 | width: 120px; 508 | justify-self: center; 509 | margin-bottom: var(--mb-0-75); 510 | transition: .3s; 511 | } 512 | 513 | .product__title, 514 | .product__price{ 515 | font-size: var(--small-font-size); 516 | font-weight: var(--font-semi-bold); 517 | color: var(--title-color); 518 | } 519 | 520 | .product__title{ 521 | margin-bottom: .25rem; 522 | } 523 | 524 | .product__button{ 525 | position: absolute; 526 | right: 0; 527 | bottom: 0; 528 | background-color: var(--first-color); 529 | color: #FFF; 530 | padding: .25rem; 531 | border-radius: .35rem; 532 | font-size: 1.15rem; 533 | } 534 | 535 | .product__button:hover{ 536 | background-color: var(--first-color-alt); 537 | } 538 | 539 | .product__circle{ 540 | width: 90px; 541 | height: 90px; 542 | background-color: var(--first-color-lighten); 543 | border-radius: 50%; 544 | position: absolute; 545 | top: 18%; 546 | left: 5%; 547 | } 548 | 549 | .product__card:hover .product__img{ 550 | transform: translateY(-.5rem); 551 | } 552 | 553 | /*=============== QUESTIONS ===============*/ 554 | .questions{ 555 | background-color: var(--first-color-lighten); 556 | } 557 | 558 | .questions__container{ 559 | gap: 1.5rem; 560 | padding: 1.5rem 0; 561 | } 562 | 563 | .questions__group{ 564 | display: grid; 565 | row-gap: 1.5rem; 566 | } 567 | 568 | .questions__item{ 569 | background-color: var(--container-color); 570 | border-radius: .25rem; 571 | } 572 | 573 | .questions__item-title{ 574 | font-size: var(--small-font-size); 575 | font-weight: var(--font-medium); 576 | } 577 | 578 | .questions__icon{ 579 | font-size: 1.25rem; 580 | color: var(--title-color); 581 | } 582 | 583 | .questions__description{ 584 | font-size: var(--smaller-font-size); 585 | padding: 0 1.25rem 1.25rem 2.5rem; 586 | } 587 | 588 | .questions__header{ 589 | display: flex; 590 | align-items: center; 591 | column-gap: .5rem; 592 | padding: .75rem .5rem; 593 | cursor: pointer; 594 | } 595 | 596 | .questions__content{ 597 | overflow: hidden; 598 | height: 0; 599 | } 600 | 601 | .questions__item, 602 | .questions__header, 603 | .questions__item-title, 604 | .questions__icon, 605 | .questions__description, 606 | .questions__content{ 607 | transition: .3s; 608 | } 609 | 610 | .questions__item:hover{ 611 | box-shadow: 0 2px 8px hsla(var(--hue), 4%, 15%, .15); 612 | } 613 | 614 | /*Rotate icon, change color of titles and background*/ 615 | .accordion-open .questions__header, 616 | .accordion-open .questions__content{ 617 | background-color: var(--first-color); 618 | } 619 | 620 | .accordion-open .questions__item-title, 621 | .accordion-open .questions__description, 622 | .accordion-open .questions__icon{ 623 | color: #FFF; 624 | } 625 | 626 | .accordion-open .questions__icon{ 627 | transform: rotate(45deg); 628 | } 629 | 630 | /*=============== CONTACT ===============*/ 631 | .contact__container{ 632 | row-gap: 3.5rem; 633 | } 634 | 635 | .contact__data{ 636 | display: grid; 637 | row-gap: 2rem; 638 | } 639 | 640 | .contact__subtitle{ 641 | font-size: var(--normal-font-size); 642 | font-weight: var(--font-medium); 643 | color: var(--text-color); 644 | margin-bottom: var(--mb-0-5); 645 | } 646 | 647 | .contact__description{ 648 | display: inline-flex; 649 | align-items: center; 650 | column-gap: .5rem; 651 | color: var(--title-color); 652 | font-weight: var(--font-medium); 653 | } 654 | 655 | .contact__icon{ 656 | font-size: 1.25rem; 657 | } 658 | 659 | .contact__inputs{ 660 | display: grid; 661 | row-gap: 2rem; 662 | margin-bottom: var(--mb-2-5); 663 | } 664 | 665 | .contact__content{ 666 | position: relative; 667 | height: 3rem; 668 | border-bottom: 1px solid var(--text-color-light); 669 | } 670 | 671 | .contact__input{ 672 | position: absolute; 673 | top: 0; 674 | left: 0; 675 | width: 100%; 676 | height: 100%; 677 | padding: 1rem 1rem 1rem 0; 678 | background: none; 679 | 680 | color: var(--text-color); 681 | 682 | 683 | border: none; 684 | outline: none; 685 | z-index: 1; 686 | } 687 | 688 | .contact__label{ 689 | position: absolute; 690 | top: .75rem; 691 | width: 100%; 692 | font-size: var(--small-font-size); 693 | color: var(--text-color-light); 694 | transition: .3s; 695 | } 696 | 697 | .contact__area{ 698 | height: 7rem; 699 | } 700 | 701 | .contact__area textarea{ 702 | resize: none; 703 | } 704 | 705 | /*Input focus move up label*/ 706 | .contact__input:focus + .contact__label{ 707 | top: -.75rem; 708 | left: 0; 709 | font-size: var(--smaller-font-size); 710 | z-index: 10; 711 | } 712 | 713 | /*Input focus sticky top label*/ 714 | .contact__input:not(:placeholder-shown).contact__input:not(:focus) + .contact__label{ 715 | top: -.75rem; 716 | font-size: var(--smaller-font-size); 717 | z-index: 10; 718 | } 719 | 720 | /*=============== FOOTER ===============*/ 721 | .footer__container{ 722 | row-gap: 3rem; 723 | } 724 | 725 | .footer__logo{ 726 | display: inline-flex; 727 | align-items: center; 728 | column-gap: .5rem; 729 | color: var(--title-color); 730 | text-transform: uppercase; 731 | font-weight: 700; 732 | letter-spacing: -1px; 733 | margin-bottom: var(--mb-2-5); 734 | transition: .3s; 735 | } 736 | 737 | .footer__logo-icon{ 738 | font-size: 1.15rem; 739 | color: var(--first-color); 740 | } 741 | 742 | .footer__logo:hover{ 743 | color: var(--first-color); 744 | } 745 | 746 | .footer__title{ 747 | font-size: var(--h3-font-size); 748 | margin-bottom: var(--mb-1-5); 749 | } 750 | 751 | .footer__subscribe{ 752 | background-color: var(--first-color-lighten); 753 | padding: .75rem; 754 | display: flex; 755 | justify-content: space-between; 756 | border-radius: .5rem; 757 | } 758 | 759 | .footer__input{ 760 | width: 70%; 761 | padding: 0 .5rem; 762 | background: none; 763 | color: var(--text-color); 764 | border: none; 765 | outline: none; 766 | } 767 | 768 | .footer__button{ 769 | padding: 1rem; 770 | } 771 | 772 | .footer__data{ 773 | display: grid; 774 | row-gap: .75rem; 775 | } 776 | 777 | .footer__information{ 778 | font-size: var(--small-font-size); 779 | } 780 | 781 | .footer__social{ 782 | display: inline-flex; 783 | column-gap: .75rem; 784 | } 785 | 786 | .footer__social-link{ 787 | font-size: 1rem; 788 | color: var(--text-color); 789 | transition: .3s; 790 | } 791 | 792 | .footer__social-link:hover{ 793 | transform: translateY(-.25rem); 794 | } 795 | 796 | .footer__cards{ 797 | display: inline-flex; 798 | align-items: center; 799 | column-gap: .5rem; 800 | } 801 | .footer__card{ 802 | width: 35px; 803 | } 804 | 805 | .footer__copy{ 806 | text-align: center; 807 | font-size: var(--smaller-font-size); 808 | color: var(--text-color-light); 809 | margin: 5rem 0 1rem; 810 | } 811 | 812 | /*=============== SCROLL UP ===============*/ 813 | .scrollup{ 814 | position: fixed; 815 | background-color: var(--first-color); 816 | right: 1rem; 817 | bottom: -30%; 818 | display: inline-flex; 819 | padding: .5rem; 820 | border-radius: .25rem; 821 | z-index: var(--z-tooltip); 822 | opacity: .8; 823 | transition: .4s; 824 | } 825 | 826 | .scrollup__icon{ 827 | font-size: 1rem; 828 | color: #FFF; 829 | } 830 | 831 | .scrollup:hover{ 832 | background-color: var(--first-color-alt); 833 | opacity: 1; 834 | } 835 | 836 | /* Show Scroll Up*/ 837 | .show-scroll{ 838 | bottom: 3rem; 839 | } 840 | 841 | /*=============== SCROLL BAR ===============*/ 842 | ::-webkit-scrollbar{ 843 | width: .6rem; 844 | background: hsl(var(--hue), 4%, 53%); 845 | } 846 | 847 | ::-webkit-scrollbar-thumb{ 848 | background: hsl(var(--hue), 4%, 29%); 849 | border-radius: .5rem; 850 | } 851 | 852 | /*=============== BREAKPOINTS ===============*/ 853 | /* For small devices */ 854 | @media screen and (max-width: 320px){ 855 | .container{ 856 | margin-left: var(--mb-1); 857 | margin-right: var(--mb-1); 858 | } 859 | 860 | .home__img{ 861 | width: 180px; 862 | } 863 | .home__title{ 864 | font-size: var(--h1-font-size); 865 | } 866 | 867 | .steps__bg{ 868 | padding: 2rem 1rem; 869 | } 870 | .steps__card{ 871 | padding: 1.5rem; 872 | } 873 | 874 | .product__container{ 875 | grid-template-columns: .6fr; 876 | justify-content: center; 877 | } 878 | } 879 | 880 | /* For medium devices */ 881 | @media screen and (min-width: 576px){ 882 | .steps__container{ 883 | grid-template-columns: repeat(2, 1fr); 884 | } 885 | 886 | .product__description{ 887 | padding: 0 4rem; 888 | } 889 | .product__container{ 890 | grid-template-columns: repeat(2, 170px); 891 | justify-content: center; 892 | column-gap: 5rem; 893 | } 894 | 895 | .footer__subscribe{ 896 | width: 400px; 897 | } 898 | } 899 | 900 | @media screen and (min-width: 767px){ 901 | body{ 902 | margin: 0; 903 | } 904 | 905 | .nav{ 906 | height: calc(var(--header-height) + 1.5rem); 907 | column-gap: 3rem; 908 | } 909 | .nav__toggle, 910 | .nav__close{ 911 | display: none; 912 | } 913 | .nav__list{ 914 | flex-direction: row; 915 | column-gap: 3rem; 916 | } 917 | .nav__menu{ 918 | margin-left: auto; 919 | } 920 | 921 | .home__container, 922 | .about__container, 923 | .questions__container, 924 | .contact__container, 925 | .footer__container{ 926 | grid-template-columns: repeat(2, 1fr); 927 | } 928 | 929 | .home{ 930 | padding: 10rem 0 5rem; 931 | } 932 | .home__container{ 933 | align-items: center; 934 | } 935 | .home__img{ 936 | width: 280px; 937 | order: 1; 938 | } 939 | .home__social{ 940 | top: 30%; 941 | } 942 | 943 | .questions__container{ 944 | align-items: flex-start; 945 | } 946 | 947 | .footer__container{ 948 | column-gap: 3rem; 949 | } 950 | .footer__subscribe{ 951 | width: initial; 952 | } 953 | } 954 | 955 | /* For large devices */ 956 | @media screen and (min-width: 992px){ 957 | .container{ 958 | margin-left: auto; 959 | margin-right: auto; 960 | } 961 | 962 | .section{ 963 | padding: 8rem 0 1rem; 964 | } 965 | .section__title, 966 | .section__title-center{ 967 | font-size: var(--h1-font-size); 968 | } 969 | 970 | .home{ 971 | padding: 13rem 0 5rem; 972 | } 973 | .home__img{ 974 | width: 350px; 975 | } 976 | .home__description{ 977 | padding-right: 7rem; 978 | } 979 | 980 | .about__img{ 981 | width: 380px; 982 | } 983 | 984 | .steps__container{ 985 | grid-template-columns: repeat(3, 1fr); 986 | } 987 | .steps__bg{ 988 | padding: 3.5rem 2.5rem; 989 | } 990 | .steps__card-title{ 991 | font-size: var(--normal-font-size); 992 | } 993 | 994 | .product__description{ 995 | padding: 0 16rem; 996 | } 997 | .product__container{ 998 | padding: 4rem 0; 999 | grid-template-columns: repeat(3, 185px); 1000 | gap: 4rem 6rem; 1001 | } 1002 | .product__img{ 1003 | width: 160px; 1004 | } 1005 | .product__circle{ 1006 | width: 110px; 1007 | height: 110px; 1008 | } 1009 | .product__title, 1010 | .product__price{ 1011 | font-size: var(--normal-font-size); 1012 | } 1013 | 1014 | .questions__container{ 1015 | padding: 1rem 0 4rem; 1016 | } 1017 | .questions__title{ 1018 | text-align: initial; 1019 | } 1020 | .questions__group{ 1021 | row-gap: 2rem; 1022 | } 1023 | .questions__header{ 1024 | padding: 1rem; 1025 | } 1026 | .questions__description{ 1027 | padding: 0 3.5rem 2.25rem 2.75rem; 1028 | } 1029 | 1030 | .footer__logo{ 1031 | font-size: var(--h3-font-size); 1032 | } 1033 | .footer__container{ 1034 | grid-template-columns: 1fr .5fr .5fr .5fr; 1035 | } 1036 | .footer__copy{ 1037 | margin: 7rem 0 2rem; 1038 | } 1039 | } 1040 | 1041 | @media screen and (min-width: 1200px){ 1042 | .home__social{ 1043 | right: -3rem; 1044 | row-gap: 4.5rem; 1045 | } 1046 | .home__social-follow{ 1047 | font-size: var(--small-font-size); 1048 | } 1049 | .home__social-follow::after{ 1050 | width: 1.5rem; 1051 | right: -60%; 1052 | } 1053 | .home__social-link{ 1054 | font-size: 1.15rem; 1055 | } 1056 | 1057 | .about__container{ 1058 | column-gap: 7rem; 1059 | } 1060 | 1061 | .scrollup{ 1062 | right: 3rem; 1063 | } 1064 | } -------------------------------------------------------------------------------- /assets/img/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/about.png -------------------------------------------------------------------------------- /assets/img/card1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/card1.png -------------------------------------------------------------------------------- /assets/img/card2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/card2.png -------------------------------------------------------------------------------- /assets/img/card3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/card3.png -------------------------------------------------------------------------------- /assets/img/card4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/card4.png -------------------------------------------------------------------------------- /assets/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/favicon.png -------------------------------------------------------------------------------- /assets/img/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/home.png -------------------------------------------------------------------------------- /assets/img/product1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/product1.png -------------------------------------------------------------------------------- /assets/img/product2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/product2.png -------------------------------------------------------------------------------- /assets/img/product3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/product3.png -------------------------------------------------------------------------------- /assets/img/product4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/product4.png -------------------------------------------------------------------------------- /assets/img/product5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/product5.png -------------------------------------------------------------------------------- /assets/img/product6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/assets/img/product6.png -------------------------------------------------------------------------------- /assets/js/main.js: -------------------------------------------------------------------------------- 1 | /*=============== SHOW MENU ===============*/ 2 | const navMenu = document.getElementById('nav-menu'), 3 | navToggle = document.getElementById('nav-toggle'), 4 | navClose = document.getElementById('nav-close') 5 | 6 | /*===== MENU SHOW =====*/ 7 | /* Validate if constant exists */ 8 | if(navToggle){ 9 | navToggle.addEventListener('click', () =>{ 10 | navMenu.classList.add('show-menu') 11 | }) 12 | } 13 | 14 | /*===== MENU HIDDEN =====*/ 15 | /* Validate if constant exists */ 16 | if(navClose){ 17 | navClose.addEventListener('click', () =>{ 18 | navMenu.classList.remove('show-menu') 19 | }) 20 | } 21 | 22 | /*=============== REMOVE MENU MOBILE ===============*/ 23 | const navLink = document.querySelectorAll('.nav__link') 24 | 25 | function linkAction(){ 26 | const navMenu = document.getElementById('nav-menu') 27 | // When we click on each nav__link, we remove the show-menu class 28 | navMenu.classList.remove('show-menu') 29 | } 30 | navLink.forEach(n => n.addEventListener('click', linkAction)) 31 | 32 | /*=============== CHANGE BACKGROUND HEADER ===============*/ 33 | function scrollHeader(){ 34 | const header = document.getElementById('header') 35 | // When the scroll is greater than 80 viewport height, add the scroll-header class to the header tag 36 | if(this.scrollY >= 80) header.classList.add('scroll-header'); else header.classList.remove('scroll-header') 37 | } 38 | window.addEventListener('scroll', scrollHeader) 39 | 40 | /*=============== QUESTIONS ACCORDION ===============*/ 41 | const accordionItems = document.querySelectorAll('.questions__item') 42 | 43 | accordionItems.forEach((item) =>{ 44 | const accordionHeader = item.querySelector('.questions__header') 45 | 46 | accordionHeader.addEventListener('click', () =>{ 47 | const openItem = document.querySelector('.accordion-open') 48 | 49 | toggleItem(item) 50 | 51 | if(openItem && openItem!== item){ 52 | toggleItem(openItem) 53 | } 54 | }) 55 | }) 56 | 57 | const toggleItem = (item) =>{ 58 | const accordionContent = item.querySelector('.questions__content') 59 | 60 | if(item.classList.contains('accordion-open')){ 61 | accordionContent.removeAttribute('style') 62 | item.classList.remove('accordion-open') 63 | }else{ 64 | accordionContent.style.height = accordionContent.scrollHeight + 'px' 65 | item.classList.add('accordion-open') 66 | } 67 | 68 | } 69 | 70 | /*=============== SCROLL SECTIONS ACTIVE LINK ===============*/ 71 | const sections = document.querySelectorAll('section[id]') 72 | 73 | function scrollActive(){ 74 | const scrollY = window.pageYOffset 75 | 76 | sections.forEach(current =>{ 77 | const sectionHeight = current.offsetHeight, 78 | sectionTop = current.offsetTop - 58, 79 | sectionId = current.getAttribute('id') 80 | 81 | if(scrollY > sectionTop && scrollY <= sectionTop + sectionHeight){ 82 | document.querySelector('.nav__menu a[href*=' + sectionId + ']').classList.add('active-link') 83 | }else{ 84 | document.querySelector('.nav__menu a[href*=' + sectionId + ']').classList.remove('active-link') 85 | } 86 | }) 87 | } 88 | window.addEventListener('scroll', scrollActive) 89 | 90 | /*=============== SHOW SCROLL UP ===============*/ 91 | function scrollUp(){ 92 | const scrollUp = document.getElementById('scroll-up'); 93 | // When the scroll is higher than 400 viewport height, add the show-scroll class to the a tag with the scroll-top class 94 | if(this.scrollY >= 400) scrollUp.classList.add('show-scroll'); else scrollUp.classList.remove('show-scroll') 95 | } 96 | window.addEventListener('scroll', scrollUp) 97 | 98 | /*=============== DARK LIGHT THEME ===============*/ 99 | const themeButton = document.getElementById('theme-button') 100 | const darkTheme = 'dark-theme' 101 | const iconTheme = 'ri-sun-line' 102 | 103 | // Previously selected topic (if user selected) 104 | const selectedTheme = localStorage.getItem('selected-theme') 105 | const selectedIcon = localStorage.getItem('selected-icon') 106 | 107 | // We obtain the current theme that the interface has by validating the dark-theme class 108 | const getCurrentTheme = () => document.body.classList.contains(darkTheme) ? 'dark' : 'light' 109 | const getCurrentIcon = () => themeButton.classList.contains(iconTheme) ? 'ri-moon-line' : 'ri-sun-line' 110 | 111 | // We validate if the user previously chose a topic 112 | if (selectedTheme) { 113 | // If the validation is fulfilled, we ask what the issue was to know if we activated or deactivated the dark 114 | document.body.classList[selectedTheme === 'dark' ? 'add' : 'remove'](darkTheme) 115 | themeButton.classList[selectedIcon === 'ri-moon-line' ? 'add' : 'remove'](iconTheme) 116 | } 117 | 118 | // Activate / deactivate the theme manually with the button 119 | themeButton.addEventListener('click', () => { 120 | // Add or remove the dark / icon theme 121 | document.body.classList.toggle(darkTheme) 122 | themeButton.classList.toggle(iconTheme) 123 | // We save the theme and the current icon that the user chose 124 | localStorage.setItem('selected-theme', getCurrentTheme()) 125 | localStorage.setItem('selected-icon', getCurrentIcon()) 126 | }) 127 | 128 | /*=============== SCROLL REVEAL ANIMATION ===============*/ 129 | const sr = ScrollReveal({ 130 | origin: 'top', 131 | distance: '60px', 132 | duration: 2500, 133 | delay: 400, 134 | // reset: true 135 | }) 136 | 137 | sr.reveal(`.home__data`) 138 | sr.reveal(`.home__img`, {delay: 500}) 139 | sr.reveal(`.home__social`, {delay: 600}) 140 | sr.reveal(`.about__img, .contact__box`,{origin: 'left'}) 141 | sr.reveal(`.about__data, .contact__form`,{origin: 'right'}) 142 | sr.reveal(`.steps__card, .product__card, .questions__group, .footer`,{interval: 100}) -------------------------------------------------------------------------------- /assets/js/scrollreveal.min.js: -------------------------------------------------------------------------------- 1 | /*! @license ScrollReveal v4.0.9 2 | 3 | Copyright 2021 Fisssion LLC. 4 | 5 | Licensed under the GNU General Public License 3.0 for 6 | compatible open source projects and non-commercial use. 7 | 8 | For commercial sites, themes, projects, and applications, 9 | keep your source code private/proprietary by purchasing 10 | a commercial license from https://scrollrevealjs.org/ 11 | */ 12 | var ScrollReveal=function(){"use strict";var r={delay:0,distance:"0",duration:600,easing:"cubic-bezier(0.5, 0, 0, 1)",interval:0,opacity:0,origin:"bottom",rotate:{x:0,y:0,z:0},scale:1,cleanup:!1,container:document.documentElement,desktop:!0,mobile:!0,reset:!1,useDelay:"always",viewFactor:0,viewOffset:{top:0,right:0,bottom:0,left:0},afterReset:function(){},afterReveal:function(){},beforeReset:function(){},beforeReveal:function(){}};var n={success:function(){document.documentElement.classList.add("sr"),document.body?document.body.style.height="100%":document.addEventListener("DOMContentLoaded",function(){document.body.style.height="100%"})},failure:function(){return document.documentElement.classList.remove("sr"),{clean:function(){},destroy:function(){},reveal:function(){},sync:function(){},get noop(){return!0}}}};function o(e){return"object"==typeof window.Node?e instanceof window.Node:null!==e&&"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName}function u(e,t){if(void 0===t&&(t=document),e instanceof Array)return e.filter(o);if(o(e))return[e];if(n=e,i=Object.prototype.toString.call(n),"object"==typeof window.NodeList?n instanceof window.NodeList:null!==n&&"object"==typeof n&&"number"==typeof n.length&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(i)&&(0===n.length||o(n[0])))return Array.prototype.slice.call(e);var n,i;if("string"==typeof e)try{var r=t.querySelectorAll(e);return Array.prototype.slice.call(r)}catch(e){return[]}return[]}function s(e){return null!==e&&e instanceof Object&&(e.constructor===Object||"[object Object]"===Object.prototype.toString.call(e))}function f(n,i){if(s(n))return Object.keys(n).forEach(function(e){return i(n[e],e,n)});if(n instanceof Array)return n.forEach(function(e,t){return i(e,t,n)});throw new TypeError("Expected either an array or object literal.")}function h(e){for(var t=[],n=arguments.length-1;0=[].concat(r.body).shift())return j.call(this,n,i,-1,t),c.call(this,e,{reveal:!0,pristine:t});if(!n.blocked.foot&&i===[].concat(o.foot).shift()&&i<=[].concat(r.body).pop())return j.call(this,n,i,1,t),c.call(this,e,{reveal:!0,pristine:t})}}function E(e){var t=Math.abs(e);if(isNaN(t))throw new RangeError("Invalid sequence interval.");this.id=b(),this.interval=Math.max(t,16),this.members=[],this.models={},this.blocked={head:!1,foot:!1}}function d(e,i,r){var o=this;this.head=[],this.body=[],this.foot=[],f(e.members,function(e,t){var n=r.elements[e];n&&n[i]&&o.body.push(t)}),this.body.length&&f(e.members,function(e,t){var n=r.elements[e];n&&!n[i]&&(t 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | Responsive plants website - Bedimcode 17 | 18 | 19 | 20 | 60 | 61 |
62 | 63 |
64 |
65 | 66 | 67 |
68 |

69 | Plants will make
your life better 70 |

71 |

72 | Create incredible plant design for your offices or apastaments. 73 | Add fresness to your new ideas. 74 |

75 | 76 | Explore 77 | 78 |
79 | 80 | 95 |
96 |
97 | 98 | 99 |
100 |
101 | 102 | 103 |
104 |

105 | Who we really are &
why choose us 106 |

107 | 108 |

109 | We have over 4000+ unbiased reviews and our customers 110 | trust our plant process and delivery service every time 111 |

112 | 113 |
114 |

115 | 116 | We always deliver on time. 117 |

118 |

119 | 120 | We give you guides to protect and care for your plants. 121 |

122 |

123 | 124 | We always come over for a check-up after sale. 125 |

126 |

127 | 128 | 100% money back guaranteed. 129 |

130 |
131 | 132 | 133 | Shop Now 134 | 135 |
136 |
137 |
138 | 139 | 140 |
141 |
142 |

143 | Steps to start your
plants off right 144 |

145 | 146 |
147 |
148 |
01
149 |

Choose Plant

150 |

151 | We have several varieties plants you can choose from. 152 |

153 |
154 | 155 |
156 |
02
157 |

Place an order

158 |

159 | Once your order is set, we move to the next step which is the shipping. 160 |

161 |
162 | 163 |
164 |
03
165 |

Get plants delivered

166 |

167 | Our delivery process is easy, you receive the plant direct to your door. 168 |

169 |
170 |
171 |
172 |
173 | 174 | 175 |
176 |

177 | Check out our
products 178 |

179 | 180 |

181 | Here are some selected plants from our showroom, all are in excellent 182 | shape and has a long life span. Buy and enjoy best quality. 183 |

184 | 185 |
186 |
187 |
188 | 189 | 190 | 191 |

Cacti Plant

192 | $19.99 193 | 194 | 197 |
198 | 199 |
200 |
201 | 202 | 203 | 204 |

Cactus Plant

205 | $11.99 206 | 207 | 210 |
211 | 212 |
213 |
214 | 215 | 216 | 217 |

Aloe Vera Plant

218 | $7.99 219 | 220 | 223 |
224 | 225 |
226 |
227 | 228 | 229 | 230 |

Succulent Plant

231 | $5.99 232 | 233 | 236 |
237 | 238 |
239 |
240 | 241 | 242 | 243 |

Succulent Plant

244 | $10.99 245 | 246 | 249 |
250 | 251 |
252 |
253 | 254 | 255 | 256 |

Green Plant

257 | $8.99 258 | 259 | 262 |
263 |
264 |
265 | 266 | 267 |
268 |

269 | Some common questions
were often asked 270 |

271 | 272 |
273 |
274 |
275 |
276 | 277 |

278 | My flowers are falling off or dying? 279 |

280 |
281 | 282 |
283 |

284 | Plants are easy way to add color energy and transform your 285 | space but which planet is for you. Choosing the right plant. 286 |

287 |
288 |
289 | 290 |
291 |
292 | 293 |

294 | What causes leaves to become pale? 295 |

296 |
297 | 298 |
299 |

300 | Plants are easy way to add color energy and transform your 301 | space but which planet is for you. Choosing the right plant. 302 |

303 |
304 |
305 | 306 |
307 |
308 | 309 |

310 | What causes brown crispy leaves? 311 |

312 |
313 | 314 |
315 |

316 | Plants are easy way to add color energy and transform your 317 | space but which planet is for you. Choosing the right plant. 318 |

319 |
320 |
321 |
322 | 323 |
324 |
325 |
326 | 327 |

328 | How do i choose a plant? 329 |

330 |
331 | 332 |
333 |

334 | Plants are easy way to add color energy and transform your 335 | space but which planet is for you. Choosing the right plant. 336 |

337 |
338 |
339 | 340 |
341 |
342 | 343 |

344 | How do I change the pots? 345 |

346 |
347 | 348 |
349 |

350 | Plants are easy way to add color energy and transform your 351 | space but which planet is for you. Choosing the right plant. 352 |

353 |
354 |
355 | 356 |
357 |
358 | 359 |

360 | Why are gnats flying around my plant? 361 |

362 |
363 | 364 |
365 |

366 | Plants are easy way to add color energy and transform your 367 | space but which planet is for you. Choosing the right plant. 368 |

369 |
370 |
371 |
372 |
373 |
374 | 375 | 376 |
377 |
378 |
379 |

380 | Reach out to us today
via any of the given
information 381 |

382 | 383 |
384 |
385 |

Call us for instant support

386 | 387 | 388 | +999 888 777 389 | 390 |
391 | 392 |
393 |

Write us by mail

394 | 395 | 396 | user@email.com 397 | 398 |
399 |
400 |
401 | 402 |
403 |
404 |
405 | 406 | 407 |
408 | 409 |
410 | 411 | 412 |
413 | 414 |
415 | 416 | 417 |
418 |
419 | 420 | 424 |
425 |
426 |
427 |
428 | 429 | 430 |
431 | 494 | 495 | 496 |
497 | 498 | 499 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | -------------------------------------------------------------------------------- /preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bedimcode/responsive-plants-website/d92ba83cdab5966072371999729d68f5c44f8cf8/preview.png --------------------------------------------------------------------------------