Dinasour Park Landing Page using HTML, CSS and JavaScript - Coding Torque

Dinasour Park Landing Page using HTML, CSS and JavaScript - Coding Torque

Dinasour Park

Hello Guys! Welcome to Coding Torque. In this blog, I'm going to explain to you how to make a Dinasour Park Landing Page using HTML, CSS and JavaScript. You can use this effect on your website/portfolio to showcase any skills/features. This will be a step-by-step guide. Let's get started 🚀.

Let's go step by step:

Step 1: HTML Code

<header data-header class="page-header">
	<nav>
		<ul class="nav__list">
			<li class="nav__item">
				<a> href="/">Our mission</a>
			</li>
			<li class="nav__item">
				<a> href="/">Get in touch</a>
			</li>
			<li class="nav__item nav__item--cta">
				<a> href="/">Book now</a>
			</li>
		</ul>
	</nav>
</header>

<main>
	<section class="section hero">
		<div> class="hero__bg">
			<img
				class="hero__img"
				srcset="
					https://s3-us-west-2.amazonaws.com/s.cdpn.io/85648/hero_2000.jpg 2000w,
					https://s3-us-west-2.amazonaws.com/s.cdpn.io/85648/hero_1200.jpg 1200w,
					https://s3-us-west-2.amazonaws.com/s.cdpn.io/85648/hero_800.jpg 800w
				"
				src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/85648/hero_1200.jpg"
				alt="Rainforest view with sunset"
			/>
		</div>
		<div
			class="hero__content"
			data-content
		>
			<div class="hero__text">
				<img class="hero__footprint" src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/85648/footprint_01a.svg" alt="Dinosaur footprint">
				<h1> class="hero__title">Dinosaur<br />Park</h1>
				<p> class="hero__intro">Get ready for the ultimate adventure</p>
			</div>
		</div>
	</section>

	<section class="section gentle-giants">
		<header class="section__header">
			<h3> class="section__title">Explore & Discover</h3>
		</header>
		<div
			class="section__content section__content--gentle-giants"
			data-content
		>
			<img class="section__img" src='https://s3-us-west-2.amazonaws.com/s.cdpn.io/85648/parasaurolophus.svg' alt='Parasaurolophus'>
			<h2> class="section__main-title section__main-title--left">
				Gentle Giants
			</h2>
			<div class="section__intro gentle-giants__intro">
				<p>
					Go on safari and explore the world of our giant herbiverous
					dinosaurs – the largest animals to have ever lived.
				</p>
				<p><a> href="">Find out more</a></p>
			</div>
		</div>
	</section>

	<section class="section carnivore-kingdom">
		<header class="section__header">
			<h3> class="section__title">Experience Adventures</h3>
		</header>
		<div
			class="section__content"
			data-content
		>
			<img class="section__img section__img--left" src='https://s3-us-west-2.amazonaws.com/s.cdpn.io/85648/trex.svg' alt='T-rex'>
			<h2> class="section__main-title section__main-title--right">Carnivore Kingdom</h2>
			<div class="section__intro carnivore-kingdom__intro">
				<p>
					Prepare to be terrified...walk among the largest, fiercest predators to ever have walked the earth.
				</p>
				<p><a> href="">Find out more</a></p>
			</div>
		</div>
	</section>

	<section class="section aerial-adventure">
		<header class="section__header">
			<h3> class="section__title">Learn & Connect</h3>
		</header>
		<div
			class="section__content"
			data-content
		>
			<img class="section__img" src='https://s3-us-west-2.amazonaws.com/s.cdpn.io/85648/pterodactyl.svg' alt='Pterodactyl'>
			<h2> class="section__main-title section__main-title--left">Aerial Adventure</h2>
			<div> class="section__intro aerial-adventure__intro">
				<p>
					Get a birds’ eye view of the most magnificent aerial predators!
				</p>
			</div>
		</div>
	</section>
</main>


Step 2: CSS(SCSS) Code


@import url('https://fonts.googleapis.com/css?family=Anton|Overpass+Mono:600&display=swap');

/* Variables */
$sm: 40em;
$md: 60em;
$sm-h: 30em;

$font-heading: "Anton", sans-serif;
$font-body: "Overpass Mono", monospace;

$primary: #ffa700;

/* Mixins and functions */
@function rem($size) {
    $remSize: $size / 16px;
    @return #{$remSize}rem;
}

/* Reset */
* {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: Helvetica, sans-serif;
}

img {
    max-width: 100%;
    display: block;
    width: 100%;
    height: auto;
}

ul {
    list-style: none;
    margin: 0;
    padding: 0;
}

/* Typography */
body {
    font-family: $font-body;
}

h1,
h2,
h3 {
    font-family: $font-heading;
    font-weight: 400;
    text-transform: uppercase;
    line-height: 1;
}

h1 {
    font-size: rem(48px);

    @media (min-width: $sm) {
        font-size: rem(80px);
    }

    @media (min-width: $md) {
        font-size: rem(110px);
    }
}

h2 {
    font-size: rem(30px);
    letter-spacing: 0.03em;
    margin: 0;

    @media (min-width: $sm) {
        font-size: rem(60px);
    }

    @media (min-width: $md) {
        font-size: rem(88px);
    }
}

a {
    color: inherit;
}

/* Header */
.page-header {
    position: fixed;
    z-index: 2;
    width: 100%;
}

/* Scroll behaviour */
main {
    @media (min-height: $sm-h) {
        scroll-snap-type: y mandatory;
        height: 100vh;
        overflow-y: scroll;
    }
}

/* Nav */
.nav__list {
    display: flex;
    height: rem(80px);
    align-items: center;
    justify-content: flex-end;
    padding: rem(10px) rem(20px);
}

.nav__item {
    a {
        color: white;
        display: block;
        text-decoration: none;
        padding: rem(12px) rem(20px);

        &:hover,
        &:focus {
            text-decoration: underline;
        }
    }
}

.nav__item--cta {
    margin-left: rem(20px);

    a {
        font-family: $font-heading;
        font-size: rem(20px);
        text-transform: uppercase;
        line-height: 1;
        color: black;
        background: $primary;
        border-radius: rem(6px);
        min-width: rem(180px);
        text-align: center;

        &:hover,
        &:focus {
            text-decoration: none;
            background-color: darken($primary, 15%);
        }
    }
}

/* Sections */
.section {
    color: white;
    position: relative;
    scroll-snap-align: center;
    display: flex;
    flex-direction: column;
    min-height: 100vh;

    @media (min-height: $sm-h) {
        height: 100vh;
    }

    a {
        text-decoration: underline;
        color: white;

        &:hover,
        &:focus {
            opacity: 0.7;
        }
    }
}

.section__header {
    display: none;
    position: sticky;
    top: 0;
    left: 0;
    padding: rem(20px);
    color: #6b6a67;
    height: rem(80px);
    flex: 0 0 auto;
    z-index: 2;
    align-items: center;
    width: 300px;
    clip-path: polygon(0 0, 100% 0, 80% 100%, 0 100%);
    background-color: black;

    @media (min-width: $md) {
        display: flex;
    }
}

.section__title {
    margin: 0;
    font-size: rem(22px);
    letter-spacing: 0.03rem;
}

.section__content {
    --pad: #{rem(20px)};
    padding: var(--pad);
    flex-grow: 1;
    display: flex;
    flex-wrap: wrap;
    align-content: center;
    justify-content: center;
    position: relative;
    z-index: 1;

    @media (min-width: $md) {
        --pad: #{rem(40px)};
        display: grid;
        grid-template-columns: 4fr 3fr 1fr 4fr 2fr 2fr 4fr 1fr 3fr 4fr;
        grid-template-rows: minmax(0, 1fr) repeat(6, minmax(rem(40px), auto)) minmax(0,
                1fr);
        gap: rem(20px);
    }

    >* {
        @media (min-height: $sm-h) {
            opacity: 0;
            transform: translate3d(0, 4rem, 0);
            transition: opacity 800ms var(--delay),
                transform 800ms cubic-bezier(0.13, 0.07, 0.26, 0.99) var(--delay);
        }
    }
}

.is-visible {
    .section__content>* {
        opacity: 1;
        transform: translate3d(0, 1rem, 0);
    }

    .section__img {
        opacity: 0.75;
    }
}

.section__main-title {
    width: 100%;
    text-align: center;

    @media (min-width: $md) {
        text-align: left;
    }
}

.section__main-title--left {
    grid-column: 2 / -2;
    grid-row: 4 / 6;
}

.section__main-title--right {
    grid-column: 2 / -2;
    grid-row: 4 / 6;

    @media (min-width: $md) {
        text-align: right;
    }
}

.section__img {
    max-width: rem(300px);
    margin-bottom: rem(30px);
    grid-column: 4 / -1;
    grid-row: 1 / -1;

    @media (min-width: $md) {
        margin-bottom: 0;
        max-width: none;
    }
}

.section__img--left {
    grid-column: 1 / -4;
}

.section__intro {
    text-align: center;
    max-width: 50ch;

    @media (min-width: $md) {
        text-align: left;
    }
}

/* Hero */
.hero {
    max-height: rem(800px);
    position: relative;
    color: #fff;
    background-color: #364b3b;
    overflow: hidden;
}

.hero__img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.hero__content {
    flex-grow: 1;
    display: flex;
    justify-content: center;
    align-items: center;
    padding: rem(20px);
}

.hero__bg {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;

    &::after {
        content: "";
        position: absolute;
        width: 100%;
        height: 100%;
        display: block;
        top: 0;
        left: 0;
        background: radial-gradient(rgba(0, 0, 0, 0.6) 70%, rgba(0, 0, 0, 1));
        opacity: 1;
        transition: opacity 4000ms;
    }
}

.is-visible {
    .hero__bg {
        filter: grayscale(0);

        &::after {
            opacity: 0.6;
        }
    }
}

.hero__text {
    position: relative;
    text-align: center;
    display: flex;
    justify-content: center;
    align-items: center;
    flex-wrap: wrap;
    text-shadow: 0 0.1em rem(15px) rgba(0, 0, 0, 0.25);
}

.hero__title {
    margin-bottom: 0;
    width: 100%;
    z-index: 1;
}

.hero__intro {
    width: 100%;
    z-index: 1;

    @media (min-width: $md) {
        font-size: rem(22px);
    }
}

.hero__footprint {
    opacity: 0.7;
    position: absolute;
    width: 150%;
    height: 150%;
    object-fit: contain;
    object-position: cneter;
}

.gentle-giants {
    background-color: rgba(43, 138, 130, 0.8);
}

.gentle-giants__intro {
    grid-column: 3 / 6;
    grid-row: 6 / 8;
}

.gentle-giants__img {
    grid-column: 4 / -1;
    grid-row: 1 / -1;
}

.carnivore-kingdom__intro {
    grid-column: -6 / -3;
    grid-row: 6 / 8;
}

.aerial-adventure {
    background-color: rgba(138, 43, 68, 0.8);
}

.aerial-adventure__intro {
    grid-column: 3 / 6;
    grid-row: 6 / 8;
}


Output Till Now

Dinasour Park Landing Page using HTML, CSS and JavaScript - Coding Torque

Step 3: JavaScript Code

const sections = [...document.querySelectorAll("section")];

let options = {
    rootMargin: "0px",
    threshold: 0.75
};

const callback = (entries, observer) => {
    entries.forEach(entry => {
        const { target } = entry;
        
        if (entry.intersectionRatio >= 0.75) {
            target.classList.add("is-visible");
        } else {
            target.classList.remove("is-visible");
        }
    });
};

const observer = new IntersectionObserver(callback, options);

sections.forEach((section, index) => {
    const sectionChildren = [...section.querySelector("[data-content]").children];

    sectionChildren.forEach((el, index) => {
    el.style.setProperty("--delay", `${index * 250}ms`);
    });

    observer.observe(section);
});

Final Output



Code Credits: @michellebarker

Written by: Piyush Patil

If you want me to code any project or post any specific post, feel free to DM me at IG @code.scientist or @codingtorque

If you have any doubt or any project ideas feel free to Contact Us 

Hope you find this post helpful💖 
 

 Follow us on Instagram for more projects like this👨‍💻 

Post a Comment

Previous Post Next Post