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閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,783評論 1 92
  • 前言 在上篇文章里面談了Weex在iOS客戶端工作的基本流程。這篇文章將會詳細的分析Weex是如何高性能的布局原生...
    一縷殤流化隱半邊冰霜閱讀 19,106評論 44 126
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    wzhiq896閱讀 1,787評論 0 2
  • 選擇qi:是表達式 標簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,327評論 0 11
  • 愛情 就像甜點一樣 太甜 會厭 太淡 會無味 適中 才能吊起心中那份甜 令人回味 及渴望
    love2easy閱讀 265評論 0 0