欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS實(shí)現(xiàn)表格響應(yīng)式布局技巧

 更新時(shí)間:2022年07月27日 11:04:16   作者:chokcoco  
這篇文章主要為大家介紹了JS實(shí)現(xiàn)表格響應(yīng)式布局技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

今天,遇到了一個(gè)很有意思的問題,一名群友問我,僅僅使用 CSS,能否實(shí)現(xiàn)這樣一種響應(yīng)式的布局效果:

簡單解析一下效果:

  • 在屏幕視口較為寬時(shí),表現(xiàn)為一個(gè)整體 Table 的樣式
  • 而當(dāng)屏幕視口寬度較小時(shí),原 Table 的每一行數(shù)據(jù)單獨(dú)拆分為一個(gè) Table 進(jìn)行展示

很有意思的一個(gè)響應(yīng)式布局,讓信息在小屏幕下得到了一種不錯(cuò)的展示。

那么,僅僅使用 CSS 的話,能否實(shí)現(xiàn)這樣一個(gè)布局呢?答案是可以的

首先,肯定會(huì)用到媒體查詢,這個(gè)不難看出。另外,我們觀察下拆分后的每一組數(shù)據(jù):

都會(huì)存在一組原本整體一個(gè) Table 時(shí)的表頭信息,主要的難點(diǎn)就是在這里,我們?nèi)绾卧诓鸱殖梢粋€(gè)一個(gè)的子 Table 展示時(shí),同時(shí)展示這些表頭信息?

基本結(jié)構(gòu)的實(shí)現(xiàn)

首先,我們先實(shí)現(xiàn)常規(guī)寬屏下的 HTML 及對(duì)應(yīng)的 CSS。

比較簡單,這里沒有什么特殊之處,使用 <table> 標(biāo)簽或者使用 div、ul 等標(biāo)簽進(jìn)行模擬一個(gè)表格都可以。

<table>
  <caption>Lorem ipsum !</caption>
  <thead>
    <tr>
      <th>Account</th>
      <th>Due Date</th>
      <th>Amount</th>
      <th">Period</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td data-label="Account">Visa - 3412</td>
      <td data-label="Due Date">04/01/2016</td>
      <td data-label="Amount">$1,190</td>
      <td data-label="Period">03/01/2016 - 03/31/2016</td>
    </tr>
    // ... 重復(fù)多組
  </tbody>
</table>

得到這樣一個(gè)簡單的 Table:

使用媒體查詢將單個(gè) Table 拆分成多個(gè)

下一步也很簡單,設(shè)定合適的閾值(視實(shí)際業(yè)務(wù)情況而定),使用媒體查詢將單個(gè) Table 拆分成多個(gè)子 Table。

@media screen and (max-width: 600px) {
  table {
    border: 0;
  }  
  table thead {
    display: none;
  }
  table tr {
    display: block;
    margin-bottom: 10px;
  }
  table td {
    border-bottom: 1px solid #ddd;
    display: block;
  }
}

這里做的事情也非常簡單:

  • 利用媒體查詢,設(shè)定屏幕寬度小于 600px 的樣式
  • 去掉原本表格的 <thead> 表頭,直接隱藏即可
  • 將原本的一行 <tr>,設(shè)置為 display: block, 并且設(shè)置一個(gè)下邊距,使之每一個(gè)分開
  • 將原本的一行內(nèi)的 <td>,設(shè)置為 display: block,這樣,它們就會(huì)豎向排列,使每一個(gè) <tr> 形成新的一個(gè)子 table

好,這樣,再屏幕寬度小于 600px 時(shí),我們就得到了這樣一個(gè) Table:

借助偽元素極其特性,實(shí)現(xiàn)表頭信息展示

下面一步,也就是最為關(guān)鍵的一步,我們?nèi)绾卧谧?table 的每一行,也就是 <td> 內(nèi),再展示原本的表頭信息呢?

這里其實(shí)也非常簡單,只是簡單的運(yùn)用了偽元素,極其可以讀取 HTML 標(biāo)簽屬性的小特性實(shí)現(xiàn)。

我們只需要簡單改造一下代碼,給每個(gè) <td> 的 HTML,帶上與之對(duì)應(yīng)的表頭列描述信息:

<table>
  // 上方信息保持一致
  <tbody>
    <tr>
      <td data-label="Account">Visa - 3412</td>
      <td data-label="Due Date">04/01/2016</td>
      <td data-label="Amount">$1,190</td>
      <td data-label="Period">03/01/2016 - 03/31/2016</td>
    </tr>
    <tr>
      <td scope="row" data-label="Account">Visa - 6076</td>
      <td data-label="Due Date">03/01/2016</td>
      <td data-label="Amount">$2,443</td>
      <td data-label="Period">02/01/2016 - 02/29/2016</td>
    </tr>
    // ... 每個(gè) tr 進(jìn)行同樣的處理
  </tbody>
</table>

接著,借助 td 的偽元素,實(shí)現(xiàn)表頭信息的展示即可:

@media screen and (max-width: 600px) {
  // ... 保持一致
  table td {
    position: relative;
    display: block;
    text-align: right;
  }
  table td::before {
    position: absolute;
    left: 10px;
    righht: 0;
    content: attr(data-label);
  }
}

這里,我們核心的知識(shí)點(diǎn)就是利用了元素的偽元素可以在 content 屬性里,讀取其 HTML 元素內(nèi)的屬性內(nèi)容,并進(jìn)行展示的知識(shí)點(diǎn)。

  • 假設(shè)一個(gè) HTML 標(biāo)簽定義為: <div data-msg="ABC">
  • 那么該 div 對(duì)應(yīng)的偽類如果設(shè)置了 content: attr(data-msg) ,就可以讀取到 data-msg 的值,相當(dāng)于 content:"ABC"

這樣,我們?cè)谛∑聊幌?,就得到了這樣一種效果:

完整的效果,即如題圖所示:

完整的 DEMO,你可以戳這里:CodePen Demo -- Simple Responsive Table in CSS

最后

偽元素的這個(gè)特性其實(shí)可以應(yīng)用在日常效果中的非常多個(gè)地方,之前也有多篇文章提到過。

非常小的一個(gè)技巧,你學(xué)會(huì)了嗎?本文到此結(jié)束,希望對(duì)你有幫助 ,更多關(guān)于JS表格響應(yīng)式布局的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • js實(shí)現(xiàn)圖片加載淡入淡出效果

    js實(shí)現(xiàn)圖片加載淡入淡出效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)圖片加載淡入淡出效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 再談javascript原型繼承

    再談javascript原型繼承

    Javascript原型繼承是一個(gè)被說爛掉了的話題,但是自己對(duì)于這個(gè)問題一直沒有徹底理解,今天花了點(diǎn)時(shí)間又看了一遍《Javascript模式》中關(guān)于原型實(shí)現(xiàn)繼承的幾種方法,下面來一一說明下,在最后我根據(jù)自己的理解提出了一個(gè)關(guān)于繼承比較完整的實(shí)現(xiàn)。
    2014-11-11
  • Javascript中replace方法與正則表達(dá)式的結(jié)合使用教程

    Javascript中replace方法與正則表達(dá)式的結(jié)合使用教程

    replace方法是javascript涉及到正則表達(dá)式中較為復(fù)雜的一個(gè)方法,嚴(yán)格上說應(yīng)該是string對(duì)象的方法,下面這篇文章主要給大家介紹了關(guān)于Javascript中replace方法與正則表達(dá)式的結(jié)合使用的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • JS實(shí)現(xiàn)前端路由功能示例【原生路由】

    JS實(shí)現(xiàn)前端路由功能示例【原生路由】

    這篇文章主要介紹了JS實(shí)現(xiàn)前端路由功能,結(jié)合實(shí)例形式分析了js實(shí)現(xiàn)原生路由的相關(guān)原理與操作技巧,需要的朋友可以參考下
    2020-05-05
  • JavaScript中的類數(shù)組對(duì)象介紹

    JavaScript中的類數(shù)組對(duì)象介紹

    這篇文章主要介紹了JavaScript中的類數(shù)組對(duì)象介紹,一個(gè)對(duì)象并不是由Array構(gòu)造函數(shù)所創(chuàng)建的,它依然呈現(xiàn)出數(shù)組的行為,在這種情況下,這些對(duì)象被稱為“類數(shù)組對(duì)象”,需要的朋友可以參考下
    2014-12-12
  • js實(shí)現(xiàn)彈窗暗層效果

    js實(shí)現(xiàn)彈窗暗層效果

    本文主要分享了js實(shí)現(xiàn)彈窗暗層效果的示例代碼。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • JavaScript中fetch()用法實(shí)例

    JavaScript中fetch()用法實(shí)例

    在前端快速發(fā)展地過程中,為了契合更好的設(shè)計(jì)模式,產(chǎn)生了 fetch 框架,下面這篇文章主要給大家介紹了關(guān)于JavaScript中fetch()用法的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • JS中如何將JSON數(shù)組轉(zhuǎn)化為url參數(shù)

    JS中如何將JSON數(shù)組轉(zhuǎn)化為url參數(shù)

    這篇文章主要介紹了JS中如何將JSON數(shù)組轉(zhuǎn)化為url參數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 基于javascript實(shí)現(xiàn)數(shù)字英文驗(yàn)證碼

    基于javascript實(shí)現(xiàn)數(shù)字英文驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)數(shù)字英文驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Postman自動(dòng)化接口測(cè)試實(shí)戰(zhàn)

    Postman自動(dòng)化接口測(cè)試實(shí)戰(zhàn)

    有時(shí)我們可能需要在多個(gè)環(huán)境下對(duì)同一個(gè)接口進(jìn)行測(cè)試。比如我們請(qǐng)求的域名,開發(fā)、測(cè)試、生產(chǎn)環(huán)境,請(qǐng)求參數(shù)。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評(píng)論