Repository: bedimcode/responsive-portfolio-website-JhonDoe
Branch: master
Commit: 06b1844a42ca
Files: 5
Total size: 32.3 KB
Directory structure:
gitextract_3wk9ztpr/
├── README.md
├── assets/
│ ├── css/
│ │ └── styles.css
│ ├── js/
│ │ └── main.js
│ └── sass/
│ └── styles.scss
└── index.html
================================================
FILE CONTENTS
================================================
================================================
FILE: README.md
================================================
# Responsive Personal Portfolio Website
## [Watch it on youtube](https://youtu.be/6cidbUHNZRQ)
### Responsive Personal Portfolio Website
- Responsive Personal Portfolio Website Using HTML CSS And JavaScript
- Contains animations when scrolling.
- Smooth scrolling in each section.
- Developed first with the Mobile First methodology, then for desktop.
- Compatible with all mobile devices and with a beautiful and pleasant user interface.
💙 Join the channel to see more videos like this. [Bedimcode](https://www.youtube.com/@Bedimcode)

================================================
FILE: assets/css/styles.css
================================================
/*===== GOOGLE FONTS =====*/
@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@500;600;700&display=swap");
/*===== VARIABLES CSS =====*/
:root{
--header-height: 3rem;
--font-medium: 500;
}
/*===== Colores =====*/
:root{
--first-color: #5361FF;
--white-color: #FAFAFF;
--dark-color: #2A3B47;
--text-color: #697477;
}
/*===== Fuente y tipografia =====*/
:root{
--body-font: 'Montserrat', sans-serif;
--big-font-size: 6.25rem;
--h2-font-size: 1.25rem;
--normal-font-size: .938rem;
--small-font-size: .813rem;
}
@media screen and (min-width: 768px){
:root{
--big-font-size: 10.5rem;
--h2-font-size: 2rem;
--normal-font-size: 1rem;
--small-font-size: .875rem;
}
}
/*===== Margenes =====*/
:root{
--mb-1: .5rem;
--mb-2: 1rem;
--mb-3: 1.5rem;
--mb-4: 2rem;
}
/*===== z index =====*/
:root{
--z-fixed: 100;
}
/*===== BASE =====*/
*,::before,::after{
box-sizing: border-box;
}
html{
scroll-behavior: smooth;
}
body{
margin: var(--header-height) 0 0 0;
font-family: var(--body-font);
font-size: var(--normal-font-size);
font-weight: var(--font-medium);
color: var(--text-color);
line-height: 1.6;
}
h1,h2,p{
margin: 0;
}
ul{
margin: 0;
padding: 0;
list-style: none;
}
a{
text-decoration: none;
color: var(--text-color);
}
img{
max-width: 100%;
height: auto;
display: block;
}
/*===== CLASS CSS ===== */
.section{
padding: 3rem 0;
}
.section-title{
position: relative;
font-size: var(--h2-font-size);
color: var(--dark-color);
margin: var(--mb-4) 0;
text-align: center;
}
.section-title::after{
position: absolute;
content: "";
width: 32px;
height: .18rem;
left: 0;
right: 0;
margin: auto;
top: 2rem;
background-color: var(--first-color);
}
/*===== LAYOUT =====*/
.bd-grid{
max-width: 1024px;
display: grid;
grid-template-columns: 100%;
grid-column-gap: 2rem;
width: calc(100% - 2rem);
margin-left: var(--mb-2);
margin-right: var(--mb-2);
}
.l-header{
width: 100%;
position: fixed;
top: 0;
left: 0;
z-index: var(--z-fixed);
background-color: var(--first-color);
}
/*===== NAV =====*/
.nav{
height: var(--header-height);
display: flex;
justify-content: space-between;
align-items: center;
}
@media screen and (max-width: 768px){
.nav__menu{
position: fixed;
top: var(--header-height);
right: -100%;
width: 80%;
height: 100%;
padding: 2rem;
background-color: rgba(255,255,255,.3);
transition: .5s;
backdrop-filter: blur(10px);
}
}
.nav__item{
margin-bottom: var(--mb-4);
}
.nav__link{
position: relative;
color: var(--dark-color);
}
.nav__link:hover{
color: var(--first-color);
}
.nav__logo{
color: var(--white-color);
}
.nav__toggle{
color: var(--white-color);
font-size: 1.5rem;
cursor: pointer;
}
/*=== Show menu ===*/
.show{
right: 0;
}
/*Active menu*/
.active::after{
position: absolute;
content: "";
width: 100%;
height: .18rem;
left: 0;
top: 2rem;
background-color: var(--first-color);
}
/*===== HOME =====*/
.home{
position: relative;
background-color: var(--first-color);
overflow: hidden;
}
.home__container{
height: calc(100vh - var(--header-height));
row-gap: 5rem;
}
.home__title{
align-self: flex-end;
font-size: var(--big-font-size);
color: var(--white-color);
line-height: .8;
}
.home__title span{
text-shadow: 0 20px 25px rgba(0,0,0,.5);
}
.home__scroll{
align-self: flex-end;
padding-bottom: var(--mb-4);
}
.home__scroll-link{
writing-mode: vertical-lr;
transform: rotate(-180deg);
color: var(--white-color);
}
.home__img{
position: absolute;
right: 0;
bottom: 0;
width: 295px;
}
/* ===== ABOUT =====*/
.about__container{
justify-items: center;
row-gap: 2rem;
text-align: center;
}
.about__img{
display: flex;
justify-content: center;
padding-top: 1rem;
width: 120px;
height: 120px;
background-color: var(--first-color);
border-radius: 50%;
overflow: hidden;
}
.about__img img{
width: 100px;
}
.about__subtitle{
font-size: var(--h2-font-size);
color: var(--first-color);
margin-bottom: var(--mb-1);
}
.about__text{
margin-bottom: var(--mb-4);
}
.about__profession{
display: block;
margin-bottom: var(--mb-4);
}
.about__social-icon{
font-size: 1.4rem;
margin: 0 var(--mb-1);
}
.about__social-icon:hover{
color: var(--first-color);
}
/* ===== SKILLS =====*/
.skills__container{
row-gap: 2rem;
}
.skills__subtitle{
color: var(--first-color);
margin-bottom: var(--mb-3);
}
.skills__name{
display: inline-block;
font-size: var(--small-font-size);
margin-right: var(--mb-2);
margin-bottom: var(--mb-3);
padding: .25rem .5rem;
background-color: var(--white-color);
border-radius: .25rem;
}
.skills__name:hover{
background-color: var(--first-color);
color: var(--white-color);
}
.skills__img img{
border-radius: .5rem;
}
/* ===== PORTFOLIO =====*/
.portfolio{
background-color: var(--white-color);
}
.portfolio__container{
justify-items: center;
row-gap: 2rem;
}
.portfolio__img{
position: relative;
overflow: hidden;
}
.portfolio__img img{
border-radius: .5rem;
}
.portfolio__link{
position: absolute;
bottom: -100%;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
background-color: rgba(255,255,255,.3);
border-radius: .5rem;
cursor: pointer;
backdrop-filter: blur(10px);
transition: .3s;
}
.portfolio__img:hover .portfolio__link{
bottom: 0;
}
.portfolio__link-name{
color: var(--dark-color);
}
/* ===== CONTACT =====*/
.contact__container{
row-gap: 2rem;
}
.contact__subtitle{
font-size: var(--normal-font-size);
color: var(--first-color);
}
.contact__text{
display: inline-block;
margin-bottom: var(--mb-2);
}
.contact__inputs{
display: grid;
grid-template-columns: repeat(2, 1fr);
column-gap: 1rem;
}
.contact__input{
width: 100%;
padding: .8rem;
outline: none;
border: 1.5px solid var(--dark-color);
font-size: var(--normal-font-size);
margin-bottom: var(--mb-4);
border-radius: .5rem;
}
.contact__button{
display: block;
background-color: var(--first-color);
color: var(--white-color);
padding: .75rem 2.5rem;
margin-left: auto;
border-radius: .5rem;
border: none;
outline: none;
font-size: var(--normal-font-size);
cursor: pointer;
}
/* ===== FOOTER=====*/
.footer{
background-color: var(--dark-color);
}
.footer__container{
row-gap: 2rem;
}
.footer__title{
font-size: var(--normal-font-size);
color: var(--white-color);
margin-bottom: var(--mb-2);
}
.footer__link{
padding: .25rem 0;
}
.footer__link:hover{
color: var(--first-color);
}
.footer__social{
font-size: 1.4rem;
margin-right: var(--mb-1);
}
.footer__social:hover{
color: var(--first-color);
}
/* ===== MEDIA QUERIES =====*/
/* For small devices */
@media screen and (max-width: 320px) {
.home__img {
width: 230px;
}
}
@media screen and (min-width: 768px){
body{
margin: 0;
}
.section{
padding-top: 4rem;
}
.section-title{
margin-bottom: 3rem;
}
.section-title::after{
width: 64px;
top: 3rem;
}
.nav{
height: calc(var(--header-height) + 1rem);
}
.nav__list{
display: flex;
}
.nav__item{
margin-left: var(--mb-4);
margin-bottom: 0;
}
.nav__toggle{
display: none;
}
.nav__link{
color: var(--white-color);
}
.nav__link:hover{
color: var(--white-color);
}
.active::after{
background-color: var(--white-color);
}
.home__container{
height: 100vh;
grid-template-rows: 1.7fr 1fr;
row-gap: 0;
}
.home__img{
width: 524px;
right: 10%;
}
.about__container{
grid-template-columns: repeat(2, 1fr);
align-items: center;
text-align: initial;
padding: 4rem 0;
}
.about__img{
width: 200px;
height: 200px;
}
.about__img img{
width: 165px;
}
.skills__container{
grid-template-columns: repeat(2, 1fr);
align-items: center;
}
.portfolio__container{
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 1fr);
column-gap: 2rem;
}
.contact__container{
grid-template-columns: repeat(2, 1fr);
justify-items: center;
}
.contact__form{
width: 380px;
}
.footer__container{
grid-template-columns: repeat(3, 1fr);
justify-items: center;
}
}
@media screen and (min-width: 1024px){
.bd-grid{
margin-left: auto;
margin-right: auto;
}
}
/* For tall screens on mobiles y desktop*/
@media screen and (min-height: 721px) {
.home__container {
height: 640px;
}
.home__img {
width: 500px;
right: 24%;
}
}
================================================
FILE: assets/js/main.js
================================================
/*===== MENU SHOW =====*/
const showMenu = (toggleId, navId) =>{
const toggle = document.getElementById(toggleId),
nav = document.getElementById(navId)
if(toggle && nav){
toggle.addEventListener('click', ()=>{
nav.classList.toggle('show')
})
}
}
showMenu('nav-toggle','nav-menu')
/*===== REMOVE MENU MOBILE =====*/
const navLink = document.querySelectorAll('.nav__link')
function linkAction(){
const navMenu = document.getElementById('nav-menu')
navMenu.classList.remove('show')
}
navLink.forEach(n => n.addEventListener('click', linkAction))
/*===== SCROLL SECTIONS ACTIVE LINK =====*/
const sections = document.querySelectorAll('section[id]')
window.addEventListener('scroll', scrollActive)
function scrollActive(){
const scrollY = window.pageYOffset
sections.forEach(current =>{
const sectionHeight = current.offsetHeight
const sectionTop = current.offsetTop - 50;
sectionId = current.getAttribute('id')
if(scrollY > sectionTop && scrollY <= sectionTop + sectionHeight){
document.querySelector('.nav__menu a[href*=' + sectionId + ']').classList.add('active')
}else{
document.querySelector('.nav__menu a[href*=' + sectionId + ']').classList.remove('active')
}
})
}
/*===== SCROLL REVEAL ANIMATION =====*/
const sr = ScrollReveal({
origin: 'top',
distance: '80px',
duration: 2000,
reset: true
})
/*SCROLL HOME*/
sr.reveal('.home__title', {})
sr.reveal('.home__scroll', {delay: 200})
sr.reveal('.home__img', {origin:'right', delay: 400})
/*SCROLL ABOUT*/
sr.reveal('.about__img', {delay: 500})
sr.reveal('.about__subtitle', {delay: 300})
sr.reveal('.about__profession', {delay: 400})
sr.reveal('.about__text', {delay: 500})
sr.reveal('.about__social-icon', {delay: 600, interval: 200})
/*SCROLL SKILLS*/
sr.reveal('.skills__subtitle', {})
sr.reveal('.skills__name', {distance: '20px', delay: 50, interval: 100})
sr.reveal('.skills__img', {delay: 400})
/*SCROLL PORTFOLIO*/
sr.reveal('.portfolio__img', {interval: 200})
/*SCROLL CONTACT*/
sr.reveal('.contact__subtitle', {})
sr.reveal('.contact__text', {interval: 200})
sr.reveal('.contact__input', {delay: 400})
sr.reveal('.contact__button', {delay: 600})
================================================
FILE: assets/sass/styles.scss
================================================
/*===== GOOGLE FONTS =====*/
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@500;600;700&display=swap');
/*===== VARIABLES CSS =====*/
:root{
--header-height: 3rem;
--font-medium: 500;
}
/*===== Colores =====*/
:root{
--first-color: #5361FF;
--white-color: #FAFAFF;
--dark-color: #2a3b47;
--text-color: #697477;
}
/*===== Fuente y tipografia =====*/
:root{
--body-font: 'Montserrat', sans-serif;
--big-font-size: 6.25rem;
--h2-font-size: 1.25rem;
--normal-font-size: .938rem;
--small-font-size: .813rem;
@media screen and (min-width: 768px){
--big-font-size: 10.5rem;
--h2-font-size: 2rem;
--normal-font-size: 1rem;
--small-font-size: .875rem;
}
}
/*===== Margenes =====*/
:root{
--mb-1: 0.5rem;
--mb-2: 1rem;
--mb-3: 1.5rem;
--mb-4: 2rem;
}
/*===== z index =====*/
:root{
--z-fixed: 100;
}
/*===== BASE =====*/
*,::before,::after{
box-sizing: border-box;
}
html{
scroll-behavior: smooth;
}
body{
margin: var(--header-height) 0 0 0;
font-family: var(--body-font);
font-size: var(--normal-font-size);
font-weight: var(--font-medium);
color: var(--text-color);
line-height: 1.6;
}
h1,h2,p{
margin: 0;
}
ul{
margin: 0;
padding: 0;
list-style: none;
}
a{
text-decoration: none;
color: var(--text-color);
}
img{
max-width: 100%;
height: auto;
display: block;
}
/*===== CLASS CSS ===== */
.section{
padding: 3rem 0;
&-title{
position: relative;
font-size: var(--h2-font-size);
color: var(--dark-color);
margin: var(--mb-4) 0;
text-align: center;
&::after{
position: absolute;
content: '';
width: 32px;
height: .18rem;
left: 0;
right: 0;
margin: auto;
top: 2rem;
background-color: var(--first-color);
}
}
}
/*===== LAYOUT =====*/
.bd-grid{
max-width: 1024px;
display: grid;
grid-template-columns: 100%;
grid-column-gap: 2rem;
width: calc(100% - 2rem);
margin-left: var(--mb-2);
margin-right: var(--mb-2);
}
.l-header{
width: 100%;
position: fixed;
top: 0;
left: 0;
z-index: var(--z-fixed);
background-color: var(--first-color);
}
/*===== NAV =====*/
.nav{
height: var(--header-height);
display: flex;
justify-content: space-between;
align-items: center;
&__menu{
@media screen and (max-width: 768px){
position: fixed;
top: var(--header-height);
right: -100%;
width: 80%;
height: 100%;
padding: 2rem;
background: rgba(255, 255, 255, 0.3);
transition: .5s;
backdrop-filter: blur(10px);
}
}
&__item{
margin-bottom: var(--mb-4);
}
&__link{
position: relative;
color: var(--dark-color);
&:hover{
color: var(--first-color);
}
}
&__logo{
color: var(--white-color);
}
&__toggle{
color: var(--white-color);
font-size: 1.5rem;
cursor: pointer;
}
}
/*=== Show menu ===*/
.show{
right: 0;
}
/*Active menu*/
.active::after{
position: absolute;
content: '';
width: 100%;
height: 0.18rem;
left: 0;
top: 2rem;
background-color: var(--first-color);
}
/*===== HOME =====*/
.home{
position: relative;
background-color: var(--first-color);
overflow: hidden;
&__container{
height: calc(100vh - var(--header-height));
row-gap: 5rem;
}
&__title{
align-self: flex-end;
font-size: var(--big-font-size);
color: var(--white-color);
line-height: .8;
& span{
text-shadow: 0 20px 25px rgba(0, 0, 0, .5);
}
}
&__scroll{
align-self: flex-end;
padding-bottom: var(--mb-4);
&-link{
writing-mode: vertical-lr;
transform: rotate(-180deg);
color: var(--white-color);
}
}
&__img{
position: absolute;
right: 0;
bottom: 0;
width: 295px;
}
}
/* ===== ABOUT =====*/
.about{
&__container{
justify-items: center;
row-gap: 2rem;
text-align: center;
}
&__img{
display: flex;
justify-content: center;
padding-top: 1rem;
width: 120px;
height: 120px;
background-color: var(--first-color);
border-radius: 50%;
overflow: hidden;
& img{
width: 100px;
}
}
&__subtitle{
font-size: var(--h2-font-size);
color: var(--first-color);
margin-bottom: var(--mb-1);
}
&__text{
margin-bottom: var(--mb-4);
}
&__profession{
display: block;
margin-bottom: var(--mb-4);
}
&__social{
&-icon{
font-size: 1.4rem;
margin: 0 var(--mb-1);
&:hover{
color: var(--first-color);
}
}
}
}
/* ===== SKILLS =====*/
.skills{
&__container{
row-gap: 2rem;
}
&__subtitle{
color: var(--first-color);
margin-bottom: var(--mb-3);
}
&__name{
display: inline-block;
font-size: var(--small-font-size);
margin-right: var(--mb-2);
margin-bottom: var(--mb-3);
padding: .25rem .5rem ;
background-color: var(--white-color);
border-radius: .25rem;
&:hover{
background-color: var(--first-color);
color: var(--white-color);
}
}
&__img{
& img{
border-radius: .5rem;
}
}
}
/* ===== PORTFOLIO =====*/
.portfolio{
background-color: var(--white-color);
&__container{
justify-items: center;
row-gap: 2rem;
}
&__img{
position: relative;
overflow: hidden;
& img{
border-radius: .5rem;
}
&:hover .portfolio__link{
bottom: 0;
}
}
&__link{
position: absolute;
bottom: -100%;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
background: rgba(255, 255, 255, 0.3);
border-radius: .5rem;
cursor: pointer;
backdrop-filter: blur(10px);
transition: .3s;
&-name{
color: var(--dark-color);
}
}
}
/* ===== CONTACT =====*/
.contact{
&__container{
row-gap: 2rem;
}
&__subtitle{
font-size: var(--normal-font-size);
color: var(--first-color);
}
&__text{
display: inline-block;
margin-bottom: var(--mb-2);
}
&__inputs{
display: grid;
grid-template-columns: repeat(2, 1fr);
column-gap: 1rem;
}
&__input{
width: 100%;
padding: .8rem;
outline: none;
border: 1.5px solid var(--dark-color);
font-size: var(--normal-font-size);
margin-bottom: var(--mb-4);
border-radius: .5rem;
}
&__button{
display: block;
background-color: var(--first-color);
color: var(--white-color);
padding: .75rem 2.5rem;
margin-left: auto;
border-radius: .5rem;
border: none;
outline: none;
font-size: var(--normal-font-size);
cursor: pointer;
}
}
/* ===== FOOTER=====*/
.footer{
background-color: var(--dark-color);
&__container{
row-gap: 2rem;
}
&__title{
font-size: var(--normal-font-size);
color: var(--white-color);
margin-bottom: var(--mb-2);
}
&__link{
padding: .25rem 0;
&:hover{
color: var(--first-color);
}
}
&__social{
font-size: 1.4rem;
margin-right: var(--mb-1);
&:hover{
color: var(--first-color);
}
}
}
/* ===== MEDIA QUERIES=====*/
/* For small devices */
@media screen and (max-width: 320px) {
.home__img{
width: 230px;
}
}
@media screen and(min-width: 768px){
body{
margin: 0;
}
.section{
padding-top: 4rem;
&-title{
margin-bottom: 3rem;
&::after{
width: 64px;
top: 3rem;
}
}
}
.nav{
height: calc(var(--header-height) + 1rem);
&__list{
display: flex;
}
&__item{
margin-left: var(--mb-4);
margin-bottom: 0;
}
&__toggle{
display: none;
}
&__link{
color: var(--white-color);
&:hover{
color: var(--white-color);
}
}
}
.active::after{
background-color: var(--white-color);
}
.home{
&__container{
height: 100vh;
grid-template-rows: 1.7fr 1fr;
row-gap: 0;
}
&__img{
width: 524px;
right: 10%;
}
}
.about{
&__container{
grid-template-columns: repeat(2, 1fr);
align-items: center;
text-align: initial;
padding: 4rem 0;
}
&__img{
width: 200px;
height: 200px;
& img{
width: 165px;
}
}
}
.skills{
&__container{
grid-template-columns: repeat(2,1fr);
align-items: center;
}
}
.portfolio{
&__container{
grid-template-columns: repeat(3,1fr);
grid-template-rows: repeat(2, 1fr);
column-gap: 2rem;
}
}
.contact{
&__container{
grid-template-columns: repeat(2,1fr);
justify-items: center;
}
&__form{
width: 380px;
}
}
.footer{
&__container{
grid-template-columns: repeat(3,1fr);
justify-items: center;
}
}
}
@media screen and(min-width: 1024px){
.bd-grid{
margin-left: auto;
margin-right: auto;
}
}
/* For tall screens on mobiles y desktop*/
@media screen and (min-height: 721px) {
.home{
&__container{
height: 640px;
}
&__img{
width: 500px;
right: 24%;
}
}
}
================================================
FILE: index.html
================================================
Portfolio responsive complete
HE LLO.
About
I'am Jhon Doe
Web designer
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Adipisci consectetur, architecto quas fugiat, iste inventore facere repellendus delectus id, vitae blanditiis.
Skills
Development
Html
Css
Javascript
Scss
React
Vue
Design
Figma
Adobe XD
Photoshop