HTML & SCSS Pedigree

Inspired by http://codepen.io/ricardo_fahham/pen/RRPMQR

by Scott Currell

HTML

<div id="wrapper"><span class="label">Self</span>
  <div class="branch"><!-- generation 1 -->
    
    <div class="entry"><span class="label">Father</span>
      <div class="branch"><!-- generation 2 -->

        <div class="entry"><span class="label">Grandfather</span>
          <div class="branch"><!-- generation 3 -->
            <div class="entry"><span class="label">Great Grandfather</span></div>
            <div class="entry"><span class="label">Great Grandmother</span></div>
          </div><!-- end generation 3 -->
        </div>

        <div class="entry"><span class="label">Grandmother</span>
          <div class="branch"><!-- generation 3 -->
            <div class="entry"><span class="label">Great Grandfather</span></div>
            <div class="entry"><span class="label">Great Grandmother</span></div>
          </div><!-- end generation 3 -->
        </div>

      </div><!-- end generation 2 -->
    </div>
    
    <div class="entry"><span class="label">Mother</span>
      <div class="branch"><!-- generation 2 -->

        <div class="entry"><span class="label">Grandfather</span>
          <div class="branch"><!-- generation 3 -->
            <div class="entry"><span class="label">Great Grandfather</span></div>
            <div class="entry"><span class="label">Great Grandmother</span></div>
          </div><!-- end generation 3 -->
        </div>

        <div class="entry"><span class="label">Grandmother</span>
          <div class="branch"><!-- generation 3 -->
            <div class="entry"><span class="label">Great Grandfather</span></div>
            <div class="entry"><span class="label">Great Grandmother</span></div>
          </div><!-- end generation 3 -->
        </div>

      </div><!-- end generation 2 -->
    </div>

  </div><!-- end generation 1 -->
</div>

SCSS

*, *:before, *:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

body {
  min-width: 1200px;
  margin: 0;
  padding: 50px;
  color: #a7a7a7;
  font: 16px Verdana, sans-serif;
  /* background: #2e6ba7; */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

#wrapper {
  position: relative;
}

.branch {
  position: relative;
  margin-left: 250px;
  &:before {
    content: "";
    width: 50px;
    border-top: 1px solid #a7a7a7;
    position: absolute;
    left: -100px;
    top: 50%;
    margin-top: 1px;
  }
}

.entry {
  position: relative;
  min-height: 60px;
  &:before {
    content: "";
    height: 100%;
    border-left: 1px solid #a7a7a7;
    position: absolute;
    left: -50px;
  }
  &:after {
    content: "";
    width: 50px;
    border-top: 1px solid #a7a7a7;
    position: absolute;
    left: -50px;
    top: 50%;
    margin-top: 1px;
  }
  &:first-child {
    &:before {
      width: 10px;
      height: 50%;
      top: 50%;
      margin-top: 2px;
      border-radius: 10px 0 0 0;
    }
    &:after {
      height: 10px;
      border-radius: 10px 0 0 0;
    }
  }
  &:last-child {
    &:before {
      width: 10px;
      height: 50%;
      border-radius: 0 0 0 10px;
    }
    &:after {
      height: 10px;
      border-top: none;
      border-bottom: 1px solid #a7a7a7;
      border-radius: 0 0 0 10px;
      margin-top: -9px;
    } 
  }
}

.label {
  display: block;
  min-width: 150px;
  padding: 5px 10px;
  line-height: 20px;
  text-align: center;
  border: 1px solid #a7a7a7;
  border-radius: 5px;
  position: absolute;
  left: 0;
  top: 50%;
  margin-top: -15px;
}