arrow back

Personal Portfolio


Trying to keep things simple and minimalistic I still wanted my portfolio to be unique and memorable.

While doing #100DaysOfCode challenge and tracking my day-to-day progress on this project I got some positive feedback. That’s why I decided to share some of the techniques I used for building this portfolio.

Images appear on link hover hi message icon

To get this effect I used absolutely positioned images and CSS combinators. Let’s see how images appear for the Music Database link on the home page.


<li class="projects__item">
    class="projects__link projects__link--musicdb"
    >Music Database >></a
    class="projects__img projects__img--musicdb-1"
    alt="iphone mockup"
    class="projects__img projects__img--musicdb-2"
    alt="iphone mockup"

CSS for img initial state (who is not familiar with SCSS syntax "&" replaces parent selector, in this case ".projects" and ".projects__img" for nested elements):

&__img {
    position: absolute;
    z-index: -1;
    height: 70vh;
    opacity: 0;
    transition: all 0.8s ease-out;              

    &--musicdb-1 {
      left: -30vw;
      bottom: 2rem;

    &--musicdb-2 {
      left: 75vw;
      bottom: 100vh;

As images are the link’s siblings I used general sibling selector tilde (~). Thanks to Ladybug’s CSS Combinators Cheat Sheet!

Changing left and bottom values on hover give a visual effect of moving from respective sides.

CSS for link’s hover state:

&__link--musicdb:hover ~ &__img--musicdb-1 {
    opacity: 0.2;
    left: 40vw;
&__link--musicdb:hover ~ &__img--musicdb-2 {
    opacity: 0.2;
    bottom: 2rem;

And that’s it! Nothing fancy!

Hamburger menu for mobile version

Having a white background and not possible to see images on links’ hover state for the mobile version I felt that I need to add something colorful and eyecatching.


Currently, I’m doing awesome SASS and CSS course by Jonas Schmedtmann. I learned a checkbox trick from him. Using a hidden checkbox allows creating a hamburger menu only by using CSS.

To make this work there are 4 elements inside hamburger div:


<div class="hamburger mobile">
    <input type="checkbox" class="hamburger__checkbox" id="navi-toggle" />

    <label for="navi-toggle" class="hamburger__button">
        <span class="hamburger__icon">

    <div class="hamburger__background">&nbsp;</div>

    <nav class="hamburger__menu">
        <ul class="menu__list">
            <li class="menu__item">
                <a href="./pages/aboutme.html" class="menu__link">About me</a>
            <li class="menu__item">
                <a href="./pages/contact.html" class="menu__link">Contact</a>
            <li class="menu__item">
                <a href="#" class="menu__link">CV</a>

So there are two states for each of these elements, initial when the checkbox is unchecked and checked.

Initial state:

Checked state:

Again, nothing really complicated.

Gradient border

To be honest when I found that CSS has no simple way to create a gradient for borders I was surprised. Luckily for all of us, we have I used wrapper div for doing it, this article gives more examples.

That’s how I implemented it for Get in Touch button on the main page.


<div class="gradient-box">
    <a href="" class="btn">Get in touch</a>


.gradient-box {
    display: inline-block;
    position: relative;
    padding: 1.2rem 1.6rem;
    background: $color-white;
    background-clip: padding-box;
    border: solid 1px transparent;
    border-radius: 15rem;
    margin-top: 3.2rem;
    cursor: pointer;
    &:before {
      content: "";
      position: absolute;
      top: 0;
      right: 0;
      bottom: 0;
      left: 0;
      z-index: -1;
      margin: -1px;
      border-radius: inherit;
      background: linear-gradient(
        to right bottom,

The negative margin of the before pseudo-element is the required border.

Thanks for reading this far! You can find the complete source code for this project here.