В этой статье расскажем, как создать собственный современный веб-сайт портфолио с использованием HTML, CSS и JS. Вы создадите временную шкалу CSS, чтобы продемонстрировать свое образование и опыт, сделаете раздел для своего проекта с эффектом крутого наведения. Сделайте похожее портфолио, чтобы произвести впечатление на рекрутера.
Код
Итак, давайте начнем с создания навигационной панели для сайта. Но перед этим вы должны знать наши файлы и папки.
Вы можете скачать изображения здесь.
Панель навигации
Итак, давайте начнем, чтобы создать navbar, сначала напишите базовый HTML-шаблон и style.css и app.js дляindex.html файла. После того, как со всем этим покончено. Создайте панель навигации.
<!-- navbar --> <nav class="navbar">
<ul class="link-group">
<li class="link active"><a href="#">home</a></li>
<li class="link"><a href="#">projects</a></li>
<li class="link"><a href="#">about</a></li>
<li class="link"><a href="#">contact</a></li>
</ul> </nav>
Мы закончили с HTMl, теперь добавьте к нему стиль.
*{
margin: 0;
padding: 0;
box-sizing: border-box;
} body{
width: 100%;
max-width: 1400px;
display: block;
margin: auto;
min-height: 100vh;
background: #191919;
font-family: sans-serif; } .navbar{
width: 100%;
position: fixed;
top: 0;
left: 0;
display: flex;
justify-content: center;
align-items: center;
z-index: 9;
background: #1a1a1a; } .link-group{
list-style: none;
display: flex
} .link a{
color: #fff;
opacity: 0.5;
text-decoration: none;
text-transform: capitalize;
padding: 10px 30px;
margin: 0 20px;
line-height: 80px;
transition: .5s;
font-size: 20px; } .link a:hover, .link.active a{
opacity: 1; }
Закончив с этим, вы увидите что-то подобное.
Итак, мы закончили с navbar. Итак, давайте перейдем к нашему домашнему разделу
Главная страница
Для создания кода домашнего раздела используется HTML-структура после элемента navbar.
<!-- home section --> <section class="home-section active">
<h1 class="hero-heading">hello, i am <br> kunaal</h1>
<img src="img/home.png" class="home-img" alt=""> </section>
Придайте несколько стилей.
.home-section{
width: 100%;
height: 100vh;
padding: 0 150px;
display: flex;
align-items: center;
position: relative;
top: 0;
opacity: 0;
transition: 1s; } .hero-heading{
color: #fff;
font-size: 120px;
text-transform: capitalize;
font-weight: 300; } .home-img{
position: absolute;
top: 0;
right: 0;
height: 100vh;
width: 50%;
object-fit: cover;
opacity: 0.2; }
Если вы напишете приведенный выше код, вы увидите position: relative и top: 0 в .home-section. Эти свойства важны во время навигации, потому что то, как будет работать наша навигация, немного сложно. Все наши разделы (главная, проект, о нас, контакт) все это будет иметь position: fixed из-за этого, все разделы будут друг на друге. И мы будем использовать active класс для указания активного раздела. Используя active класс, мы установим положение раздела относительным, а его непрозрачность равной 1. Так будет работать наша навигация.
Итак, как только вы закончите с домашним разделом, убедитесь, что вы меняете его положение на fixed с относительного.
.home-section{
/* previous styles */
position: fixed; }
Затем создайте active стили классов.
.home-section.active, .project-section.active, .about-section.active, .contact-section.active{
position: relative;
opacity: 1;
z-index: 8; }
Раздел проекта
Теперь давайте сделаем раздел проекта.
<!-- project section --> <section class="project-section">
<h1 class="project-heading">some of my projects</h1>
<div class="project-container">
<div class="project-card">
<img src="img/project-1.png" class="project-img" alt="">
<div class="project-content">
<h1 class="project-title">project 01</h1>
<p class="project-info">
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Impedit vitae delectus cumque repudiandae aliquam optio accusamus natus nobis! Nam, sunt?
</p>
<div class="project-btn-grp">
<button class="project-btn github">github repo</button>
<button class="project-btn live">see live</button>
</div>
</div>
</div>
// +3 more cards
</div> </section>
Также стилизуйте его.
/* project-section */ .project-section{
width: 100%;
min-height: 100vh;
padding: 150px 100px 100px;
position: fixed;
top: 0;
transition: 1s;
opacity: 0; } .project-heading{
font-size: 100px;
background: #252525;
text-transform: capitalize;
text-align: center;
margin-bottom: 50px;
color: #1a1a1a;
background-clip: text;
-webkit-background-clip: text;
-webkit-text-stroke: 8px transparent; } .project-container{
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-gap: 100px; } .project-card{
height: 400px;
position: relative; } .project-img{
width: 100%;
height: 100%;
position: absolute;
top: 0; left: 0;
object-fit: cover;
transition: .5s; } .project-content{
position: relative;
padding: 40px;
color: #fff;
transition: .5s;
opacity: 0; } .project-title{
font-size: 50px;
text-transform: capitalize;
text-align: center;
font-weight: 300; } .project-info{
margin: 40px;
font-size: 20px;
line-height: 30px;
text-align: center; } .project-btn-grp{
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-gap: 20px; } .project-btn{
height: 40px;
text-transform: capitalize;
font-size: 18px;
border: none;
background: #000;
color: #fff;
cursor: pointer; } .project-btn.live{
background: none;
border: 2px solid #fff; } .project-card:hover .project-img{
filter: blur(20px); } .project-card:hover .project-content{
opacity: 1; }
В приведенном выше коде уже добавили fixed позицию в project-section и определили ее непрозрачность в 0. Но для того, чтобы вы увидели выход. убедитесь, что вы указали active класс в project-section как показано ниже.
<section class="project-section active">
Вывод С эффектом наведения
Навигация
Прежде чем идти вперед, давайте сначала сделаем навигационную систему. Для этого напишем код внутри app.js файла.
const links = document.querySelectorAll('.link'); const sections = document.querySelectorAll('section'); let activeLink = 0; links.forEach((link, i) => {
link.addEventListener('click', () => {
if(activeLink != i){
links[activeLink].classList.remove('active');
link.classList.add('active');
sections[activeLink].classList.remove('active');
setTimeout(() => {
activeLink = i;
sections[i].classList.add('active');
}, 1000);
}
}) })
В приведенном выше коде сначала выбираем все ссылки и разделы. После этого определяемactiveLink Эта переменная будет отслеживать текущий активный раздел или ссылку. После этого используем метод forEach чтобы зациклиться на всех ссылках. Внутри этого получаем доступ к отдельной ссылке и ее индексу.
Сначала внутри добавляем событие клика для ссылки с помощью addEventListener. Затем используем простое условие, чтобы убедиться, что пользователь не нажимает на активную ссылку. После этого удаляем активный класс из текущей активной ссылки с помощью classList.remove и добавляемactive класс к щелкнутой ссылке с помощью classList.add. Делаем то же самое, чтобы удалить active класс из активного раздела.
Как только это будет сделано, используемsetTimeout чтобы добавить задержку 1s при выполнении приведенных ниже кодов. Внутри тайм-аута это просто добавление активного класса снова.
Раздел About
Теперь давайте создадим раздел «О нас». В нашем разделе «О нас» есть все, в нем есть раздел навыков, а также временная шкала образования.
Чтобы создать раздел о программе, закодируйте его после project section.
<!-- about section --> <section class="about-section">
<div class="about">
<div class="about-img-container">
<img src="img/home.png" class="about-img" alt="">
<button class="download-cv-btn">downlaod cv</button>
</div>
<p class="about-info">Lorem ipsum.....</p>
</div> </section>
И стилизируйте его.
/* about-section */ .about-section{
width: 100%;
min-height: 100vh;
padding: 150px 100px 0;
position: fixed;
top: 0;
opacity: 0;
transition: 1s; } .about{
width: 100%;
display: grid;
grid-template-columns: 30% 65%;
grid-gap: 40px; } .about-img-container{
position: relative; } .about-info{
color: #fff;
opacity: 0.6;
font-size: 20px;
line-height: 40px; } .about-img{
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 20px; } .download-cv-btn{
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
padding: 10px 20px;
color: #fff;
border: none;
font-size: 16px;
text-transform: capitalize;
cursor: pointer;
transition: .5s;
background: rgba(0, 0, 0, 0.5); } .download-cv-btn:hover{
background: #000; }
Опять же, вы можете ничего не увидеть, обязательно добавьте active класс в about-section и удалите его из всех других разделов.
Итак, теперь мы создадим раздел навыков. Ну, в нашем разделе навыков нет ни одного индикатора развития навыков, который является наиболее используемой вещью в портфолио.
<!-- skills --> <div class="skill-section">
<h1 class="heading">skills</h1>
<div class="skills-container">
<div class="skill-card">
<img src="img/html.png" class="skill-img" alt="">
<div class="skill-level">98%</div>
<h1 class="skill-name">HTML</h1>
<p class="skill-info">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Consequatur, delectus!</p>
</div>
// +4 more cards
</div> </div>
Закодируйте приведенный выше код под элементом about-section и стилизуйте.
/* skills */ .skill-section{
position: relative;
margin: 100px 0; } .heading{
text-align: center;
font-size: 60px;
color: #fff;
text-transform: capitalize;
font-weight: 300;
margin-bottom: 100px; } .skills-container{
width: 95%;
margin: auto;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 100px;
color: #fff; } .skill-card{
position: relative; } .skill-img{
display: block;
margin: auto;
height: 200px; } .skill-name{
font-size: 30px;
font-weight: 300;
text-align: center;
text-transform: capitalize;
margin: 30px 0 20px; } .skill-info{
text-align: center;
opacity: 0.5;
font-size: 18px;
line-height: 30px; } .skill-level{
position: absolute;
top: 80px;
right: 0;
width: 150px;
height: 150px;
display: flex;
justify-content: center;
align-items: center;
font-size: 22px;
border-radius: 50%;
border: 10px solid; } .skill-card:nth-child(1) .skill-level{
background: #ff4f4f28;
border-color: #ff4f4f;
color: #ff4f4f; } .skill-card:nth-child(2) .skill-level{
background: #4fa0ff28;
border-color: #4fa0ff;
color: #4fa0ff; } .skill-card:nth-child(3) .skill-level{
background: #ffed4f28;
border-color: #ffed4f;
color: #ffed4f; } .skill-card:nth-child(4) .skill-level{
background: #52ff4f28;
border-color: #52ff4f;
color: #52ff4f; } .skill-card:nth-child(5) .skill-level{
background: #4fdfff28;
border-color: #4fdfff;
color: #4fdfff; }
А теперь самое сложное - временная шкала CSS.
<!-- timeline --> <div class="timeline">
<h1 class="heading">education and experience</h1>
<div class="card">
<div class="card-body">
<h1 class="card-title">2000-2002</h1>
<p class="card-detail">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Architecto sequi recusandae laborum ipsam dignissimos nostrum vitae provident officia, consectetur ab accusantium corrupti exercitationem temporibus repellat non magni cupiditate ea reprehenderit.</p>
</div>
</div>
//+4 more cards </div>
Обязательно добавьте этот код внутри about-section
/* timeline */ .timeline{
display: block;
width: 80%;
margin: 150px auto; } .timeline .heading{
margin-bottom: 150px; } .card{
width: 45%;
padding: 30px;
border-radius: 10px;
color: #fff;
display: block;
margin: -80px 0;
position: relative;
background: #f00; } .card:nth-child(even){
margin-left: auto; } .card:nth-child(even):before{
content: '';
position: absolute;
left: -15%;
top: 50%;
transform: translateY(-50%);
width: 20px;
height: 20px;
border: 5px solid #191919;
border-radius: 50%; } .card:nth-child(even):after{
content: '';
position: absolute;
left: -8.5%;
top: 50%;
transform: translateY(-50%);
width: 7%;
height: 2px;
background: #fff;
z-index: -1; } .card:nth-child(odd):before{ content: ''; position: absolute; right: -13%; top: 50%; transform: translateY(-50%); width: 20px; height: 20px; border: 5px solid #191919; border-radius: 50%; } .card:nth-child(odd):after{ content: ''; position: absolute; right: -8.5%; top: 50%; transform: translateY(-50%); width: 7%; height: 2px; background: #fff; z-index: -1; } .card:nth-child(2), .card:nth-child(2):before{ background: #ff4f4f; } .card:nth-child(3), .card:nth-child(3):before{ background: #ffb84f; } .card:nth-child(4), .card:nth-child(4):before{ background: #3dca5c; } .card:nth-child(5), .card:nth-child(5):before{ background: #565252; } .card:nth-child(6), .card:nth-child(6):before{ background: #4fa0ff; } .card:nth-child(even) .card-body:before{
content: '';
position: absolute;
left: -12%;
top: 0;
width: 0px;
height: 100%;
border: 1px dashed #fff;
z-index: -1; } .card-title{
font-size: 30px;
font-weight: 300;
margin-bottom: 20px; }
Раздел "Контакты"
и последняя часть контактного раздела. Давайте создадим и это.
<!-- contact section --> <section class="contact-section">
<form class="contact-form">
<input type="text" name="name" id="name" autocomplete="off" placeholder="name">
<input type="text" name="email" id="email" autocomplete="off" placeholder="email">
<textarea name="msg" id="msg" placeholder="message" autocomplete="off"></textarea>
<button type="submit" class="form-submit-btn">contact</button>
</form>
<!-- map -->
<div class="map">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d448181.163742937!2d76.81306771991275!3d28.647279935262464!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x390cfd5b347eb62d%3A0x37205b715389640!2sDelhi!5e0!3m2!1sen!2sin!4v1639489002410!5m2!1sen!2sin" width="600" height="450" style="border:0;" allowfullscreen="" loading="lazy"></iframe>
</div> </section>
Кстати, приведенный выше код iframe - это ссылка для встраивания карты Google. Вы можете получить его с помощью карты Google.
.contact-section{
position: absolute;
top: 0;
opacity: 0;
transition: 1s;
padding: 100px 150px;
height: 100vh;
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-gap: 50px; } .contact-form input, .contact-form textarea{
width: 100%;
height: 40px;
background: rgba(255, 255, 255, 0.2);
border: 1px solid #fff;
margin-bottom: 30px;
border-radius: 5px;
text-transform: capitalize;
color: #fff;
padding: 5px 10px; } ::placeholder{
color: #fff; } #msg{
height: 280px;
resize: none;
font-family: sans-serif; } .form-submit-btn{
background: #ff4f4f;
color: #fff;
text-transform: capitalize;
padding: 15px 40px;
display: block;
margin: auto;
border: none;
border-radius: 10px;
cursor: pointer; } .map{
width: 100%;
height: 100%;
padding: 10px;
border: 2px solid #fff;
background: rgba(255, 255, 255, 0.2);
border-radius: 10px; } .map iframe{
width: 100%;
height: 100%;
border-radius: 5px; }
Вот и все. Отличная работа, ребята. С портфолио покончено.
0 комментариев
Добавить комментарий