DAY 28 文章列表 - 2

对,他有两种版型:D

左侧的大图!

不知道为何大标都想加惊叹号XD

因为文章资料的内容太常用到了,所以把他整理成了 json 方便之後快速使用~


import React from "react";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faChevronRight } from "@fortawesome/free-solid-svg-icons";

export default function Article() {
  const articleData = {
    category: "ENTERTAINMENT",
    title: " 宝藏男孩持修:「对我来说男子气概无关外表,而是要负责任。」",
    writer: "NICOLE LEE",
    dateTime: "2021年6月7日",
    img: "https://media.vogue.com.tw/photos/60b9a4fcf37df9e2f39b0216/2:3/w_2880%2cc_limit/29711-1_V.jpg",
  };
  return (
    <div>
			{/* ... */}
      <div className="post">
        <h2 className="post-headline">fashion</h2>
        <div className="post-section">
          <div className="left-side">
            <img src={articleData.img} alt="img" />
            <div className="overlay-content">
              {articleData.category}
              <div className="post-title">{articleData.title}</div>
              <hr className="white-hr" />
              BY {articleData.writer}
              {articleData.dateTime}
            </div>
          </div>
          <div className="right-side">
          </div>
        </div>
      </div>
    </div>
  );
}

.post

    &-section
        display: flex
        justify-content: space-between
        gap: 2.4vw

        .left-side
            width: (100vw-10vw)/2
            justify-content: center
            height: 100vh
            overflow: hidden

            .overlay-content
                color: $primary-background-color
                position: relative
                bottom: 410px
                left: 0
                padding: 20px 24px 40px
                font-weight: bold

        .right-side
  1. 左侧大图的宽度,扣除左右宽 5vw 後与右边分别一半,透过运算子计算出精准的宽度
  2. 超过范围的图片内容使用 overflow: hidden 来遮蔽
  3. overlay-content 是覆盖在谝上的文字区块,透过 position: relative 来覆盖位置到图上

右侧的 Flex Box!

一样先排版好~



export default function Article() {
  return (
    <div>
      <div className="post">
        <h2 className="post-headline">fashion</h2>
        <div className="post-section">
          <div className="left-side">
            {/* ... */}
          </div>
          <div className="right-side">
            <div className="row">
              <div className="post-column">
                <div className="square-img">
                  <img alt="post-img" src={articleData.img} />
                </div>
                <div className="post-paper">
                  {articleData.category}
                  <div className="post-subtitle">{articleData.title}</div>
                  <hr className="brown-hr" />
                  BY {articleData.writer}
                  {articleData.dateTime}
                </div>
              </div>
              <div className="post-column">
                <div className="rectangle-img">
                  <img alt="post-img" src={articleData.img} />
                </div>
                <div className="post-paper">
                  {articleData.category}
                  <div className="post-subtitle">{articleData.title}</div>
                  <hr className="brown-hr" />
                  BY {articleData.writer}
                  {articleData.dateTime}
                </div>
              </div>
              <div className="post-column">
                <div className="square-img">
                  <img alt="post-img" src={articleData.img} />
                </div>
                <div className="post-paper">
                  {articleData.category}
                  <div className="post-subtitle">{articleData.title}</div>
                  <hr className="brown-hr" />
                  BY {articleData.writer}
                  {articleData.dateTime}
                </div>
              </div>
              <div className="post-column">
                <div className="rectangle-img">
                  <img alt="post-img" src={articleData.img} />
                </div>
                <div className="post-paper">
                  {articleData.category}
                  <div className="post-subtitle">{articleData.title}</div>
                  <hr className="brown-hr" />
                  BY {articleData.writer}
                  {articleData.dateTime}
                </div>
              </div>
            </div>
            <div className="row">
              <div className="post-column">
                <div className="rectangle-img">
                  <img alt="post-img" src={articleData.img} />
                </div>
                <div className="post-paper">
                  {articleData.category}
                  <div className="post-subtitle">{articleData.title}</div>
                  <hr className="brown-hr" />
                  BY {articleData.writer}
                  {articleData.dateTime}
                </div>
              </div>
              <div className="post-column">
                <div className="square-img">
                  <img alt="post-img" src={articleData.img} />
                </div>
                <div className="post-paper">
                  {articleData.category}
                  <div className="post-subtitle">{articleData.title}</div>
                  <hr className="brown-hr" />
                  BY {articleData.writer}
                  {articleData.dateTime}
                </div>
              </div>
              <div className="post-column">
                <div className="rectangle-img">
                  <img alt="post-img" src={articleData.img} />
                </div>
                <div className="post-paper">
                  {articleData.category}
                  <div className="post-subtitle">{articleData.title}</div>
                  <hr className="brown-hr" />
                  BY {articleData.writer}
                  {articleData.dateTime}
                </div>
              </div>
              <div className="post-column">
                <div className="square-img">
                  <img alt="post-img" src={articleData.img} />
                </div>
                <div className="post-paper">
                  {articleData.category}
                  <div className="post-subtitle">{articleData.title}</div>
                  <hr className="brown-hr" />
                  BY {articleData.writer}
                  {articleData.dateTime}
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  );
}

这边在 right-side 下,我使用了两个 row 的 class 来包裹 column 中的内容,因为後续的 flex box 相关设定无法直接透过 flex box 的属性让内容 waterfall 样式排版(有长有短)


.post
    &-section
        display: flex
        justify-content: space-between
        gap: 2.4vw

        .left-side
          // ...
        .right-side
            width: (100vw-10vw)/2
            height: 100vh
            display: flex
            overflow: scroll
            gap: 2.4vw
            overflow-x: hidden
            scrollbar-width: none

            .row
                flex: 1
                width: (100vw-60vw)/2
  1. 右边的宽度与上面左边设定的方式一样即可
  2. 在右侧要先设定 display: flex 让内容可以使用 flex box 的效果
  3. scroll 的部分是针对超出范围时,使用 scroll bar 滑动
  4. gap 可以设定物件间的宽度空格
  5. overflow-x: hidden 不使用水平滚动,只使用垂直滚动的方式
  6. row 的 flex 1 指定此 row 只有一栏,让内容可以望下排序
  7. row 的宽度也使用计算公式的方法来分配

如此一来滚动式卷轴的样式页面也完成啦~

感谢大家收看明天见~~~


除此之外,也欢迎大家走走逛逛关於我们团队夥伴的文章

lu23770127 - SASS 基础初学三十天

10u1 - 糟了!是世界奇观!

juck30808 - Python - 数位行销分析与 Youtube API 教学

HLD - 浅谈物件导向与Design Pattern介绍

SiQing47 - 前端?後端?你早晚都要全端的,何不从现在开始?


<<:  ETA screen testing (2)

>>:  you only look once - YOLO (2)

【I Love Vue 】 Day 29 爱荷华博弈任务(十) - Demo

话不多说,赶紧把我们的作品Demo 给我们 铁人学院的业主吧!! Demo 进入主画面 我们可以透过...

选择动物页面

可以先去https://www.ifreesite.com/upload/ 这里上传图片取得网址 点...

Golang-Channel & Goroutine-进阶篇

基础篇简单了介绍Channel&Goroutine的基本使用方法 接下来就是实际应用的问题了...

D7 allauth 采坑日记 Extending & Substituting User model (2)

接续上一篇 这次要讲的是我研究中途试过的另一个方法 Substituting 这其实是我一开始的想法...

Day 16 读 Go Concurrency Patterns - Rob Pike III

续上篇 Day 15 读 Go Concurrency Patterns - Rob Pike II...