[JavaScript30 笔记] 05 - Flex Panel Gallery

写在系列开篇

在学习了基本的 HTML / CSS / JavaScript 之后没有啥 side project 就直接开始学 Angular 做项目。遇到最近很火的JavaScript30这个项目后决心好好实践一下 Vanilla JavaScript。

对于每个挑战,我会自己在看过视频了解原理后自己实现一遍并在 blog 里记录过程、想法和相关资料。源码放在我的 Github上,demo 通过 Github Pages 部署,点击这里或 Github 的 readme 中连接可以访问。

Objective

利用 Flexbox 实现一个 Gallery,点击一个 panel 后可放大,并飞入上下的文字。


demo
demo

Steps

  1. 为包裹 5 个子 panel 的 div 添加 flex 相关的属性:
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center; 
    
    并为每个子 panel 设置 flex-grow 为 1 使占满屏幕宽度.
  2. 居中子 panel 的所有 p tag 内容
    display: flex;
    justify-content: center;
    align-items: center;
    
  3. 将子 panel 上下文字移出:
    .panel p:first-child { transform: translateY(-100%) }
    .panel p:last-child { transform: translateY(100%) }
    
  4. 准备点击后添加的类,设置点击 panel 的 flex 为 5,并设置 translateY(0) 移入上下文字。
  5. JavaScript 部分添加对应的 EventListener。

Things learned

Flexbox

flex 已经成为目前 CSS layout 的必备了,1月份 Bootstrap v4-alpha6 也已经全面使用 flex 进行布局。

因为之前专门学过 flex,这里进行的还是很轻松,相关的知识点网上有很多资源讲解。

Center

panel 里面每个 p tag 内文字需要在各自的区域内居中,这里可以使用 flex 轻松解决。更多的解决方案可以参考css tricks

fly-in fly-out

利用 transform: translateY(-100%) 将元素向上平移,添加 transitioned 事件的监听器可以移回。

注意原作者 Wes 这里有个 bug,当快速双击 panel 时文字会停留在 panel 内。解决方案有两个:

  1. 对 tranform 的 transition 设置延时
  2. 在 transitioned 事件监听器内使 opened class 的 toggle 依赖于 open class 的存在。
    我的代码中使用了方案2。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 5,858评论 0 2
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 6,857评论 0 11
  • 作者:©缉熙Soyaine 简介:JavaScript30 是 Wes Bos 推出的一个 30 天挑战。项目...
    未枝丫阅读 4,202评论 0 1
  • 选择决定了收益的短期或者长期,而坚持的努力和阶段开始的选择就是实现收益的过程,一分耕耘一分收获,我们容易忽略时间的...
    麻花可乐阅读 3,369评论 0 0
  • 作者:橙子佳 你的来临让我感觉并不友好,犹如暴风雨前的预兆,是个颠覆性的开始。在想如何面对你的时候,我试着和自己...
    Cherry橙子佳阅读 2,607评论 0 0