CSS -- 使用 Flexbox 创建评论布局

本人比较喜欢做一些炫酷的特效,最近看到写的不错的英文文章,在本人亲自试验过后,准备将其翻译出来,一是为了自己日后查看,二是出于分享知识的目的。下面的效果是本篇文章介绍的布局。

demo01.png

Flexbox 是一种用于创建布局的新方法,它把网页开发中一些最有挑战性的工作变得简单, 目前使用的浏览器几乎都支持这一属性,所以这是一个很好的时间去看看它如何适应你日常的前台开发工作。

这就是我们在本篇教程中使用 flexbox 构建评论模块的原因。首先我们看看 flex 布局模式为我们提供的一些有意思的属性,然后会向你展示如何充分的使用它们。

What We’re Going to Use

Flexbox 包含了许多的 CSS 属性,下面是我们今天将要使用到几个属性:

  • display: flex - 激活 flex 布局模型并且使其子元素遵循 flex 布局规则。

  • justify-content - 这个属性定义了一个 flexbox的子元素按照哪个方向对齐(用于设置主轴上的对齐方式)。

  • order - Flexbox 利用此属性让我们准确的控制子元素的摆放位置,可以在评论模块利用这一有力的工具交换文本和图片的位置(order 的值越小其摆放位置越靠前)。

  • flex-wrap - 控制 flex 元素的自动换行 。

The Layout

我们希望评论模块能够满足如下要求:

  • 每条评论都应该有一个头像,姓名,评论时间和评论主体。

  • 应该有两种不同的评论类型 - 一种是由作者编写的(颜色为蓝色,而且头像在右边),而另一种是由其他任何人编写的。

  • 这两种评论类型的 HTML 标记语言应该保持较大的相似度,这样的话就比较容易生成评论代码了。

  • 整件事情应该完全是响应式的。

demo01.png

所有的事情都可以通过短短的几行利用flexboxCSS 代码完成,下面我们将重点放到代码上。

The HTML

HTML 代码非常的直接,而且我们将拥有一个评论列表,以一种基本的形式将新的评论写在列表的最后。

    <ul class="comment-section">

        <li class="comment user-comment">
            <div class="info">
                <a href="#">Anie Silverston</a>
                <span>4 hours ago</span>
            </div>
            <a class="avatar" href="#">
                <img src="images/avatar_user_1.jpg" width="35" alt="Profile Avatar" title="Anie Silverston" />
            </a>
            <p>Suspendisse gravida sem?</p>
        </li>

        <li class="comment author-comment">
            <div class="info">
                <a href="#">Jack Smith</a>
                <span>3 hours ago</span>
            </div>
            <a class="avatar" href="#">
                <img src="images/avatar_author.jpg" width="35" alt="Profile Avatar" title="Jack Smith" />
            </a>
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse gravida sem sit amet molestie portitor.</p>

        </li>

        <!-- More comments -->

        <li class="write-new">

            <form action="#" method="post">
                <textarea placeholder="Write your comment here" name="comment"></textarea>
                <div>
                    <img src="images/avatar_user_2.jpg" width="35" alt="Profile of Bradley Jones" title="Bradley Jones" />
                    <button type="submit">Submit</button>
                </div>
            </form>

        </li>

    </ul>

如果你仔细观察上面的代码,你会发现为了区分彼此,它们拥有不同的类,而用户评论和作者评论在 HTML 上几乎是相同的。所以两者之间的风格和布局差异,将完全由 CSS 处理,具体地说,是通过添加 user-commentauthor-comment 类。

The CSS

接下来我们看看在创建布局时使用到的 flexbox 相关技术。

首先,我们为所有 comment 设置 display: flex ,这样我们就可以为 comment 及其子元素应用 flexbox 属性。

    .comment{
        display: flex;
    }

这些 flex 容器占据了整个评论模块的宽度而且容纳了用户信息,头像和消息。由于我们想让作者书写的评论居右对齐,所以使用下列的 flex 属性让所有内容居容器末尾对齐。

    .comment.author-comment{
        justify-content: flex-end;
    }

这样我们的评论列表将如下所示。

demo02.png

现在我们已经让作者评论居右对齐了,但是我们想让容器中的元素逆序排列,所以应该让消息排在第一位,然后是头像,再右边才是用户信息。我们可以利用 order 来达成这一目的。

    .comment.author-comment .info{
        order: 3;
    }

    .comment.author-comment .avatar{
        order: 2;
    }

    .comment.author-comment p{
        order: 1;
    }

正如你所见,有了 flexbox 的帮助,整件事情如此简单。

demo03.png

我们的评论模块看上去正是我们想的那样,剩下来的事就是让它在小屏幕设备上看上去也很美观。即使在小屏幕上没有那么大的可用空间,但我们还是可以对布局做出一些调整让内容看起来更易阅读。

我们设置了一个媒体查询,它所做的工作就是让评论中的段落部分占据了容器的整个宽度,这将导致头像和用户信息移至下一行,只要将 commentflex-wrap 属性设置成 wrap

    @media (max-width: 800px){
        .comment.user-comment .info{
            order: 3;
        }

        .comment.user-comment .avatar{
            order: 2;
        }

        .comment.user-comment p{
            order: 1;
        }


        .comment p{
            width: 100%;
        }

        .comment.author-comment{
            justify-content: flex-start;
        }
    }

通过比较当前和上图的屏幕规模,二者差异可以立刻被发现。你也可以打开这个例子,并且调整浏览器的大小去看看评论模块随浏览器大小变化是如何调整自身的。

demo04.png

Conclusion

是时候总结下这篇教程了。 我们希望这可以给你一个建立实际 flexbox 布局的练手项目。 如果你的好奇心还没有得到满足,下面是一些你可能感兴趣的资源。

  • CSS-Tricks’ guide to flexbox - here

  • An in-depth MDN article - here

  • A website with easy flexbox solutions for classic CSS problems - here


原文地址

Ending...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,630评论 1 92
  • 前言 在上篇文章里面谈了Weex在iOS客户端工作的基本流程。这篇文章将会详细的分析Weex是如何高性能的布局原生...
    一缕殇流化隐半边冰霜阅读 18,832评论 44 126
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,691评论 0 2
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,279评论 0 11
  • 愛情 就像甜點一樣 太甜 會厭 太淡 會無味 適中 才能吊起心中那份甜 令人回味 及渴望
    love2easy阅读 193评论 0 0