Unique Portfolio UI Design to HTML CSS Convert

Unique Portfolio UI Design to HTML CSS Convert



Unique Portfolio UI Design to HTML CSS

After Designed this unique portfolio UI web template in adobe xd, I have converted it into HTML CSS and a little bit of custom javascript for side navigation menu.


Watch Video Tutorial
Part-1 This is part 1 video tutorial for the background design.
https://youtu.be/cPLVsdO_Qm4



Part-2 This is part 2 video tutorial for the javascript toggle navigation menu.
https://youtu.be/FWR_mbDT0KE



Part-3 This is part 3 video tutorial for the profile area.
https://youtu.be/GtNSQnhE1pg



Part-4 This is part 4 video tutorial for the expertise progress bars.
https://youtu.be/YkpFgg4fYP4



Part-5 This is part 5 / final video tutorial for the CSS social icons.
https://youtu.be/Nij5vBOwFQw



HTML Code

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Unique Portfolio Web Design to HTML</title>
  <!-- Style Sheet -->
  <link rel="stylesheet" href="assets/css/style.css">
</head>
<body>
  <!-- Background Design -->
  <div class="design">
    <div class="dots-group group1">
      <img class="top-dots" src="assets/svg/dots.svg" alt="dots">
      <img class="line" src="assets/svg/line.svg" alt="line">
      <img class="bottom-dots" src="assets/svg/dots.svg" alt="dots">
    </div>
    <div class="dots-group group2">
      <img class="top-dots" src="assets/svg/dots.svg" alt="dots">
      <img class="line" src="assets/svg/line.svg" alt="line">
      <img class="bottom-dots" src="assets/svg/dots.svg" alt="dots">
    </div>
    <div class="shapes">
      <img class="dots-1" src="assets/svg/dots.svg" alt="dots">
      <img class="dots-2" src="assets/svg/dots.svg" alt="dots">
      <img class="dots-3" src="assets/svg/dots-gray.svg" alt="dots">
      <img class="dots-4" src="assets/svg/dots-gray.svg" alt="dots">
      <img class="circle-1" src="assets/svg/small-circle.svg" alt="circle">
      <img class="circle-2" src="assets/svg/small-circle.svg" alt="circle">
      <img class="circle-3" src="assets/svg/big-circle.svg" alt="circle">
    </div>
  </div>
  <!-- Navigation Menu -->
  <img class="menu-circle" src="assets/svg/menu-circle.svg" alt="menu">
  <div class="menu" id="menu">
    <nav>
      <ul>
        <li><a href="" class="home active"><span>Home</span></a></li>
        <li><a href="" class="about"><span>About</span></a></li>
        <li><a href="" class="contact"><span>Contact</span></a></li>
        <li><a href="" class="services"><span>Services</span></a></li>
      </ul>
    </nav>
    <div class="open" id="menu-btn"></div>
  </div>
  <!-- Content Area -->
  <div class="content-box">
    <div class="rectangle top"></div>
    <img class="box-line top" src="assets/svg/line.svg" alt="line">
    <img class="box-line bottom" src="assets/svg/line.svg" alt="line">
    <div class="rectangle bottom"></div>
    <div class="content">
      <div class="dots">
        <img src="assets/svg/dots.svg" alt="dots">
        <img src="assets/svg/dots.svg" alt="dots">
      </div>
      <div class="content-data">
        <div class="content-shape">
          <img class="img-shape" src="assets/svg/img-shape.svg" alt="img-shape">
          <div class="img-circle"></div>
        </div>
        <div class="content-text">
          <h1>John Doe</h1>
          <p>Hi, I am a Web Designer and Developer</p>
          <div class="chat-btn">
            <a href=""><img class="chat" src="assets/svg/chat.svg" alt="chat"></a>
          </div>
        </div>
      </div>
      <div class="heading">
        <h2>Expertise</h2>
        <hr>
        <div class="dot"></div>
      </div>
      <div class="expertise">
        <div class="progress-bar">
          <span class="progress-complete html"></span>
          <p>HTML</p>
        </div>
        <div class="progress-bar">
          <span class="progress-complete css"></span>
          <p>CSS</p>
        </div>
        <div class="progress-bar">
          <span class="progress-complete js"></span>
          <p>JS</p>
        </div>
      </div>
    </div>
  </div>
  <!-- Social Icons -->
  <div class="social">
    <div class="circle facebook">
      <a href="">
        <svg id="Capa_1" enable-background="new 0 0 512 512" height="70" viewBox="0 0 512 512" width="70" xmlns="http://www.w3.org/2000/svg"><path d="m512 256c0-141.4-114.6-256-256-256s-256 114.6-256 256 114.6 256 256 256c1.5 0 3 0 4.5-.1v-199.2h-55v-64.1h55v-47.2c0-54.7 33.4-84.5 82.2-84.5 23.4 0 43.5 1.7 49.3 2.5v57.2h-33.6c-26.5 0-31.7 12.6-31.7 31.1v40.8h63.5l-8.3 64.1h-55.2v189.5c107-30.7 185.3-129.2 185.3-246.1z"/></svg>
      </a>
    </div>
    <div class="circle youtube">
      <a href="">
        <svg height="70" viewBox="0 0 512 512" width="70" xmlns="http://www.w3.org/2000/svg"><path d="m224.113281 303.960938 83.273438-47.960938-83.273438-47.960938zm0 0"/><path d="m256 0c-141.363281 0-256 114.636719-256 256s114.636719 256 256 256 256-114.636719 256-256-114.636719-256-256-256zm159.960938 256.261719s0 51.917969-6.585938 76.953125c-3.691406 13.703125-14.496094 24.507812-28.199219 28.195312-25.035156 6.589844-125.175781 6.589844-125.175781 6.589844s-99.878906 0-125.175781-6.851562c-13.703125-3.6875-24.507813-14.496094-28.199219-28.199219-6.589844-24.769531-6.589844-76.949219-6.589844-76.949219s0-51.914062 6.589844-76.949219c3.6875-13.703125 14.757812-24.773437 28.199219-28.460937 25.035156-6.589844 125.175781-6.589844 125.175781-6.589844s100.140625 0 125.175781 6.851562c13.703125 3.6875 24.507813 14.496094 28.199219 28.199219 6.851562 25.035157 6.585938 77.210938 6.585938 77.210938zm0 0"/></svg>
      </a>
    </div>
    <div class="circle twitter">
      <a href="">
        <svg height="70" viewBox="0 0 512 512" width="70" xmlns="http://www.w3.org/2000/svg"><path d="m256 0c-141.363281 0-256 114.636719-256 256s114.636719 256 256 256 256-114.636719 256-256-114.636719-256-256-256zm116.886719 199.601562c.113281 2.519532.167969 5.050782.167969 7.59375 0 77.644532-59.101563 167.179688-167.183594 167.183594h.003906-.003906c-33.183594 0-64.0625-9.726562-90.066406-26.394531 4.597656.542969 9.277343.8125 14.015624.8125 27.53125 0 52.867188-9.390625 72.980469-25.152344-25.722656-.476562-47.410156-17.464843-54.894531-40.8125 3.582031.6875 7.265625 1.0625 11.042969 1.0625 5.363281 0 10.558593-.722656 15.496093-2.070312-26.886718-5.382813-47.140624-29.144531-47.140624-57.597657 0-.265624 0-.503906.007812-.75 7.917969 4.402344 16.972656 7.050782 26.613281 7.347657-15.777343-10.527344-26.148437-28.523438-26.148437-48.910157 0-10.765624 2.910156-20.851562 7.957031-29.535156 28.976563 35.554688 72.28125 58.9375 121.117187 61.394532-1.007812-4.304688-1.527343-8.789063-1.527343-13.398438 0-32.4375 26.316406-58.753906 58.765625-58.753906 16.902344 0 32.167968 7.144531 42.890625 18.566406 13.386719-2.640625 25.957031-7.53125 37.3125-14.261719-4.394531 13.714844-13.707031 25.222657-25.839844 32.5 11.886719-1.421875 23.214844-4.574219 33.742187-9.253906-7.863281 11.785156-17.835937 22.136719-29.308593 30.429687zm0 0"/></svg>
      </a>
    </div>
  </div>

  <!-- JavaScript -->
  <script src="assets/js/main.js"></script>
</body>
</html>

CSS Code

*{
	padding: 0;
	margin: 0;
	box-sizing: border-box;
}
body{
	width: 100%;
	height: 100%;
	font-family: "dosis";
	font-size: 16px;
	font-weight: bold;
	background-color: #ffffff;
}
/* Background Design Styling */
.design{
	width: 100%;
	height: 100%;
}
.dots-group{
	width: 48px;
	height: 100%;
	text-align: center;
	display: flow-root;
}
.dots-group.group1{
	position: relative;
	left: 90px;
	float: left;
}
.dots-group.group2{
	position: relative;
	right: 20px;
	float: right;
}
.dots-group .line{
	width: auto;
	height: auto;
	margin: 25px auto;
}
.shapes img{
	width: 24px;
	height: 24px;
}
.shapes .dots-1{
	position: absolute;
	top: 43px;
	left: 900px;
	animation: animateDots 5s linear infinite alternate;
}
.shapes .dots-2{
	position: absolute;
	top: 510px;
	left: 1274px;
}
.shapes .dots-3{
	position: absolute;
	top: 200px;
	left: 1274px;
}
.shapes .dots-4{
	position: absolute;
	top: 600px;
	left: 900px;
	animation: animateDots 6s linear infinite alternate;
}
.shapes .circle-1{
	position: absolute;
	top: 150px;
	left: 915px;
}
.shapes .circle-2{
	position: absolute;
	top: 560px;
	left: 915px;
}
.shapes .circle-3{
	position: absolute;
	top: 350px;
	left: 1140px;
	animation: animateCircle 2s linear infinite alternate;
}
@keyframes animateDots{
	0%{
		transform: perspective(800px) rotate3d(0,0,0,0deg);
	}
	100%{
		transform: perspective(800px) rotate3d(0,1,0,360deg) translate(20%, 20%);
	}
}
@keyframes animateCircle{
	0%{
		transform: translate(0%, 0%);
	}
	100%{
		transform: translate(20%, 20%);
	}
}
/* Menu Styling */
.menu{
	width: 70px;
	height: 500px;
	position: relative;
	top: 75px;
	left: 0;
	box-shadow: inset 0 0 3px #bfbfbf;
	border-radius: 0 5px 5px 0;
	background-color: #ffffff;
	z-index: 2;
	transition: width 0.5s ease-in;
}
.menu-circle{
	width: 70px;
	height: 70px;
	position: absolute;
	top: 290px;
	left: 35px;
	transform: translate(0, -50%);
	transform: rotate(270deg);
	z-index: 0;
}
.open, .close{
	width: 50px;
	height: 50px;
	border: 5px solid #ffffff;
	border-radius: 50%;
	box-shadow: 0 0 3px #bfbfbf;
	position: absolute;
	top: 50%;
	left: 45px;
	background-color: #355193;
	transform: translate(0, -50%);
	cursor: pointer;
	transition: all 0.5s ease-in;
}
.open:after{
	content: url(../svg/arrow.svg);
	width: 13px;
	height: 26px;
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	transition: all 0.5s ease-in 0.2s;
}
.close:after{
	content: url(../svg/arrow.svg);
	width: 40px;
	height: 40px;
	position: absolute;
	top: 35%;
	left: 15%;
	transform: translate(-50%, -50%) rotate(540deg) scale(0.7);
	transition: all 0.5s ease-in 0.2s;
}
.open:hover, .close:hover{
	background-color: #6279BF;
}
.open:hover:after{
	width: 8px;
}
nav{
	width: 100%;
	height: 100%;
	position: absolute;
}
nav ul{
	width: 100%;
	height: 100%;
	display: flex;
	flex-direction: column;
	justify-content: space-around;
	padding: 10px;
	list-style: none;
}
nav ul li a{
	width: 40px;
	height: 40px;
	display: block;
	color: #bfbfbf;
	letter-spacing: 1.1px;
	padding: 5px;
	text-decoration: none;
	transition: all 0.2s ease-in-out 0s;
}
nav ul li a span{
	visibility: hidden;
	opacity: 0;
	position: absolute;
	top: 50%;
	left: 50px;
	transform: translate(0, -50%);
	transition: opacity 1s ease-out 0.2s;
}
nav ul li a:hover,
nav ul li a.active{
	color: #6279BF;
}
nav ul li a.home{
	background: url(../svg/home-gray.svg) no-repeat;
	transition: all 0.2s ease-in-out 0s;
}
nav ul li a.home:hover,
nav ul li a.home.active{
	background: url(../svg/home.svg) no-repeat;
}
nav ul li a.about{
	background: url(../svg/about-gray.svg) no-repeat;
	transition: all 0.2s ease-in-out 0s;
}
nav ul li a.about:hover,
nav ul li a.about.active{
	background: url(../svg/about.svg) no-repeat;
}
nav ul li a.contact{
	background: url(../svg/contact-gray.svg) no-repeat;
	transition: all 0.2s ease-in-out 0s;
}
nav ul li a.contact:hover,
nav ul li a.contact.active{
	background: url(../svg/contact.svg) no-repeat;
}
nav ul li a.services{
	background: url(../svg/star-gray.svg) no-repeat;
	transition: all 0.2s ease-in-out 0s;
}
nav ul li a.services:hover,
nav ul li a.services.active{
	background: url(../svg/star.svg) no-repeat;
}
/* Content Styling */
.content-box{
	width: 600px;
	height: 100%;
	position: absolute;
	left: 220px;
	top: 0;
}
.content-box .rectangle{
	width: 100%;
	height: 10px;
	position: absolute;
	background-color: #355193;
}
.content-box .rectangle.top{
	top: 0;
}
.content-box .rectangle.bottom{
	bottom: 0;
}
.content-box .box-line{
	position: absolute;
	left: 50%;
	transform: rotate(90deg);
}
.content-box .box-line.top{
	top: -230px;
}
.content-box .box-line.bottom{
	bottom: -230px;
}
.content{
	width: 100%;
	height: 580px;
	background-color: #ffffff;
	box-shadow: inset 0 0 3px #bfbfbf;
	position: absolute;
	top: 50%;
	transform: translate(0, -50%);
	padding: 20px;
	border-radius: 5px;
}
.content .dots{
	display: flex;
	justify-content: space-between;
}
.content .dots img{
	width: 24px;
	height: 24px;
}
.content .content-data{
	display: flex;
	justify-content: space-between;
	align-items: center;
}
.content .content-data .content-shape{
	position: relative;
}
.content .content-data .content-shape img{
	width: 200px;
	height: 250px;
	position: relative;
}
.content .content-data .content-shape .img-circle{
	width: 130px;
	height: 130px;
	position: absolute;
	bottom: 20px;
	right: 10px;
	border-radius: 50%;
	box-shadow: inset 0 0 3px #bfbfbf;
	background: #ffffff url(../img/man.jpg) no-repeat;
	background-position: center center;
	background-size: cover;
	transition: 0.5s ease-in-out;
}
.content .content-data .content-shape .img-circle-hover{ /* will be used on js event */
	transform: perspective(600px) rotate3d(0, 1, 0, 30deg);
	transition: transform 0.5s ease-in-out;
}
.content .content-data .content-text{
	text-align: center;
	margin-right: 40px;
}
.content .content-data .content-text h1{
	color: #6279BF;
	font-size: 50px;
	text-transform: uppercase;
	margin-bottom: 10px;
}
.content .content-data .content-text p{
	color: #6279BF;
	font-size: 20px;
	margin-bottom: 30px;
}
.content .content-data .content-text .chat-btn{
	width: 70px;
	height: 70px;
	background-color: #6279BF;
	border: 5px solid #ffffff;
	box-shadow: 0 0 3px #bfbfbf;
	border-radius: 50%;
	position: relative;
	margin: 0 auto;
	transition: box-shadow 0.5s;
}
.content .content-data .content-text .chat-btn img{
	width: 40px;
	height: 40px;
	position: absolute;
	top: 15px;
	left: 15px;
	object-fit: contain;
	transform: scale(1);
	transition: transform 0.5s;
}
.content .content-data .content-text .chat-btn:hover{
	box-shadow: 0 0 5px #bfbfbf;
}
.content .content-data .content-text .chat-btn:hover img{
	transform: scale(1.1);
}
.content .heading{
	height: 40px;
	display: flex;
	justify-content: space-between;
	align-items: center;
	column-gap: 15px;
	margin: 40px;
}
.content .heading h2{
	color: #6279bf;
	text-transform: uppercase;
}
.content .heading hr{
	width: 100%;
	height: 2px;
	background-color: #bfbfbf;
	border: 0;
	border-radius: 50%;
}
.content .heading .dot{
	width: 12px;
	height: 8px;
	background-color: #6279bf;
	border: 0;
	border-radius: 100%;
}
.content .expertise{
	display: flex;
	justify-content: space-around;
	align-items: center;
}
.content .expertise .progress-bar{
	width: 80px;
	height: 80px;
	position: relative;
	border: 3px solid #bfbfbf;
	border-radius: 50%;
	clip: rect(0px, 100px, 100px, 50px);
}
.content .expertise .progress-complete{
	width: 80px;
	height: 80px;
	position: absolute;
	top: -3px;
	left: -3px;
	border: 3px solid #6279bf;
	border-radius: 50%;
	transform: rotate(270deg);
}
.content .expertise .progress-bar p{
	width: 80px;
	height: 80px;
	display: flex;
	justify-content: center;
	align-items: center;
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	font-size: 20px;
	color: #6279bf;
}
.content .expertise .html{
	clip: rect(0px, 78px, 85px, 0px);
}
.content .expertise .css{
	clip: rect(0px, 78px, 100px, 0px);
}
.content .expertise .js{
	clip: rect(0px, 77px, 100px, 0px);
}
/* Social Icons */
.social{
	height: 100%;
	position: absolute;
	right: 50px;
	top: 0;
}
.social .circle{
	width: 90px;
	height: 90px;
	background-color: #ffffff;
	box-shadow: 0 0 3px #bfbfbf;
	border-radius: 50%;
	position: relative;
}
.social .circle:after{
	content: "";
	width: 90px;
	height: 90px;
	background-color: #ffffff;
	box-shadow: 0 0 3px #bfbfbf;
	border-radius: 50%;
	border: 2px solid #6279BF;
	position: absolute;
	top: -2px;
	left: -2px;
	clip: rect(0, 20px, 100px, 0);
	z-index: -1;
}
.social .circle:before{
	content: "";
	width: 90px;
	height: 90px;
	background-color: #ffffff;
	box-shadow: 0 0 3px #bfbfbf;
	border-radius: 50%;
	border: 2px solid #6279BF;
	position: absolute;
	top: -2px;
	left: -2px;
	clip: rect(0, 20px, 50px, 0);
	transform: rotate(180deg);
	z-index: -1;
}
.social .circle:hover{
	transform: rotate3d(0, 1, 0, 360deg);
}
.social svg{
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}
.social svg path{
	fill: #6279BF;
}
.social .facebook{
	top: 100px;
	right: 150px;
	transition: 0.5s;
}
.social .youtube{
	top: 200px;
	right: 300px;
	transition: 0.5s;
}
.social .twitter{
	top: 300px;
	right: 150px;
	transition: 0.5s;
}
.social .facebook:hover svg path{
	fill: #3b5999;
}
.social .youtube:hover svg path{
	fill: #cd201f;
}
.social .twitter:hover svg path{
	fill: #55acee;
}

Unique Portfolio UI Design in HTML CSS


Adobe xd to html

JavaScript Custom Code

document.getElementById("menu-btn").addEventListener("click", function(){

	var menu = document.getElementById('menu');
	var navAnchor = document.querySelectorAll("nav a");
	var navSpan = document.querySelectorAll("nav a span");

	if (this.classList.contains("open")) {

		this.style.width = "40px";
		this.style.height = "40px";
		this.style.left = "110px";

		this.classList.remove("open");
		this.classList.add("close");

		menu.style.width = "130px";

		for (var i = 0; i < navAnchor.length; i++) {
			navAnchor[i].style.transform = "scale(0.9)";
		}

		for (var i = 0; i < navSpan.length; i++) {
			navSpan[i].style.visibility = "visible";
			navSpan[i].style.opacity = "1";
		}
	}
	else{

		this.style.width = "50px";
		this.style.height = "50px";
		this.style.left = "45px";

		this.classList.remove("close");
		this.classList.add("open");

		menu.style.width = "70px";

		for (var i = 0; i < navAnchor.length; i++) {
			navAnchor[i].style.transform = "scale(1)";
		}

		for (var i = 0; i < navSpan.length; i++) {
			navSpan[i].style.visibility = "hidden";
			navSpan[i].style.opacity = "0";
		}
	}
});

document.querySelector('.chat-btn').addEventListener("mouseenter", function() {

	var imgCircle = document.querySelector('.img-circle');
	imgCircle.classList.add("img-circle-hover");

});
document.querySelector('.chat-btn').addEventListener("mouseleave", function() {

	var imgCircle = document.querySelector('.img-circle');
	imgCircle.classList.remove("img-circle-hover");

});


For image taken from
Image by Freepik

Post a Comment

0 Comments