这是一款效果很酷的html5带flexbox网格图片的文章标题全屏图片滑动显示布局。插件中使用了一些Flexbox和 CSS Transitions 技术,请确保你的浏览器支持这些特性。

这个文章标题布局插件中将使用到以下的技术:
- CSS Transitions
- Media Queries
- Flexbox with Viewport Units
- Some JavaScript for toggling classes among others
该文章标题布局插件中的网格布局将使用Flexbox,我们通过CSS media queries来控制网格的数量和它们的高度,通过为网格的宽和高使用vw单位(快速了解vw),我们可以创建一个自适应的的网格布局,并保证图片的宽高比基本上是一个正方形。如果你想了解更多,可以查看caniuse.com的Can I Use,获取它们的浏览器支持和使用方法。

HTML结构
首先我们需要一个header和一个title,还需要一个用于放置内容的网格。所有这些都要包裹到container容器中以便于后面用JS来控制它们。
<header class="intro">
<img class="intro__image" src="img/header.jpg" alt="Iceland glacier"/>
<div class="intro__content">
<h1 class="intro__title">Essential Feelings</h1>
<div class="intro__subtitle">
<div class="codrops-links">
<!-- links -->
</div>
<div class="intro__description"> <!-- ... --> </div>
<button class="trigger">
<svg width="100%" height="100%" viewBox="0 0 60 60" preserveAspectRatio="none">
<g class="icon icon--grid">
<rect x="32.5" y="5.5" width="22" height="22"/>
<rect x="4.5" y="5.5" width="22" height="22"/>
<rect x="32.5" y="33.5" width="22" height="22"/>
<rect x="4.5" y="33.5" width="22" height="22"/>
</g>
<g class="icon icon--cross">
<line x1="4.5" y1="55.5" x2="54.953" y2="5.046"/>
<line x1="54.953" y1="55.5" x2="4.5" y2="5.047"/>
</g>
</svg>
<span>View content</span>
</button>
</div><!-- /intro__subtitle -->
</div><!-- /intro__content -->
</header><!-- /intro -->
下面是网格的html结构:
<section class="items-wrap">
<a href="#" class="item">
<img class="item__image" src="img/item01.jpg" alt="item01"/>
<h2 class="item__title">Magnificence</h2>
</a>
<a href="#" class="item">
<img class="item__image" src="img/item02.jpg" alt="item02"/>
<h2 class="item__title">Electrifying</h2>
</a>
<!-- ... -->
</section><!-- /items-wrap -->
在这里你也可也是用一个无序列表或figure元素来做网格。
JAVASCRIPT
我们使用js脚本来在点击按钮时添加和移除class,同时还用js脚本来控制页面滚动条的行为。
<script src="js/classie.js"></script>
<script>
(function() {
var container = document.getElementById( 'container' ),
trigger = container.querySelector( 'button.trigger' );
function toggleContent() {
if( classie.has( container, 'container--open' ) ) {
classie.remove( container, 'container--open' );
classie.remove( trigger, 'trigger--active' );
window.addEventListener( 'scroll', noscroll );
}
else {
classie.add( container, 'container--open' );
classie.add( trigger, 'trigger--active' );
window.removeEventListener( 'scroll', noscroll );
}
}
function noscroll() {
window.scrollTo( 0, 0 );
}
// reset scrolling position
document.body.scrollTop = document.documentElement.scrollTop = 0;
// disable scrolling
window.addEventListener( 'scroll', noscroll );
trigger.addEventListener( 'click', toggleContent );
})();
</script>