HTML preprocessors can make writing HTML more powerful or convenient. For instance, Markdown is designed to be easier to write and read for text documents and you could write a loop in Pug.
In CodePen, whatever you write in the HTML editor is what goes within the <body>
tags in a basic HTML5 template. So you don't have access to higher-up elements like the <html>
tag. If you want to add classes there that can affect the whole document, this is the place to do it.
In CodePen, whatever you write in the HTML editor is what goes within the <body>
tags in a basic HTML5 template. If you need things in the <head>
of the document, put that code here.
The resource you are linking to is using the 'http' protocol, which may not work when the browser is using https.
CSS preprocessors help make authoring CSS easier. All of them offer things like variables and mixins to provide convenient abstractions.
It's a common practice to apply CSS to a page that styles elements such that they are consistent across all browsers. We offer two of the most popular choices: normalize.css and a reset. Or, choose Neither and nothing will be applied.
To get the best cross-browser support, it is a common practice to apply vendor prefixes to CSS properties and values that require them to work. For instance -webkit-
or -moz-
.
We offer two popular choices: Autoprefixer (which processes your CSS server-side) and -prefix-free (which applies prefixes via a script, client-side).
Any URLs added here will be added as <link>
s in order, and before the CSS in the editor. You can use the CSS from another Pen by using its URL and the proper URL extension.
You can apply CSS to your Pen from any stylesheet on the web. Just put a URL to it here and we'll apply it, in the order you have them, before the CSS in the Pen itself.
You can also link to another Pen here (use the .css
URL Extension) and we'll pull the CSS from that Pen and include it. If it's using a matching preprocessor, use the appropriate URL Extension and we'll combine the code before preprocessing, so you can use the linked Pen as a true dependency.
JavaScript preprocessors can help make authoring JavaScript easier and more convenient.
Babel includes JSX processing.
Any URL's added here will be added as <script>
s in order, and run before the JavaScript in the editor. You can use the URL of any other Pen and it will include the JavaScript from that Pen.
You can apply a script from anywhere on the web to your Pen. Just put a URL to it here and we'll add it, in the order you have them, before the JavaScript in the Pen itself.
If the script you link to has the file extension of a preprocessor, we'll attempt to process it before applying.
You can also link to another Pen here, and we'll pull the JavaScript from that Pen and include it. If it's using a matching preprocessor, we'll combine the code before preprocessing, so you can use the linked Pen as a true dependency.
Search for and use JavaScript packages from npm here. By selecting a package, an import
statement will be added to the top of the JavaScript editor for this package.
Using packages here is powered by esm.sh, which makes packages from npm not only available on a CDN, but prepares them for native JavaScript ESM usage.
All packages are different, so refer to their docs for how they work.
If you're using React / ReactDOM, make sure to turn on Babel for the JSX processing.
If active, Pens will autosave every 30 seconds after being saved once.
If enabled, the preview panel updates automatically as you code. If disabled, use the "Run" button to update.
If enabled, your code will be formatted when you actively save your Pen. Note: your code becomes un-folded during formatting.
Visit your global Editor Settings.
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link
href="https://fonts.googleapis.com/css?family=Lato:100,300,400,700,900"
rel="stylesheet"
/>
<link rel="stylesheet" href="css/icon-font.css" />
<link rel="stylesheet" href="css/icon-font.css" />
<link rel="stylesheet" href="css/style.css" />
<link rel="shortcut icon" type="image/png" href="img/favicon.png" />
<title>Nettflix Bootcamp</title>
<script src="https://code.jquery.com/jquery-3.6.3.js" integrity="sha256-nQLuAZGRRcILA+6dMBOvcRh5Pe310sBpanc6+QBmyVM=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js">
</script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css">
</head>
<body>
<div class="navigation">
<input type="checkbox" class="navigation__checkbox" id="navi-toggle" />
<label for="navi-toggle" class="navigation__button"><span class="navigation__icon"> </span></label>
<div class="navigation__background"> </div>
<nav class="navigation__nav">
<ul class="navigation__list">
<li class="navigation__item">
<a href="#about" class="navigation__link link1">Project1</a>
</li>
<li class="navigation__item">
<a href="#features" class="navigation__link link2">Project2</a>
</li>
<li class="navigation__item">
<a href="#tours" class="navigation__link link3">Project3</a>
</li>
</ul>
</nav>
</div>
<header class="header">
<div class="header__logo-box">
<img src="https://bryan-tineo-portafolio2.netlify.app/images/bryanmax9_icon.png" alt="logo" class="header__logo" />
</div>
<div class="header__text-box">
<h1 class="heading-primary">
<span class="heading-primary--main">Netflix Advanced Bootcamp</span>
<span class="heading-primary--sub">Bryan Tineo</span>
</h1>
</div>
</header>
<main>
<section class="section-about" id="about">
<div class="u-center-text">
<h2 class="heading-secondary u-margin-bottom-big" id="about-sec">
Section About
</h2>
</div>
<div class="row">
<div class="col-1-of-2">
<h3 class="heading-tertiary u-margin-bottom-small">
Description
</h3>
<p class="paragraph">
The 12 Week Advanced Netflix Pathways Bootcamp for Software Engineering (Java) is a comprehensive program designed to enhance the software engineering skills of individuals. The bootcamp focuses on Java programming, covering essential topics such as object-oriented programming, data structures, algorithms, and database design, using real-world projects aligned with Netflix's engineering practices.
</p>
<p class="paragraph">
The highly interactive and immersive curriculum includes lectures, coding sessions, mentorship, and challenging projects, providing participants with hands-on experience and feedback. Suitable for those with prior programming experience, the program results in a deep understanding of Java and its applications, as well as the confidence to tackle complex engineering problems. Upon completion, participants receive a certificate showcasing their expertise and making them highly competitive in the job market.
</p>
<a href="https://github.com/bryanmax9/Bryan_Tineo_AllNetflixChallenges" class="btn-text">Github repository of Netflix Challenges →</a>
</div>
<div class="col-1-of-2">
<div class="composition">
<img
src="https://www.crn.com/resources/027e-1737ab2a5482-5b472a146614-1000/java-logo.jpeg"
alt="Java"
class="composition__photo composition__photo--p1"
/><img
src="https://developers.redhat.com/sites/default/files/styles/article_feature/public/blog/2014/05/homepage-docker-logo.png?itok=zx0e-vcP"
alt="Docker"
class="composition__photo composition__photo--p2"
/><img
src="https://repository-images.githubusercontent.com/259018719/0663e880-8a02-11ea-9c75-44ca9a90cc1f"
alt="Spring-Framework"
class="composition__photo composition__photo--p3"
/>
</div>
</div>
</div>
</section>
<section class="gallery gallery__frame">
<figure class="gallery__item gallery__item--1 ">
<img src="https://i.imgur.com/CVpBrBE.jpeg" alt="Gallery image 1" class="gallery__img ">
</figure>
<figure class="gallery__item gallery__item--2 ">
<img src="https://i.imgur.com/ADDEJ7T.jpeg" alt="Gallery image 2" class="gallery__img">
</figure>
<figure class="gallery__item gallery__item--3">
<img src ="https://i.imgur.com/K7V2qTn.jpeg" class="gallery__img">
</figure>
<figure class="gallery__item gallery__item--4">
<img src="https://i.imgur.com/4GMweKL.jpeg" alt="Gallery image 4" class="gallery__img">
</figure>
<figure class="gallery__item gallery__item--5">
<img src="https://i.imgur.com/AMk9i9c.jpeg" alt="Gallery image 5" class="gallery__img">
</figure>
<figure class="gallery__item gallery__item--6">
<img src="https://i.imgur.com/HxGEnZ6.jpeg" alt="Gallery image 6" class="gallery__img">
</figure>
<figure class="gallery__item gallery__item--7">
<img src="https://i.imgur.com/z2gbsFu.jpeg" alt="Gallery image 7" class="gallery__img">
</figure>
<figure class="gallery__item gallery__item--8">
<img src="https://i.imgur.com/l3cUTtW.jpeg" alt="Gallery image 8" class="gallery__img">
</figure>
<figure class="gallery__item gallery__item--9">
<img src="https://i.imgur.com/XWK2vJ6.jpeg" alt="Gallery image 9" class="gallery__img">
</figure>
<figure class="gallery__item gallery__item--10">
<img src="https://i.imgur.com/XAo6ao2.jpeg" alt="Gallery image 10" class="gallery__img">
</figure>
<figure class="gallery__item gallery__item--11">
<img src="https://i.imgur.com/3yGiBt6.jpeg" alt="Gallery image 11" class="gallery__img">
</figure>
<figure class="gallery__item gallery__item--12">
<img src="https://i.imgur.com/yYiENgF.jpeg" alt="Gallery image 12" class="gallery__img">
</figure>
<figure class="gallery__item gallery__item--13">
<img src="https://i.imgur.com/KniJzML.jpeg" alt="Gallery image 13" class="gallery__img">
</figure>
<figure class="gallery__item gallery__item--14 frame">
<img src="https://i.imgur.com/Al8XIaO.jpeg" alt="Gallery image 14" class="gallery__img">
</figure>
</section>
<section class="section-stories" id="story">
<div class="bg-video">
<video class="bg-video__content" autoplay muted loop>
<source src="https://drive.google.com/uc?export=download&id=1okc_HHf-5lGcIxw7HKsibiGNj1wAMYZw" type="video/mp4" />
<source src="https://drive.google.com/uc?export=download&id=1C6ABdiNjumaKZVO6ytFBn1QNLcmboLPR" type="video/webm" />
Your browser is not supported for this videos!sorry😥
</video>
</div>
<div class="u-center-text">
<h2 class="heading-secondary u-margin-bottom-big">
About Me
</h2>
</div>
<div class="row">
<div class="story">
<figure class="story__shape">
<img
src="https://media.licdn.com/dms/image/D5603AQGuExkmqpb6BQ/profile-displayphoto-shrink_200_200/0/1665378322144?e=1681344000&v=beta&t=aA_aaXMC_CUIhWCx7twMwTZNmpzQqfMm1y73e949FGs"
alt="Bryan Tineo-Developer"
class="story__img"
/>
<figcaption class="story__caption">Bryan</figcaption>
</figure>
<div class="story__text">
<h3 class="heading-tertiary u-margin-bottom-small">
Bryan Tineo
</h3>
<p>
I am a motivated and capable person looking for new opportunities in Web Development, Software Development, and IT support.
</p>
</div>
</div>
</div>
<div class="row">
<div class="story">
<figure class="story__shape">
<img
src="https://bryan-tineo-portafolio2.netlify.app/images/bryanmax9_icon.png"
alt="Acttive Worm"
class="story__img"
/>
<figcaption class="story__caption">Bryan Logo</figcaption>
</figure>
<div class="story__text">
<h3 class="heading-tertiary u-margin-bottom-small">
Active worm
</h3>
<p>
Web and App Developers. We are active learners, learning 24/7. Our Goal is creating Amazing Products.
</p>
</div>
</div>
</div>
<div class="u-center-text u-margin-top-huge">
<a href="https://bryan-tineo-portafolio2.netlify.app/" class="btn-text">Portfolio page →</a>
</div>
</section>
<section class="section-projects" id="projects">
<div class="slider owl-carousel">
<div class="card">
<div class="img"><img src="https://i.ytimg.com/vi/WSaS17CSS4c/maxresdefault.jpg" alt=""></div>
<div class="content">
<div class="title">Magic 8 Ball</div>
<div class="sub-title">Answer Questions</div>
<p>
The original Magic 8 Ball is a toy used for fortune-telling or seeking advice. It has 20 answers, which are revealed by turning it over to see a message through a window.
In the context of an API, a Magic 8 Ball API would allow you to make a request, such as asking a question, and receive a random answer in the form of a text message or code. The response would simulate the experience of using a physical Magic 8 Ball toy.
</p>
<div class="btn">
<a href="#">Go to page</a>
</div>
</div>
</div>
<div class="card">
<div class="img"><img src="https://www.garyfox.co/wp-content/uploads/2019/10/best-top-inspirational-quotes-1024x536.png" alt=""></div>
<div class="content">
<div class="title">Quotes</div>
<div class="sub-title">Random Quotes Generator</div>
<p>
A "Random Quote API" is an application programming interface (API) that provides access to a database of quotes and returns a random quote to the user. Quotes can be from famous personalities, writers, historical figures, or even fictional characters.
</p>
<div class="btn">
<a href="#">Go to page</a>
</div>
</div>
</div>
<div class="card">
<div class="img"><img src="https://i.pinimg.com/originals/6b/84/14/6b84142ef4022b699a3085b3420bad54.jpg" alt=""></div>
<div class="content">
<div class="title">Definition</div>
<div class="sub-title">Random word with definition</div>
<p>
A "Random Word with its Respective Definition API" is an application programming interface (API) that provides access to a database of words and their definitions, and returns a random word with its definition to the user. When a request is made to the API, it selects a random word from its database along with its definition, and returns it to the caller in the form of a text string or a JSON object. The API can be configured to return words based on different categories, such as nouns, verbs, adjectives, or specific subjects, like geography or science.
</p>
<div class="btn">
<a href="#">Go to page</a>
</div>
</div>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="footer__logo-box">
<img src="https://bryan-tineo-portafolio2.netlify.app/images/bryanmax9_icon.png" alt="Full logo" class="footer__logo" />
</div>
<div class="row">
<div class="col-1-of-2">
<div class="footer__navigation">
<ul class="footer__list">
<li class="footer__item">
<a href="https://www.linkedin.com/in/bryan-tineo/" class="footer__link">Company</a>
</li>
<li class="footer__item">
<a href="https://www.linkedin.com/in/bryan-tineo/" class="footer__link">Contact</a>
</li>
<li class="footer__item">
<a href="https://www.linkedin.com/in/bryan-tineo/" class="footer__link">Carrers</a>
</li>
<li class="footer__item">
<a href="https://www.linkedin.com/in/bryan-tineo/" class="footer__link">Privacy policy</a>
</li>
<li class="footer__item">
<a href="https://www.linkedin.com/in/bryan-tineo/" class="footer__link">Terms</a>
</li>
</ul>
</div>
</div>
<div class="col-1-of-2">
<p class="footer__copyright">
Built by <a href="https://bryantineo.hashnode.dev/" class="footer__link">Bryan Tineo</a> for
my Bootcamp at Neflix. Copyright © by Bryan Tineo.
</p>
</div>
</div>
</footer>
<script>
$(".slider").owlCarousel({
loop: true,
autoplay: true,
autoplayTimeout: 2500,//2000ms = 2.5s
autoplayHoverPause: true,
});
</script>
</body>
</html>
//Mixins
@mixin clearfix {
&::after {
content: "";
display: table;
clear: both;
}
}
@mixin absCenter {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
// Media Query Manager
/*
0 - 600px: Phone
600 - 900:px Tablet portrait
900 - 1200px: Tablet landscape
[1200 - 1800] is where our normal styles apply
1800px + : Big Desktop
$breakpoint argument choices:
- phone
- tab-port
- tab-land
- big-desktop
ORDER: Base + typography > general layout + grid > page layout > components
1em = 16px
*/
@mixin respond($breakpoint) {
@if $breakpoint == phone {
//600px /16 = 37.5
@media only screen and (max-width: 37.5em) {
@content;
}
}
@if $breakpoint == tab-port {
//900px /16= 56.25
@media only screen and (max-width: 56.25em) {
@content;
}
}
@if $breakpoint == tab-land {
//1200px /16= 75
@media only screen and (max-width: 75em) {
@content;
}
}
@if $breakpoint == big-desktop {
//1800px /16=112.5
@media only screen and (min-width: 112.5em) {
@content;
}
}
}
//Variables
// COLORS
$color-penguin-light: #b2ebf2;
$color-penguin-dark: #4dd0e1;
$color-primary: #d966ff;
$color-primary-light: #ff5f5f;
$color-primary-middle: #ff5f5f;
$color-primary-dark: #ff2e2e;
$color-secondary-light: #ffb900;
$color-secondary-dark: #ff7730;
$color-tertiary-light: #2998ff;
$color-tertiary-dark: #5643fa;
$color-grey-light-1: #f7f7f7;
$color-grey-light-2: #eee;
$color-grey-dark: #777;
$color-grey-dark-2: #999;
$color-grey-dark-3: #333;
$color-white: #fff;
$color-black: #000;
// FONT
$default-font-size: 1.6rem;
// GRID
$grid-width: 114rem;
$gutter-vertical: 8rem;
$gutter-vertical-small: 6rem;
$gutter-horizontal: 6rem;
//Animations
@keyframes moveInLeft {
0% {
opacity: 0;
transform: translateX(-10rem); /* rotate(0deg); */
}
/* 60% {
transform: rotate(180deg);
} */
80% {
/* it will move to the right 10px more */
transform: translateX(1rem);
}
100% {
opacity: 1;
/* trabslate 0 will make the element be in the initial position*/
transform: translate(0);
}
}
@keyframes moveInRight {
0% {
opacity: 0;
transform: translateX(10rem);
}
80% {
/* it will move to the right 10px more */
transform: translateX(-1rem);
}
100% {
opacity: 1;
/* trabslate 0 will make the element be in the initial position*/
transform: translate(0);
}
}
@keyframes moveInBottom {
0% {
opacity: 0;
transform: translateY(3rem);
}
100% {
opacity: 1;
/* trabslate 0 will make the element be in the initial position*/
transform: translate(0);
}
}
//Base
*,
*::after,
*::before {
margin: 0;
padding: 0;
box-sizing: inherit;
}
html {
//Smooth scrolling
scroll-behavior: smooth;
-webkit-scroll-behavior: smooth;
// This defines what 1rem means
font-size: 62.5%; //1rem = 10px/16px =62.5%
@include respond(tab-land) {
// width < 1200?
font-size: 56.25%; //1rem = 9px, 9/16 = 50%
}
@include respond(tab-port) {
// width < 900?
font-size: 50%; //1rem = 8px, 8/16 = 50%
}
@include respond(big-desktop) {
font-size: 75%; //1 rem = 12px, 12/16 =75%
}
}
body {
box-sizing: border-box;
padding: 3rem;
@include respond(tab-port){
padding: 0;
}
}
::selection {
background-color: $color-primary;
color: $color-white;
}
//Typography
body {
font-family: "Lato", sans-serif;
font-weight: 400;
/* font-size: 16px; */
line-height: 1.7;
color: $color-grey-dark;
}
.heading-primary {
color: $color-white;
text-transform: uppercase;
backface-visibility: hidden;
margin-bottom: 6rem;
&--main {
display: block;
font-size: 6rem;
font-weight: 400;
letter-spacing: 3.5rem;
animation-name: moveInLeft;
animation-duration: 1s;
/* ease in will enter slow and end fast, while, ease out will go fast and then slow down */
animation-timing-function: ease-out;
@include respond(phone){
letter-spacing: 1rem;
font-family: 6rem;
}
/* animation will execute 3 times */
/* animation-iteration-count: 3; */
/* delays animation for 3 seconds*/
/* animation-delay: 3s; */
}
&--sub {
display: block;
font-size: 2rem;
font-weight: 700;
letter-spacing: 1.75rem;
animation: moveInRight 1s ease-out;
@include respond(phone){
letter-spacing: .5rem;
}
}
}
.heading-secondary {
font-size: 3.5rem;
text-transform: uppercase;
font-weight: 700;
display: inline-block;
background-image: linear-gradient(
to right,
#e60000, #990000,
#330000
);
//after creating the gradient of two colors, we can use does colors to color the text by using webkit on the text and color transparent
-webkit-background-clip: text;
color: transparent;
letter-spacing: 0.2rem;
transition: all 0.2s;
@include respond(tab-port){
font-size: 3rem;
}
@include respond(phone){
font-size: 2.5rem;
}
&:hover {
// the skew y will move the text de costado. Mientras que skew x va a mover las letras para un lado
transform: skewY(2deg) skewX(15deg) scale(1.1);
text-shadow: 0.5rem 1rem 2rem rgba($color-black, 0.2);
}
}
.heading-tertiary {
font-size: $default-font-size;
font-weight: 700;
text-transform: uppercase;
}
.paragraph {
font-size: $default-font-size;
&:not(:last-child) {
margin-bottom: 3rem;
}
}
//Utilities
.u-center-text {
text-align: center !important;
}
.u-margin-bottom-big {
margin-bottom: 8rem !important;
@include respond(tab-port) {
margin-bottom: 5rem !important;
}
}
.u-margin-bottom-medium {
margin-bottom: 4rem !important;
@include respond(tab-port) {
margin-bottom: 3rem !important;
}
}
.u-margin-bottom-small {
margin-bottom: 1.5rem !important;
}
.u-margin-top-big {
margin-top: 8rem !important;
}
.u-margin-top-huge {
margin-top: 10rem !important;
}
//Bg-video
.bg-video {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
z-index: -1;
opacity: 0.75;
overflow: hidden;
&__content {
height: 100%;
width: 100%;
// object fit cover will allow the parent cover the parent of the content
object-fit: cover;
}
}
//Button
.btn {
// the "&" alone means the btn, so everythong inside will be applied to the btn even if it is not an anchor element
&,
&:link,
&:visited {
text-transform: uppercase;
text-decoration: none;
padding: 1.5rem 4rem;
display: inline-block;
border-radius: 10rem;
transition: all 0.2s;
position: relative;
font-size: $default-font-size;
//Change for the button element
border: none;
cursor: pointer;
}
&:hover {
transform: translateY(-3px);
box-shadow: 0 1rem 2rem rgba($color-black, 0.2);
&::after {
transform: scaleX(1.4) scaleY(1.6);
opacity: 0;
}
}
&:active,
&:focus {
outline: none;
transform: translateY(-1px);
box-shadow: 0 0.5rem 1rem rgba($color-black, 0.2);
}
&--white {
background-color: $color-white;
color: $color-grey-dark;
&::after {
background-color: $color-white;
}
}
&--green {
background-color: $color-primary;
color: $color-white;
&::after {
background-color: $color-primary;
}
}
&::after {
content: "";
display: inline-block;
height: 100%;
width: 100%;
border-radius: 10rem;
position: absolute;
top: 0;
left: 0;
z-index: -1;
transition: all 0.4s;
}
&--animated {
animation: moveInBottom 0.5s ease-out 0.75s;
animation-fill-mode: backwards;
}
}
.btn-text {
&:link,
&:visited {
font-size: $default-font-size;
color: red;
display: inline-block;
text-decoration: none;
border-bottom: 1px solid red;
padding: 3px;
transition: all 0.2s;
}
&:hover {
background-color: red;
color: $color-white;
box-shadow: 0 1rem 2rem rgba($color-black, 0.15);
transform: translateY(-2px);
}
&:active {
box-shadow: 0 0.5rem 1rem rgba($color-black, 0.15);
transform: translateY(0);
}
}
//Composition
.composition {
position: relative;
&__photo {
width: 55%;
box-shadow: 0 1.5rem 4rem rgba($color-black, 0.4);
border-radius: 2px;
position: absolute;
z-index: 10;
transition: all 0.2s;
outline-offset: 2rem;
@include respond(tab-port) {
float: left;
position: relative;
//width is the same for each image
width: 33.33333%;
box-shadow: 0 1.5rem 3rem rgba($color-black, 0.2);
}
&--p1 {
left: 0;
top: -2rem;
@include respond(tab-port) {
top: 0;
transform: scale(1.2);
}
}
&--p2 {
right: 0;
top: 2rem;
@include respond(tab-port) {
top: -1rem;
transform: scale(1.3);
z-index: 100;
}
}
&--p3 {
left: 20%;
top: 10rem;
@include respond(tab-port) {
top: 1rem;
left: 0;
transform: scale(1.1);
}
}
&:hover {
outline: 1.5rem solid $color-primary;
transform: scale(1.05) translateY(-0.5rem);
box-shadow: 0 2.5rem 4rem rgba($color-black, 0.5);
z-index: 20;
}
}
// make all the images that aren't hovered to shrink
&:hover &__photo:not(:hover) {
transform: scale(0.95);
}
//composition:hover composition__photo:not(:hover) {
}
//Story
.story {
width: 75%;
margin: 0 auto;
box-shadow: 0 3rem 6rem rgba($color-black, 0.1);
background-color: rgba($color-white, 0.6);
border-radius: 3px;
padding: 6rem;
padding-left: 9rem;
font-size: $default-font-size;
// with transfor -12degrees will make the whole element with their childs to diagonally move
transform: skewX(-12deg);
@include respond(tab-port) {
width: 100%;
padding: 4rem;
padding-left: 7rem;
}
@include respond(phone) {
transform: skew(0);
}
&__shape {
width: 15rem;
height: 15rem;
float: left;
-webkit-shape-outside: circle(50% at 50% 50%);
// radius of the circle in this cas 50% will be radius=7.5
// then, at 50% 50% means at the center horizontally and vertically
shape-outside: circle(50% at 50% 50%);
//clipath will create the circle shape in the element
-webkit-clip-path: circle(50% at 50% 50%);
clip-path: circle(50% at 50% 50%);
// to give space between the figure of the image andd the text, we use transform
//Since we are putting diagonally the whole element, we skew the image in order to make it to not look distorted
transform: translateX(-3rem) skewX(12deg);
position: relative;
@include respond(phone) {
transform: translateX(-3rem) skewX(0);
}
}
&__img {
height: 100%;
// we move with translateX the image to the center. Scale will set the initial scale of the image
transform: translateX(-4rem) scale(1.4);
backface-visibility: hidden;
transition: all 0.5s;
}
&__text {
//Since we are skewing diagonally the whole element, we skew the text to is not distorted
transform: skewX(12deg);
@include respond(phone) {
transform: skewX(0);
}
}
&__caption {
// Make caption be infront of image
position: absolute;
//center caption
top: 50%;
left: 50%;
// We translate the image some percentage down so it can be animated moving up
transform: translate(-50%, 40%);
color: $color-white;
text-transform: uppercase;
font-size: 1.7rem;
text-align: center;
// opacity will start with 0 so the letters cant be seen until hovered
opacity: 0;
transition: all 0.5s;
// for the text appearing when hovered in order to make it to not chacke we use backface hidden
backface-visibility: hidden;
}
// when is hovered then we want to change the caption
&:hover &__caption {
//opacity 1 so when hovered the text appears
opacity: 1;
// move to the center when hovered
transform: translate(-50%, -50%);
}
//As soon as we hover the image
&:hover &__img {
// the image will stay in the center with translateX, while the scale will make the image look far
transform: translateX(-4rem) scale(1);
//Also, we want the image to be blured and a darker
//brightness will make the image darker. If brightness is less then 100% it will become darker
filter: blur(3px) brightness(80%);
}
}
//Footer
.footer {
background-color: black;
padding: 10rem 0;
font-size: 1.4rem;
color: $color-grey-light-1;
@include respond(tab-port) {
padding: 8rem 0;
}
&__logo-box {
//inline image works as inline text, so text align center will align the image
text-align: center;
margin-bottom: 8rem;
@include respond(tab-port) {
margin-bottom: 6rem;
}
}
&__logo {
width: 15rem;
height: auto;
}
&__navigation {
border-top: 1px solid $color-grey-dark;
padding-top: 2rem;
// inline-block dosent ocuppy 100% of its available width only what the content needs
display: inline-block;
@include respond(tab-port) {
width: 100%;
text-align: center;
}
}
&__list {
list-style: none;
}
&__item {
display: inline-block;
&:not(:last-child) {
margin-right: 1.5rem;
}
}
&__link {
&:link,
&:visited {
color: $color-grey-light-1;
background-color: $color-grey-dark-3;
text-decoration: none;
text-transform: uppercase;
display: inline-block;
transition: all 0.2s;
}
&:hover,
&:active {
color: #b30000;
box-shadow: 0 1rem 2rem rgba($color-black, 0.4);
transform: rotate(5deg) scale(1.3);
}
}
&__copyright {
border-top: 1px solid $color-grey-dark;
padding-top: 2rem;
width: 80%;
float: right;
@include respond(tab-port) {
width: 100%;
float: none;
}
}
}
// GRID
.row {
// 114rem
max-width: $grid-width;
//center row in the viewport
margin: 0 auto;
//.row:not(:last-child)
&:not(:last-child) {
// put margin in the bottom of all rows except the last row(last child)
margin-bottom: $gutter-vertical;
@include respond(tab-port){
margin-bottom: $gutter-vertical-small;
}
@include respond(tab-port){
max-width: 50rem;
padding: 0 3rem;
}
}
@include clearfix;
// It will select all of the elements in which the class attribute starts with "col-". If you change ^ with * it will mean every class that contains col-. If you use $, means any class that ends with col-
[class^="col-"] {
float: left;
&:not(:last-child) {
margin-right: $gutter-horizontal;
@include respond(tab-port){
margin-right: 0;
margin-bottom: $gutter-vertical-small;
}
}
@include respond(tab-port){
width: 100% !important;
}
}
.col-1-of-2 {
width: calc((100% - #{$gutter-horizontal}) / 2);
}
.col-1-of-3 {
width: calc((100% - 2 * #{$gutter-horizontal}) / 3);
}
.col-2-of-3 {
width: calc(
2 * ((100% - 2 * #{$gutter-horizontal}) / 3) + #{gutter-horizontal}
);
}
.col-1-of-4 {
width: calc((100% - 3 * #{$gutter-horizontal}) / 4);
}
.col-2-of-4 {
width: calc(
2 * ((100% - 3 * #{$gutter-horizontal}) / 4) + #{$gutter-horizontal}
);
}
.col-3-of-4 {
width: calc(
3 * ((100% - 3 * #{$gutter-horizontal}) / 4) + 2 * #{$gutter-horizontal}
);
}
}
//Header
.header {
height: 95vh;
background-image: linear-gradient(
to right bottom,
rgba(255, 0, 0, 0.8),
rgb(0, 0, 25, 0.8)
),
url(https://variety.com/wp-content/uploads/2020/05/netflix-logo.png);
background-size: cover;
background-position: top;
position: relative;
-webkit-clip-path: polygon(0 0, 100% 0, 100% 75vh, 0 100%);
/* clip path each coordinate is a corner of the image, so we are selecting in which position each corner will stay */
clip-path: polygon(0 0, 100% 0, 100% 75vh, 0 100%);
@include respond(phone){
-webkit-clip-path: polygon(0 0, 100% 0, 100% 85vh, 0 100%);
clip-path: polygon(0 0, 100% 0, 100% 85vh, 0 100%);
}
&__logo-box {
position: absolute;
top: 4rem;
left: 4rem;
}
&__logo {
height: 3.5rem;
}
&__text-box {
position: absolute;
top: 40%;
left: 50%;
/* background-color: red; */
transform: translate(-50%, -50%);
text-align: center;
}
}
//Navigation
.navigation {
&__checkbox {
// Since we dont want the checkbox to be seen, we set display none so it dosent appear on the website
display: none;
}
&__button {
//making the white circle menu
background-color: $color-white;
height: 7rem;
width: 7rem;
position: fixed;
top: 6rem;
right: 6rem;
border-radius: 50%;
z-index: 2000;
//shadow to the circle button menu so it is depicted when moving through the page
box-shadow: 0 1rem 3rem rgba($color-black, 0.1);
text-align: center;
cursor: pointer;
@include respond(tab-port){
top: 4rem;
right: 4rem;
}
@include respond(phone){
top: 3.5rem;
right: 3.5rem;
}
}
&__background {
//making the circle with color in the back
height: 6rem;
width: 6rem;
border-radius: 50%;
//putting the button in the right corner
position: fixed; // same as position absolute, but this is moved using the top right property
top: 6.5rem;
right: 6.5rem;
//The linear gradient goes from one side to the other one. while the radio gradient starts in the middle of the element and goes from there in all directions
background-image: radial-gradient(
$color-primary-light,
$color-primary-dark
);
z-index: 1000;
//transition on the background
// check: https://easings.net/ in order to chose the ease of the transition
transition: transform 0.8s cubic-bezier(0.22, 1, 0.36, 1);
@include respond(tab-port){
top: 4.5rem;
right: 4.5rem;
}
@include respond(phone){
top: 3.5rem;
right: 3.5rem;
}
//As Soon the navigation is open, we are scaling the entire backround
//transform: scale(80);
}
&__nav {
// the navigation will occuppy 100% of the view port's width and height (ocuppy the whole page when menu button clicked)
height: 100vh;
//While the navigation open even when scroolling we want it in the same place
position: fixed;
top: 0;
//instead of right: 0; we set to left: 0; so we can have an animation from the left(the links coming and hiding from the left side)
left: 0;
z-index: 1500;
// to hide the navigation links we cant use opacity 0 since the links will still work even when the content is hided
// Therefore, we can convine opacity with the width
//So, by making the width of the elements to 0 we will hide the link
opacity: 0;
width: 0;
//transition of the navigation to animate the opacity
//if we only put transition: opacity 0.8s; then the elements inside the navigation will hide in a weird way when clicked
//So we use all instead of opacity
// The cubic will define the transition animation
// check: https://easings.net/# for more transitions
transition: all 0.8s cubic-bezier(0.68, -0.6, 0.32, 1.6);
}
&__list {
//navigation list
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
list-style: none;
text-align: center;
// we are setting the width of the links so when it hides when clicked the navigation button so it dosent hide in a weird way
width: 100%;
}
&__item {
//selection the box of each link
margin: 1rem;
}
&__link {
&:link,
&:visited {
// we need to always set inline-block in order for the padding and the tranform trnslate works
display: inline-block;
font-size: 3rem;
font-weight: 300;
padding: 1rem 2rem;
color: $color-white;
text-decoration: none;
text-transform: uppercase;
// give color animation to the link
background-image: linear-gradient(
120deg,
transparent 0%,
transparent 50%,
$color-white 50%
);
// As we increase the background size from 100% , the white color of the link will slowly disappear and the transparent color will cover the whole link button
//Therefore, at 220% it will be all transparent, so when hovered is changed to 100% in order to make it white
background-size: 220%;
transition: all 0.4s;
span {
margin-right: 1rem;
display: inline-block;
}
}
&:hover,
&:active {
background-position: 100%;
color: $color-primary;
transform: translateX(1rem);
}
}
//using the checkbox hack so when clicked the menu then the navigation appears
// Functionality
&__checkbox:checked ~ &__background {
// when the label is checked(the menu button), then the navigation appears
// the background of the navigation first scales
transform: scale(80);
}
&__checkbox:checked ~ &__nav {
// Since we used opacity 0 and width 0 to hide the links of the navigation
opacity: 1;
width: 100%;
}
//Icon
&__icon {
position: relative;
// After making the text align in the button in order for the icon to show in the middle
// we must move the icon inside using margin top
margin-top: 3.5rem; //with this is in the center of the element
&,
&::before,
&::after {
width: 3rem;
height: 2px;
background-color: $color-grey-dark-3;
display: inline-block;
}
// For the before and after to appear in the page, they need to have their content property defined
&::before,
&::after {
content: "";
position: absolute;
left: 0;
transition: all 0.2s;
}
// One on the top and one on the bottom
&::before {
top: -0.8rem;
//transform-origin: right; // this will rotate the line to the right
}
&::after {
top: 0.8rem;
}
}
//When hovered, make the lines in the menu move apart
&__button:hover &__icon::before {
top: -1rem;
}
&__button:hover &__icon::after {
top: 1rem;
}
//When the checkbox is selected, hten we select it brother which is the button, so then we select the button's child which is the icon.
&__checkbox:checked + &__button &__icon {
//When the button is clicked the middle line of the menu dissapears using backgroundcolor transprent
background-color: transparent;
}
//After disappearing the middle line ( this: ||| ,to this: | |)
//then we rotate the before and after(rotate the remaining lines to form an X shape)
//Rotating them in opposite directions will create the effect of creating an X shape
&__checkbox:checked + &__button &__icon::before {
//since there is a padding between the lines (looks like this: | | )
// So, whit top 0 for both will make the lines be next to each other (like this: ||)
top: 0;
//before we set: transform: rotate(45deg);. However, in order to make a better effect we substracted 180 - 45= 135deg to create a better animation
transform: rotate(135deg);
}
&__checkbox:checked + &__button &__icon::after {
top: 0;
transform: rotate(-135deg);
}
}
//Home
.section-about {
background-color: $color-grey-light-1;
padding: 25rem 0;
margin-top: -20vh;
@include respond(tab-port) {
padding: 20rem 0;
}
}
.section-features {
padding: 20rem 0;
background-image: linear-gradient(
to right bottom,
rgba(255, 0, 0, 0.8),
rgb(0, 0, 111, 0.8)
),
url("https://cdn.vox-cdn.com/thumbor/N2TuTRw5FX-6KU9NJVVAVtNTKjY=/1400x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/7164879/Big%20League%20Map.jpg");
background-size: cover;
// transform skewY will aloww us to put the element diagonally
transform: skewY(-7deg);
margin-top: -10rem;
//Direct child selector(selecting all direct childs of the section feature)
& > * {
transform: skewY(7deg);
}
@include respond(tab-port){
padding: 10rem 0;
}
}
.section-tours {
background-color: $color-grey-light-1;
padding: 25rem 0 15rem 0;
margin-top: -10rem;
@include respond(tab-port) {
padding: 20rem 0 10rem 0;
}
}
.section-stories {
position: relative;
padding: 15rem 0;
@include respond(tab-port) {
padding: 10rem 0;
}
}
.section-book {
padding: 15rem 0;
background-image: linear-gradient(
to right bottom,
$color-penguin-light,
$color-penguin-dark
);
@include respond(tab-port) {
padding: 10rem 0;
}
}
.book {
// in linear gradient instade of using from left to right we can use 90degrees
// the 90 degrees will allow us to make the colors go from left to right(rotated)
// at the right of each color we indicate in which percent we want the color to be
// In this case the white will be from 0%-50%, while transparent 50%-100%.
// This will create an effect that separates this two colors
background-image: linear-gradient(
105deg,
rgba($color-white, 0.9) 0%,
rgba($color-white, 0.9) 50%,
transparent 50%
),
url("https://cdn.vox-cdn.com/thumbor/HBBA62_GWFtU5xaSwg2-O1DqNtA=/0x0:1920x1080/1200x800/filters:focal(1107x375:1413x681)/cdn.vox-cdn.com/uploads/chorus_image/image/65548570/pengu.0.jpg");
//background size 100% is the same as cover
background-size: 100%;
border-radius: 3px;
box-shadow: 0 1.5rem 4rem rgba($color-black, 0.2);
@include respond(tab-land) {
background-image: linear-gradient(
105deg,
rgba($color-white, 0.9) 0%,
rgba($color-white, 0.9) 50%,
transparent 65%
),
url("https://cdn.vox-cdn.com/thumbor/HBBA62_GWFtU5xaSwg2-O1DqNtA=/0x0:1920x1080/1200x800/filters:focal(1107x375:1413x681)/cdn.vox-cdn.com/uploads/chorus_image/image/65548570/pengu.0.jpg");
background-size: cover;
}
@include respond(tab-port) {
background-image: linear-gradient(
to right,
rgba($color-white, 0.9) 0%,
rgba($color-white, 0.9) 100%),
url("https://cdn.vox-cdn.com/thumbor/HBBA62_GWFtU5xaSwg2-O1DqNtA=/0x0:1920x1080/1200x800/filters:focal(1107x375:1413x681)/cdn.vox-cdn.com/uploads/chorus_image/image/65548570/pengu.0.jpg");
}
&__form {
// Ocuppy half of the entire box
width: 50%;
padding: 6rem;
@include respond(tab-land) {
width: 65%;
}
@include respond(tab-port) {
width: 100%;
}
}
}
//Section about (Aca cuento de que se trata la pagina)
.composition {
position: relative;
&__photo {
width: 55%;
box-shadow: 0 1.5rem 4rem rgba($color-black, 0.4);
border-radius: 2px;
position: absolute;
z-index: 10;
transition: all 0.2s;
outline-offset: 2rem;
@include respond(tab-port) {
float: left;
position: relative;
//width is the same for each image
width: 33.33333%;
box-shadow: 0 1.5rem 3rem rgba($color-black, 0.2);
}
&--p1 {
left: 0;
top: -2rem;
@include respond(tab-port) {
top: 0;
transform: scale(1.2);
}
}
&--p2 {
right: 0;
top: 2rem;
@include respond(tab-port) {
top: -1rem;
transform: scale(1.3);
z-index: 100;
}
}
&--p3 {
left: 20%;
top: 10rem;
@include respond(tab-port) {
top: 1rem;
left: 0;
transform: scale(1.1);
}
}
&:hover {
outline: 1.5rem solid red;
transform: scale(1.05) translateY(-0.5rem);
box-shadow: 0 2.5rem 4rem rgba($color-black, 0.5);
z-index: 20;
}
}
// make all the images that aren't hovered to shrink
&:hover &__photo:not(:hover) {
transform: scale(0.95);
}
//composition:hover composition__photo:not(:hover) {
}
.section-stories {
position: relative;
padding: 15rem 0;
@include respond(tab-port) {
padding: 10rem 0;
}
}
//Slider
.slider{
max-width: 1150px;
display: flex;
}
.slider .card{
background: #fff;
flex:1;
margin: 0 10px;
}
.slider .card .img img{
height: 100%;
width: 100%;
object-fit: cover;
}
.section-projects{
display: grid;
height: 100%;
place-items: center;
text-align: center;
background: #f2f2f2;
}
.slider .card .content{
padding: 10px 20px;
}
.card .content .title{
font-size: 25px;
font-weight: 600;
}
.card .content .sub-title{
font-size: 20px;
font-weight: 600;
color: #e74c3c;
line-height: 20px;
}
.card .content p{
text-align:justify;
margin: 10px 0;
}
.card .content .btn{
display: block;
text-align: left;
margin: 10px 0;
background-color: red;
}
.card .content .btn a{
text-decoration:None;
background: red;
color:#fff;
border:none;
outline: none;
font-size: 17px;
padding: 5px 8px;
border-radius: 5px;
cursor: pointer;
transition: 0.2s;
}
.card .content .btn button:hover{
transform: scale(0.9);
}
.section-projects {
overflow: hidden;
padding: 15rem 0;
background-image: linear-gradient(
to right bottom,
#990000,
#330000
);
@include respond(tab-port) {
padding: 10rem 0;
}
}
//GALLERY
.gallery {
background-color: white;
grid-column: full-start / full-end;
display: grid;
grid-template-columns: repeat(8, 1fr);
//We use vw (viewport width) in order for the grid height to not change when the viewport shrinks
grid-template-rows: repeat(7, 5vw);
grid-gap: 1.5rem;
padding: 1.5rem;
&__item {
&--1 {
grid-row: 1 / 3;
grid-column: 1 / 3;
}
&--2 {
grid-row: 1 / 4;
grid-column: 3 / 6;
}
&--3 {
grid-row: 1 / 3;
grid-column: 6 / 7;
}
&--4 {
grid-row: 1 / 3;
grid-column: 7 / 9;
}
&--5 {
grid-row: 3 / 6;
grid-column: 1 / 3;
}
&--6 {
grid-row: 4 / 6;
grid-column: 3 / 5;
}
&--7 {
grid-row: 4 / 5;
grid-column: 5 / 6;
}
&--8 {
grid-row: 3 / 5;
grid-column: 6 / 8;
}
&--9 {
grid-row: 3 / 6;
grid-column: 8 / 9;
}
&--10 {
grid-row: 6 / 8;
grid-column: 1 / 2;
}
&--11{
grid-row: 6 / 8;
grid-column: 2 / 4;
}
&--12 {
grid-row: 6 / 8;
grid-column: 4 / 5;
}
&--13 {
grid-row: 5 / 8;
grid-column: 5 / 8;
}
&--14 {
grid-row: 6 / 8;
grid-column: 8 / 9;
}
}
&__img {
//we put 100% for the width of the images in order for the images dont ocuppy the whole grid and only a grid cell.
width: 100%;
height: 100%;
// object fit is in order for the image not to overflow, but for object fit to work we have to manually se the width and height of the image
object-fit: cover;
display: block;
}
}
/* This js code will allow the navigation scroll and close de the navigation tab when clicked a link */
const link1 = document.querySelector(".link1");
const link2 = document.querySelector(".link2");
const link3 = document.querySelector(".link3");
const cajita = document.querySelector(".navigation__checkbox");
link1.addEventListener("click", function (event) {
cajita.checked = false;
});
link2.addEventListener("click", function (event) {
cajita.checked = false;
});
link3.addEventListener("click", function (event) {
cajita.checked = false;
});
Also see: Tab Triggers