2016-04-24 44 views
3

我想要實現使用jQuery這樣的效果:如何在滾動上獲得「膨脹」效果?

enter image description here

我需要:

  • 確定是否.project在檢視。
  • 如果不是這樣,我需要將它從0.3縮放到1,並在對象佔視口25%(從頂部75%)時將不透明度從0更改爲1。

這就是我所擁有的,但是當我滾動時,這些卡似乎一下子倒轉。

$(window).scroll(function() { 
 
    var scrollTop = $(window).scrollTop(), 
 
     scaleVal = (1/scrollTop), 
 
     screenBottom = $(window).scrollTop() + $(window).height(), 
 
     offset = $('.project').offset().top; 
 
    if(scrollTop > (scrollTop/2)){ 
 
     $(".project").css('transform', "scale("+scaleVal+")"); 
 
     $(".project").css('opacity', scaleVal); 
 
    } 
 
}); 
 

 
// var screenBottom = $(window).height(); 
 
// $(window).scroll(function{ 
 
// screenBottom = $(window).height() + $(window).scrollTop(); 
 
// if (screenBottom == cardStartsHeight) { 
 
// // magic on the card 
 
// } 
 
// });
@charset "UTF-8"; 
 
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,800|Gentium+Book+Basic); 
 
.project--image, .project--description { 
 
    float: left; 
 
} 
 

 
body { 
 
    background: #eee; 
 
    font-family: "Open Sans", arial, sans-serif; 
 
} 
 

 
img { 
 
    width: 100%; 
 
    height: auto; 
 
} 
 

 
#wrapper { 
 
    margin: 0 auto; 
 
    max-width: 1024px; 
 
    padding: 0 30px; 
 
} 
 
#wrapper::after { 
 
    clear: both; 
 
    content: ""; 
 
    display: table; 
 
} 
 

 
.side-bar { 
 
    width: 20%; 
 
    position: fixed; 
 
    top: 30px; 
 
} 
 
.side-bar .logo { 
 
    border-bottom: dashed 1px #ccc; 
 
    padding-bottom: 20px; 
 
} 
 
.side-bar .logo .avatar { 
 
    height: 90px; 
 
    width: 90px; 
 
    background-color: #ccc; 
 
    background-image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/243277/avatar.jpg"); 
 
    background-size: cover; 
 
    border-radius: 50%; 
 
    margin-bottom: 10px; 
 
} 
 
.side-bar .logo .name { 
 
    font-size: 12px; 
 
    display: block; 
 
    text-transform: uppercase; 
 
} 
 
.side-bar .logo .title { 
 
    font-size: 16px; 
 
} 
 
.side-bar nav a { 
 
    color: #4A90E2; 
 
    margin-top: 20px; 
 
    text-decoration: none; 
 
    display: block; 
 
    font-size: 12px; 
 
} 
 
.side-bar nav a i { 
 
    margin-right: 6px; 
 
    opacity: 0.5; 
 
    -webkit-transition: all 0.15s ease-out 0s; 
 
    transition: all 0.15s ease-out 0s; 
 
} 
 
.side-bar nav a:hover i { 
 
    opacity: 1; 
 
} 
 

 
main { 
 
    width: 75%; 
 
    box-sizing: border-box; 
 
    margin-left: 25%; 
 
} 
 

 
.project { 
 
    margin-top: 30px; 
 
    box-shadow: 0 8px 20px rgba(50, 50, 50, 0.3); 
 
    background: white; 
 
    padding: 70px; 
 
    border-radius: 9px; 
 
} 
 
.project::after { 
 
    clear: both; 
 
    content: ""; 
 
    display: table; 
 
} 
 
.project--image { 
 
    display: inline-block; 
 
    width: 25%; 
 
} 
 
.project--description { 
 
    width: 75%; 
 
    box-sizing: border-box; 
 
    padding-left: 20px; 
 
} 
 
.project--description .title { 
 
    font-size: 30px; 
 
    margin-bottom: 10px; 
 
} 
 
.project--description .about { 
 
    font-family: "Gentium Book Basic", serif; 
 
    font-size: 20px; 
 
    line-height: 26px; 
 
    margin-bottom: 20px; 
 
} 
 
.project--description .cta { 
 
    color: #4A90E2; 
 
    text-align: right; 
 
    text-decoration: none; 
 
} 
 
.project--description .cta:after { 
 
    -webkit-transition: all 0.15s ease-out 0s; 
 
    transition: all 0.15s ease-out 0s; 
 
    content: "→"; 
 
    margin-left: 5px; 
 
} 
 
.project--description .cta:hover:after { 
 
    margin-left: 10px; 
 
} 
 

 
footer { 
 
    margin-top: 30px; 
 
    padding-top: 30px; 
 
    border-top: dashed 1px #ccc; 
 
    font-size: 12px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script> 
 

 
<div id="wrapper"> 
 
    <aside class="side-bar"> 
 
    <h1 class="logo"> 
 
     <div class="avatar"></div><span class="name">Aaron Benjamin</span><span class="title">Digital UX Designer</span> 
 
    </h1> 
 
    <nav><a href="#" target="_blank"><i class="fa fa-dribbble"></i> Dribbble</a><a href="#" target="_blank"><i class="fa fa-twitter"></i> Twitter</a><a href="#" target="_blank"><i class="fa fa-medium"></i> Medium</a><a href="#" target="_blank"><i class="fa fa-codepen"></i> Code Pen</a></nav> 
 
    </aside> 
 
    <main> 
 
    <article class="project"> 
 
     <div class="project--image"><img src="http://simonpan.com/wp-content/themes/sp_portfolio/assets/prime-music-tile-hero.jpg" alt=""/></div> 
 
     <div class="project--description"> 
 
     <h2 class="title">Hello World</h2> 
 
     <p class="about"> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima architecto numquam eius dicta mollitia quo consequuntur ducimus eveniet eos modi voluptate quidem saepe aliquid distinctio esse temporibus delectus, repellat facere?</p><a href="#" class="cta">Read more</a> 
 
     </div> 
 
    </article> 
 
    <article class="project"> 
 
     <div class="project--image"><img src="http://simonpan.com/wp-content/themes/sp_portfolio/assets/prime-music-tile-hero.jpg" alt=""/></div> 
 
     <div class="project--description"> 
 
     <h2 class="title">Hello World</h2> 
 
     <p class="about"> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima architecto numquam eius dicta mollitia quo consequuntur ducimus eveniet eos modi voluptate quidem saepe aliquid distinctio esse temporibus delectus, repellat facere?</p><a href="#" class="cta">Read more</a> 
 
     </div> 
 
    </article> 
 
    <article class="project"> 
 
     <div class="project--image"><img src="http://simonpan.com/wp-content/themes/sp_portfolio/assets/prime-music-tile-hero.jpg" alt=""/></div> 
 
     <div class="project--description"> 
 
     <h2 class="title">Hello World</h2> 
 
     <p class="about"> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima architecto numquam eius dicta mollitia quo consequuntur ducimus eveniet eos modi voluptate quidem saepe aliquid distinctio esse temporibus delectus, repellat facere?</p><a href="#" class="cta">Read more</a> 
 
     </div> 
 
    </article> 
 
    <footer> 
 
     <p>Hello</p> 
 
    </footer> 
 
    </main> 
 
</div>

+0

只是給你的代碼看一眼,你正在編輯的每'.project'元每滾動的CSS。您需要改爲處理單個項目。 – Jhecht

+0

我在[This Code Pen](http://codepen.io/jhechtf/pen/aNaoJo?editors=0010)上有一件非常粗糙的事情,只是試圖讓最後一點工作。 – Jhecht

回答

0

編輯

我想我得到了更多的東西在網上一點點與你原來的職位。

已知錯誤

  1. 特別是對段編輯器,你會得到一些奇怪的縮放,因爲第一個元素技術上重疊屏幕的底部。我在Codepen上使用此代碼時沒有問題,因爲第一個元素沒有重疊,但我可以想象它會成爲問題。也許有代碼跳過第一個孩子?

  2. 我偶爾會(滾動速度非常快)得到增長/縮小的行爲。也許使用Math.minMath.max可以提供幫助。

什麼代碼沒有

  1. 着眼於底部位置VS窗口的高度,如果除去從底部的值,這給了我們多少重疊有窗戶的高度。
  2. 然後它取這個值並根據窗口的高度將它轉換成一個分數。
  3. 設置項目的初始比例。我希望有一個比.each()更快的方法,但我找不到它。
  4. 檢查滾動。見第3點第二句。

快樂編碼!

function fractional_overlay(el) { 
 
    var rect = el.getBoundingClientRect(); 
 
    //Bounding Client Rectangle; 
 
    var win_height = $(window).height(); 
 
    return (rect.bottom - win_height)/win_height; 
 

 
} 
 

 
$(document).ready(function() { 
 
    //Initial Set for items off screen. I could not find a faster way 
 
    $('.project').each(function(i, el) { 
 

 
    var sf = fractional_overlay(el); 
 
    // sf = Scale Factor; 
 

 
    if (sf > 0 && sf < 1) { 
 
     $(el).css({ 
 
     'transform': 'scale(' + sf + ',' + sf + ')' 
 
     }); 
 
    } 
 

 
    }); 
 

 
    //On every scroll, check to see that the items are either above the viewport or inside it. 
 
    $(document).scroll(function(e) { 
 

 
    $('.project').each(function(i, el) { 
 
     var sf = fractional_overlay(el); 
 
     if (sf > 0 && sf < 1) { 
 
     sf = 1 - sf; 
 
     $(el).css({ 
 
      'transform': 'scale(' + sf + ',' + sf + ')' 
 
     }); 
 
     } 
 
    }); 
 

 
    }); 
 
});
@charset "UTF-8"; 
 
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,800|Gentium+Book+Basic); 
 
.project--image, 
 
.project--description { 
 
    float: left; 
 
} 
 
body { 
 
    background: #eee; 
 
    font-family: "Open Sans", arial, sans-serif; 
 
} 
 
img { 
 
    width: 100%; 
 
    height: auto; 
 
} 
 
#wrapper { 
 
    margin: 0 auto; 
 
    max-width: 1024px; 
 
    padding: 0 30px; 
 
} 
 
#wrapper::after { 
 
    clear: both; 
 
    content: ""; 
 
    display: table; 
 
} 
 
.side-bar { 
 
    width: 20%; 
 
    position: fixed; 
 
    top: 30px; 
 
} 
 
.side-bar .logo { 
 
    border-bottom: dashed 1px #ccc; 
 
    padding-bottom: 20px; 
 
} 
 
.side-bar .logo .avatar { 
 
    height: 90px; 
 
    width: 90px; 
 
    background-color: #ccc; 
 
    background-image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/243277/avatar.jpg"); 
 
    background-size: cover; 
 
    border-radius: 50%; 
 
    margin-bottom: 10px; 
 
} 
 
.side-bar .logo .name { 
 
    font-size: 12px; 
 
    display: block; 
 
    text-transform: uppercase; 
 
} 
 
.side-bar .logo .title { 
 
    font-size: 16px; 
 
} 
 
.side-bar nav a { 
 
    color: #4A90E2; 
 
    margin-top: 20px; 
 
    text-decoration: none; 
 
    display: block; 
 
    font-size: 12px; 
 
} 
 
.side-bar nav a i { 
 
    margin-right: 6px; 
 
    opacity: 0.5; 
 
    -webkit-transition: all 0.15s ease-out 0s; 
 
    transition: all 0.15s ease-out 0s; 
 
} 
 
.side-bar nav a:hover i { 
 
    opacity: 1; 
 
} 
 
main { 
 
    width: 75%; 
 
    box-sizing: border-box; 
 
    margin-left: 25%; 
 
} 
 
.project { 
 
    transition: all linear 0.3s; 
 
    margin-top: 30px; 
 
    box-shadow: 0 8px 20px rgba(50, 50, 50, 0.3); 
 
    background: white; 
 
    padding: 70px; 
 
    border-radius: 9px; 
 
} 
 
.project::after { 
 
    clear: both; 
 
    content: ""; 
 
    display: table; 
 
} 
 
.project--image { 
 
    display: inline-block; 
 
    width: 25%; 
 
} 
 
.project--description { 
 
    width: 75%; 
 
    box-sizing: border-box; 
 
    padding-left: 20px; 
 
} 
 
.project--description .title { 
 
    font-size: 30px; 
 
    margin-bottom: 10px; 
 
} 
 
.project--description .about { 
 
    font-family: "Gentium Book Basic", serif; 
 
    font-size: 20px; 
 
    line-height: 26px; 
 
    margin-bottom: 20px; 
 
} 
 
.project--description .cta { 
 
    color: #4A90E2; 
 
    text-align: right; 
 
    text-decoration: none; 
 
} 
 
.project--description .cta:after { 
 
    -webkit-transition: all 0.15s ease-out 0s; 
 
    transition: all 0.15s ease-out 0s; 
 
    content: "→"; 
 
    margin-left: 5px; 
 
} 
 
.project--description .cta:hover:after { 
 
    margin-left: 10px; 
 
} 
 
footer { 
 
    margin-top: 30px; 
 
    padding-top: 30px; 
 
    border-top: dashed 1px #ccc; 
 
    font-size: 12px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="wrapper"> 
 
    <aside class="side-bar"> 
 
    <h1 class="logo"> 
 
     <div class="avatar"></div><span class="name">Aaron Benjamin</span><span class="title">Digital UX Designer</span> 
 
    </h1> 
 
    <nav><a href="#" target="_blank"><i class="fa fa-dribbble"></i> Dribbble</a><a href="#" target="_blank"><i class="fa fa-twitter"></i> Twitter</a><a href="#" target="_blank"><i class="fa fa-medium"></i> Medium</a><a href="#" target="_blank"><i class="fa fa-codepen"></i> Code Pen</a> 
 
    </nav> 
 
    </aside> 
 
    <main> 
 
    <article class="project" id="first"> 
 
     <div class="project--image"> 
 
     <img src="http://simonpan.com/wp-content/themes/sp_portfolio/assets/prime-music-tile-hero.jpg" alt="" /> 
 
     </div> 
 
     <div class="project--description"> 
 
     <h2 class="title">Hello World</h2> 
 
     <p class="about">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima architecto numquam eius dicta mollitia quo consequuntur ducimus eveniet eos modi voluptate quidem saepe aliquid distinctio esse temporibus delectus, repellat facere?</p><a href="#" 
 
     class="cta">Read more</a> 
 
     </div> 
 
    </article> 
 
    <article class="project" id="second"> 
 
     <div class="project--image"> 
 
     <img src="http://simonpan.com/wp-content/themes/sp_portfolio/assets/prime-music-tile-hero.jpg" alt="" /> 
 
     </div> 
 
     <div class="project--description"> 
 
     <h2 class="title">Hello World</h2> 
 
     <p class="about">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima architecto numquam eius dicta mollitia quo consequuntur ducimus eveniet eos modi voluptate quidem saepe aliquid distinctio esse temporibus delectus, repellat facere?</p><a href="#" 
 
     class="cta">Read more</a> 
 
     </div> 
 
    </article> 
 
    <article class="project" id="third"> 
 
     <div class="project--image"> 
 
     <img src="http://simonpan.com/wp-content/themes/sp_portfolio/assets/prime-music-tile-hero.jpg" alt="" /> 
 
     </div> 
 
     <div class="project--description"> 
 
     <h2 class="title">Hello World</h2> 
 
     <p class="about">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima architecto numquam eius dicta mollitia quo consequuntur ducimus eveniet eos modi voluptate quidem saepe aliquid distinctio esse temporibus delectus, repellat facere?</p><a href="#" 
 
     class="cta">Read more</a> 
 
     </div> 
 
    </article> 
 
    <footer> 
 
     <p>Hello</p> 
 
    </footer> 
 
    </main> 
 
</div>

這裏有一個快速的答案:

我看到的問題是,在您的滾動您正在編輯的風格頁面上的每個.project元素。我使用$(document)滾動的原因是因爲當我用$('.project')滾動時,沒有發生任何事情。希望這給你一個很好的起點,你可以用它來獲得你想要的確切的效果。

名單的我所做的:

  1. 我找到一種方式來獲得一個元素是否是視口內。我從另一個Stack Overflow question中發現了這個,我修改了一些默認代碼(我留在那裏以防萬一你可能需要它)導致離開視口向上的元素也縮小。根據你的演示,我想你不想要那個。
  2. 不知道你爲什麼使用這個窗口,說實話,我只是使用了document對象而不是window,因爲這是首先想到的。窗口可能是更好的方式,我真的不知道。
  3. 在您的CSS中添加了.scale類和transition聲明。
  4. 我添加的ID在<article>標籤幫助我的調試,而編輯in_viewport_or_higher功能。 JavaScript代碼(大部分的人誰這個答案後發現)
    1. 如果忽略這兩個函數的聲明,在$(document).ready()呼叫開始,我經歷的所有.project元素,並添加

    說明如果它們低於底部邊緣,則爲標度類。

  5. 將滾動事件偵聽器添加到文檔上。
  6. 每一次滾動我們都必須遍歷.projects集合中的元素,並重新評估它們是否被顯示。根據我們的發現切換比例級別。

你可以做什麼

你可以找出底邊下仍隱藏在每個元素的比例,並用它來手動設置比例通過.css()呼叫變換量爲transform樣式聲明,以這不是一個「全部或全部」的方法。

function in_viewport_or_higher(el) { 
 
    var rect = el.getBoundingClientRect(); 
 

 
    return (
 
    rect.left >= 0 && 
 
    rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */ 
 
    rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */ 
 
); 
 
} 
 

 
function in_viewport(el) { 
 

 
    //special bonus for those using jQuery 
 
    if (typeof jQuery === "function" && el instanceof jQuery) { 
 
    el = el[0]; 
 
    } 
 

 
    var rect = el.getBoundingClientRect(); 
 

 
    return (
 
    rect.top >= 0 && 
 
    rect.left >= 0 && 
 
    rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */ 
 
    rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */ 
 
); 
 
} 
 
$(document).ready(function() { 
 
    //Initial Set for items off screen. I could not find a faster way 
 
    $('.project').each(function(i, el) { 
 
    $(this).toggleClass('scale', !in_viewport_or_higher(el)); 
 
    }); 
 

 
    //On every scroll, check to see that the items are either above the viewport or inside it. 
 
    $(document).scroll(function(e) { 
 

 
    $('.project').each(function(i, el) { 
 
     $(this).toggleClass('scale', !in_viewport_or_higher(el)); 
 
    }); 
 

 
    }); 
 
});
@charset "UTF-8"; 
 
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,800|Gentium+Book+Basic); 
 
.project--image, 
 
.project--description { 
 
    float: left; 
 
} 
 
body { 
 
    background: #eee; 
 
    font-family: "Open Sans", arial, sans-serif; 
 
} 
 
img { 
 
    width: 100%; 
 
    height: auto; 
 
} 
 
#wrapper { 
 
    margin: 0 auto; 
 
    max-width: 1024px; 
 
    padding: 0 30px; 
 
} 
 
#wrapper::after { 
 
    clear: both; 
 
    content: ""; 
 
    display: table; 
 
} 
 
.side-bar { 
 
    width: 20%; 
 
    position: fixed; 
 
    top: 30px; 
 
} 
 
.side-bar .logo { 
 
    border-bottom: dashed 1px #ccc; 
 
    padding-bottom: 20px; 
 
} 
 
.side-bar .logo .avatar { 
 
    height: 90px; 
 
    width: 90px; 
 
    background-color: #ccc; 
 
    background-image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/243277/avatar.jpg"); 
 
    background-size: cover; 
 
    border-radius: 50%; 
 
    margin-bottom: 10px; 
 
} 
 
.side-bar .logo .name { 
 
    font-size: 12px; 
 
    display: block; 
 
    text-transform: uppercase; 
 
} 
 
.side-bar .logo .title { 
 
    font-size: 16px; 
 
} 
 
.side-bar nav a { 
 
    color: #4A90E2; 
 
    margin-top: 20px; 
 
    text-decoration: none; 
 
    display: block; 
 
    font-size: 12px; 
 
} 
 
.side-bar nav a i { 
 
    margin-right: 6px; 
 
    opacity: 0.5; 
 
    -webkit-transition: all 0.15s ease-out 0s; 
 
    transition: all 0.15s ease-out 0s; 
 
} 
 
.side-bar nav a:hover i { 
 
    opacity: 1; 
 
} 
 
main { 
 
    width: 75%; 
 
    box-sizing: border-box; 
 
    margin-left: 25%; 
 
} 
 
.project { 
 
    transition: all linear 0.7s; 
 
    margin-top: 30px; 
 
    box-shadow: 0 8px 20px rgba(50, 50, 50, 0.3); 
 
    background: white; 
 
    padding: 70px; 
 
    border-radius: 9px; 
 
} 
 
.project.scale { 
 
    opacity: 0.2; 
 
    transform: scale(0.2, 0.2); 
 
} 
 
.project::after { 
 
    clear: both; 
 
    content: ""; 
 
    display: table; 
 
} 
 
.project--image { 
 
    display: inline-block; 
 
    width: 25%; 
 
} 
 
.project--description { 
 
    width: 75%; 
 
    box-sizing: border-box; 
 
    padding-left: 20px; 
 
} 
 
.project--description .title { 
 
    font-size: 30px; 
 
    margin-bottom: 10px; 
 
} 
 
.project--description .about { 
 
    font-family: "Gentium Book Basic", serif; 
 
    font-size: 20px; 
 
    line-height: 26px; 
 
    margin-bottom: 20px; 
 
} 
 
.project--description .cta { 
 
    color: #4A90E2; 
 
    text-align: right; 
 
    text-decoration: none; 
 
} 
 
.project--description .cta:after { 
 
    -webkit-transition: all 0.15s ease-out 0s; 
 
    transition: all 0.15s ease-out 0s; 
 
    content: "→"; 
 
    margin-left: 5px; 
 
} 
 
.project--description .cta:hover:after { 
 
    margin-left: 10px; 
 
} 
 
footer { 
 
    margin-top: 30px; 
 
    padding-top: 30px; 
 
    border-top: dashed 1px #ccc; 
 
    font-size: 12px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="wrapper"> 
 
    <aside class="side-bar"> 
 
    <h1 class="logo"> 
 
     <div class="avatar"></div><span class="name">Aaron Benjamin</span><span class="title">Digital UX Designer</span> 
 
    </h1> 
 
    <nav><a href="#" target="_blank"><i class="fa fa-dribbble"></i> Dribbble</a><a href="#" target="_blank"><i class="fa fa-twitter"></i> Twitter</a><a href="#" target="_blank"><i class="fa fa-medium"></i> Medium</a><a href="#" target="_blank"><i class="fa fa-codepen"></i> Code Pen</a> 
 
    </nav> 
 
    </aside> 
 
    <main> 
 
    <article class="project" id="first"> 
 
     <div class="project--image"> 
 
     <img src="http://simonpan.com/wp-content/themes/sp_portfolio/assets/prime-music-tile-hero.jpg" alt="" /> 
 
     </div> 
 
     <div class="project--description"> 
 
     <h2 class="title">Hello World</h2> 
 
     <p class="about">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima architecto numquam eius dicta mollitia quo consequuntur ducimus eveniet eos modi voluptate quidem saepe aliquid distinctio esse temporibus delectus, repellat facere?</p><a href="#" 
 
     class="cta">Read more</a> 
 
     </div> 
 
    </article> 
 
    <article class="project" id="second"> 
 
     <div class="project--image"> 
 
     <img src="http://simonpan.com/wp-content/themes/sp_portfolio/assets/prime-music-tile-hero.jpg" alt="" /> 
 
     </div> 
 
     <div class="project--description"> 
 
     <h2 class="title">Hello World</h2> 
 
     <p class="about">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima architecto numquam eius dicta mollitia quo consequuntur ducimus eveniet eos modi voluptate quidem saepe aliquid distinctio esse temporibus delectus, repellat facere?</p><a href="#" 
 
     class="cta">Read more</a> 
 
     </div> 
 
    </article> 
 
    <article class="project" id="third"> 
 
     <div class="project--image"> 
 
     <img src="http://simonpan.com/wp-content/themes/sp_portfolio/assets/prime-music-tile-hero.jpg" alt="" /> 
 
     </div> 
 
     <div class="project--description"> 
 
     <h2 class="title">Hello World</h2> 
 
     <p class="about">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima architecto numquam eius dicta mollitia quo consequuntur ducimus eveniet eos modi voluptate quidem saepe aliquid distinctio esse temporibus delectus, repellat facere?</p><a href="#" 
 
     class="cta">Read more</a> 
 
     </div> 
 
    </article> 
 
    <footer> 
 
     <p>Hello</p> 
 
    </footer> 
 
    </main> 
 
</div>