HTML Projects for Beginners: How to Create a Personal Portfolio Page [Step-by-Step]

Download Now: 25 Free HTML & CSS Hacks
Danielle Richardson Ellis
Danielle Richardson Ellis


I‘ve learned firsthand the immense value of a personal portfolio website. It’s more than a professional showcase; it‘s a reflection of who you are in the digital world. Whether you’re an artist, a freelancer, or a developer like myself, a well-crafted portfolio can be your strongest ally. It's where you make your first impression, tell your story, and display your achievements in your own unique style.

Woman learning html projects for beginners - personal portfolio

As someone who ventured into the world of web development, I know the prospect of creating a portfolio site can seem challenging. That‘s why I’m here to guide you through it. In this guide, I'll walk you through building your personal portfolio using HTML and CSS. These tools have been the cornerstone of my journey in web design and development, and now I want to share this knowledge with you.

Regardless of your level of expertise, this guide is meant to help you create a portfolio that not only stands out but also truly represents you. Let's embark on this journey together, creating a space that showcases not just your work but your personal and professional growth.

Download Now: 25 HTML & CSS Hacks [Free Guide]

Overview of My Portfolio Website

Creating a personal portfolio website was a pivotal step in my professional journey. As a developer, I wanted a space that not only showcased my technical skills but also reflected my personality and professional ethos. My portfolio is a balanced blend of creativity and functionality, a place where my projects, experiences, and aspirations come to life.

To illustrate, let's explore a practical example on CodePen, providing a hands-on approach to building a portfolio. 

View on CodePen

Design Philosophy:

The design of my portfolio is rooted in simplicity and ease of navigation. I believe that a clean, uncluttered layout enhances the user experience, allowing my work to take center stage. I've used a minimalistic color scheme and typography that align with my personal brand, ensuring that the website feels like an extension of myself.

Content Structure:

The content is strategically organized to guide visitors through my professional story:

  • Header: An eye-catching background image and a professional profile logo, enhancing the visual appeal and making the introduction more engaging.
  • About Section: A more personal look into who I am, my journey, and my passions in the field of web development.
  • Portfolio Showcase: A gallery of my projects. Each project should normally have a brief description of the technologies used, links to live demos and code repositories.
  • Contact Information: A straightforward and accessible section for visitors to reach out to me, be it for potential collaborations, opportunities, or just a friendly conversation.

Technical Aspects:

From a technical standpoint, the site is built primarily with HTML and CSS, with a focus on:

  • HTML5: For structuring the content in a semantic and SEO-friendly manner.
  • CSS3: To style the website and ensure it is responsive, providing an optimal viewing experience on various devices.
  • Bootstrap Framework: Utilized for its responsive design features and pre-built components, which expedited the development process.

In the following sections, I'll break down the steps I took to build this portfolio, hoping to inspire and guide you to create your own unique digital space.

Planning and Structuring Your Portfolio

Before diving into coding, we must plan and structure our portfolio. This stage sets the foundation for a cohesive and effective website.

html projects for beginners personal portfolio: website planning

With these elements in place, you‘re now ready to start the exciting part – bringing your portfolio to life through code. In the next section, we’ll dive into the development process, starting with setting up your HTML structure.

Step-by-Step Guide to Building Your Personal Portfolio Page

Step 1: Setting Up the HTML Structure:

With your plan in place, it‘s time to start building the structure of your portfolio using HTML. This step involves creating the basic skeleton of your site, onto which you’ll later add style and functionality.

1. Setting Up Your Workspace:

  • Choose a Code Editor: Before you start coding, select a code editor. Some popular options include Visual Studio Code, Sublime Text, and Atom.
  • Create a Project Folder: Organize your files by creating a dedicated project folder on your computer. This will contain all your HTML, CSS, images, and other resources.

2. Structuring Your HTML File

Start by creating a new file named index.html, which will serve as the main page of your portfolio.

Begin with the basic HTML5 structure, including the <!DOCTYPE html> declaration, and the opening and closing tags for <html>, <head>, and <body>.

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Your Name - Portfolio</title> </head> <body> <header> <!-- Navigation bar --> </header> <main> <section id="about"> <!-- About me content --> </section> <section id="portfolio"> <!-- Portfolio items --> </section> <section id="contact"> <!-- Contact form --> </section> </main> <footer> <!-- Footer content --> </footer> </body> </html>

By carefully creating and structuring your HTML file, you lay a solid foundation for your portfolio. This framework not only organizes your content effectively but also sets the stage for the next steps, where you will add content to your portfolio.

Step 2: Adding Content to Your HTML Structure

After establishing the HTML framework of your portfolio, the next essential step is to infuse it with content that represents your professional skills, projects, and personal flair. This is where your portfolio begins to take shape, transforming from a basic layout into a compelling narrative of your professional journey.

Example Content Integration in HTML:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Personal Portfolio</title> <link rel="stylesheet" href="style.css"> </head> <body> <header class="header-background"> <nav> <ul> <li><a href="#about">About</a></li> <li><a href="#portfolio">Portfolio</a></li> <li><a href="#contact">Contact</a></li> </ul> </nav> <div class="header-content"> <img src="" alt="Profile Photo of Jane"> <h1>Hi, my name is Jane</h1> <p>Web Developer | Designer | Tech Enthusiast</p> </div> </header> <main> <section id="about"> <h2>~ About Me ~</h2> <img src="" alt="Jane's Profile" class="profile-photo"> <p>Hello there! I'm a Front-end Developer and aspiring App Developer. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum! :)</p> </section> <section id="portfolio"> <h2>~ My Work ~</h2> <div class="project" id="project1">Project 1</div> <div class="project" id="project2">Project 2</div> <div class="project" id="project3">Project 3</div> <div class="project" id="project4">Project 4</div> </section> <section id="contact"> <h2>~ Keep in Touch ~</h2> <button class="btn btn-default td-btn outline white">Send me a message!</button> </section> </main> <footer> <p>Copyright (c) 2023 Jane Doe -- All Rights Reserved</p> </footer> </body> </html>
  • Header: Use the <header> tag to create a section that typically contains your navigation bar and logo. This is the first thing visitors will see, so make it impactful yet straightforward.
  • About Section: Utilize a <section> tag with an id of about for your personal introduction. This section should include a brief bio and a photo, offering a glimpse into who you are professionally and personally.
  • Portfolio Section: Create another <section> for displaying your work. Within this section, use <article> or <div> tags to separate and organize each project or piece of work you want to showcase.
  • Contact Section: Add a <section id=“contact”> for your contact details. This is where you can include a simple contact form, making it easy for potential clients or employers to reach out to you.
  • Footer: The <footer> section is essential for additional information. This could include social media links, a copyright notice, or other relevant links and information.

Step 3: Styling with CSS

With your portfolio's content in place, the next step is to bring it to life with styling. CSS (Cascading Style Sheets) allows you to add colors, fonts, layout designs, and much more to make your portfolio visually appealing and reflective of your personal brand.

Example Content Integration in HTML:

:root {     --primary-color: #29a598;     --text-color: #394c4a;     --background-light: #ffffff;     --header-height: 100vh; } *, *::before, *::after {     box-sizing: border-box; } html {     font-size: 110%; } body {     margin: 0;     padding: 0;     font-family: 'Work Sans', Helvetica, sans-serif;     color: #394c4a;     line-height: 1.5;     overflow-x: hidden; } .header-background {     background: linear-gradient(rgba(255, 254, 253, 0.7), rgba(255, 254, 253, 0.9)),                 url("") center center fixed;     background-size: cover;     text-align: center;     height: 100vh;     display: flex;     flex-direction: column;     justify-content: center;     align-items: center; } nav {     width: 100%;     position: absolute;     top: 0;     left: 0;     background: rgba(0, 0, 0, 0.5);     padding: 15px 0; } nav ul {     list-style: none;     margin: 0 auto;     padding: 0;     text-align: center; } nav ul li {     display: inline;     margin: 0 10px; } nav ul li a {     color: white;     text-decoration: none;     font-family: 'Unica One', cursive;     font-size: 1.2rem; } .header-content img {     max-width: 250px;     border-radius: 50%; } .header-content h1, .header-content p {     margin: 0.5rem 0;     font-family: 'Unica One', cursive; } #about {     background-color: #ffffff;     padding-left: 40px;     padding-right: 40px;     margin: 40px;     border-radius: 0.5%;     text-align: center; } .profile-photo {     max-width: 40%;     height: auto;     border-radius: 50%; } #portfolio {     background-color: #0fbfbf;     padding: 15px;     border-radius: 0.5%;     text-align: center;     margin-bottom: 10px; } .project {     width: 200px;     height: 200px;     border: 1px solid #ccc;     margin: 10px;     display: inline-block;     line-height: 200px; } #contact {     background-color: #ffbc4b;     padding: 15px;     border-radius: 0.5%;     text-align: center; } .td-btn {     padding: 12px 36px;     text-transform: uppercase;     transition: background-color 0.2s ease-in-out;     background-color: #0fbfbf; } footer {     background-color: #f4f4f4;     text-align: center;     padding: 10px; } /* Additional Styles */ h2 {     color: #333;     font-family: 'Unica One', cursive;     font-size: 2.3rem; } a {     color: #29a598;     transition: color 0.2s ease-in-out; } a:hover {     color: #208479; } @media (max-width: 768px) {     nav ul li {         display: block;         margin: 10px 0;     }     .profile-photo {         width: 50%;         margin: 0 auto;     } }

  • Root Variables: Sets custom CSS properties (variables) like --primary-color, --text-color, --background-light, and --header-height. This makes it easy to maintain consistency and change these values globally if needed later.
  • Box Sizing:  Ensures that padding and border sizes are included in the total width and height of elements, making layout management more predictable.
  • HTML and Body: The html tag's font size is set to 110%, increasing the default size of text slightly. The body tag styles include setting the font family to 'Work Sans', Helvetica, sans-serif, default text color, line height for readability, and hiding horizontal overflow (overflow-x).
  • Header Background: Applies a background image and a linear gradient overlay for the header, making it visually striking. It's set to cover the full viewport height (100vh) and is centered using flexbox.
  • Navigation Bar: The nav tag styles position the navigation bar at the top with a semi-transparent background. The ul within nav centers the list items (links) and removes default list styling. nav ul li a styles the navigation links with white color, a specific font, and size.
  • Header Content: Styles the profile image with a maximum width and round shape (border-radius). .header-content h1, .header-content p apply custom font styling to header elements.
  • Sections: Each section has unique background colors, padding, margin, border-radius for rounded corners, and text-align for center alignment. .profile-photo styles the image in the About section to be responsive (max-width: 40%) and round.
  • Project Styling: Styles individual project boxes in the portfolio section with fixed dimensions, border, margin, and center alignment of text.
  • Contact Section and Footer: They are styled similarly to other sections but with their unique background colors and padding.
  • Additional Styles: They are styled with custom fonts, colors, and hover effects.
  • Media Queries: Contains styles for mobile responsiveness, altering the layout and size of elements for smaller screens, particularly the navigation menu and profile photo.

Voila! You have now created a personal portfolio website. This CSS setup ensures a clean, professional look with a personal touch, providing a good user experience across different devices and screen sizes.

Final Reflection: Your Gateway to Personal Branding

Building my portfolio was not just about displaying my work; it was about crafting a narrative. It's a dynamic platform that grows with me, continuously evolving to reflect my current skills and experiences. The process of creating it was as much a journey of self-discovery as it was about honing my technical abilities.

Looking Ahead:

As you step forward, remember that your portfolio is a living entity. Regular updates, new projects, and ongoing refinement will keep it fresh and relevant. Experiment with new technologies, styles, and content to reflect the current trends and your evolving skillset.

Your Next Steps:

  • Expand Your Learning: Dive deeper into web development and design. Explore advanced technologies and frameworks to enhance your portfolio further.
  • Engage with Your Audience: Use your portfolio to connect with peers, potential employers, and clients. Share your journey and insights on social media platforms and professional networks.
  • Reflect and Iterate: Regularly revisit your portfolio to assess and refine it. As your career progresses, so should your portfolio, aligning with your growing experiences and goals.

Remember, every line of code you write and every design choice you make adds a unique chapter to your digital story. Cherish this journey, for it is yours and yours alone. 


Topics: HTML

Related Articles


Tangible tips and coding templates from experts to help you code better and faster.


    CMS Hub is flexible for marketers, powerful for developers, and gives customers a personalized, secure experience