整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          純 CSS 實(shí)現(xiàn)標(biāo)簽自動(dòng)顯示超出數(shù)量

          CSS強(qiáng)大的令人難以置信。

          這次我們來(lái)用 CSS 實(shí)現(xiàn)這樣一個(gè)功能:有多個(gè)寬度不同的標(biāo)簽水平排列,當(dāng)外層寬度不足時(shí),會(huì)提示超出的數(shù)量,演示效果如下

          如果讓我用 JavaScript來(lái)實(shí)現(xiàn)估計(jì)都有點(diǎn)折騰,畢竟寬度都是動(dòng)態(tài)的,要監(jiān)聽各部分的尺寸變化,包括標(biāo)簽的位置和外層的寬度,總之不是一兩行代碼就能搞定的。

          現(xiàn)如今,純CSS也能完美的實(shí)現(xiàn)這樣的效果,而且比 JS 實(shí)現(xiàn)更加簡(jiǎn)單,一起來(lái)看看吧

          一、CSS 實(shí)現(xiàn)思路

          很多時(shí)候,CSS并沒有直接的實(shí)現(xiàn)方式,需要“繞”點(diǎn)彎路,將需求拆分成很多小點(diǎn),然后逐一突破。

          回到本文這里,其實(shí)有幾個(gè)問題需要考慮:

          1. CSS 如何動(dòng)態(tài)累計(jì)數(shù)字?
          2. CSS 如何知道哪些元素在容器之外?
          3. CSS 如何區(qū)分是否溢出(顯示數(shù)量)

          關(guān)于第3點(diǎn),其實(shí)在之前這篇文章中有詳細(xì)介紹,有興趣可以回顧一下,非常有意思

          純 CSS 檢測(cè)文本是否溢出

          那么第一點(diǎn),CSS有沒有什么方式可以統(tǒng)計(jì)數(shù)量呢?

          沒錯(cuò),相信很多小伙伴已經(jīng)猜到了,就是利用 CSS計(jì)數(shù)器,示意如下

          counter-reset: num var(--num);
          counter-increment: num;
          ::after{
          	content: "+"counter(num);
          }
          

          關(guān)于計(jì)數(shù)器,我之前也在很多文章中有用到

          你可能不需要 JS!CSS實(shí)現(xiàn)一個(gè)計(jì)時(shí)器

          如何讓CSS計(jì)數(shù)器支持小數(shù)的動(dòng)態(tài)變化?

          還在使用定時(shí)器嗎?CSS 也能實(shí)現(xiàn)電子時(shí)鐘

          動(dòng)畫合成小技巧!CSS 實(shí)現(xiàn)動(dòng)感的倒計(jì)時(shí)效果

          自定義計(jì)數(shù)器小技巧!CSS 實(shí)現(xiàn)長(zhǎng)按點(diǎn)贊累積動(dòng)畫

          然后是第二點(diǎn),CSS有什么方式可以知道元素是出去了還是在視野之內(nèi)呢?

          如果是用 JS來(lái)判斷的話,最穩(wěn)妥的方式應(yīng)該Intersection Observer(交叉觀察者),相信很多同學(xué)都用過(guò),這個(gè)在圖片懶加載非常有用

          交叉觀察器 API - Web API 接口參考 | MDN (mozilla.org)[1]

          那么,CSS中有什么類似的呢?沒錯(cuò),還是之前提到過(guò)的CSS滾動(dòng)驅(qū)動(dòng)動(dòng)畫。

          不過(guò)這里用到的是視圖進(jìn)度,也就是關(guān)注的是元素自身位置,元素進(jìn)入到容器范圍之內(nèi)就會(huì)觸發(fā)動(dòng)畫,非常類似 JS中的Intersection Observer

          tag{
            animation: appear;
            animation-timeline: view(inline);
            animation-range: contain;
          }
          @keyframes appear{
            to {
              background-color: #9747FF;
            }
          }
          

          這里就不詳細(xì)介紹了,有興趣回顧之前這篇文章

          CSS 滾動(dòng)驅(qū)動(dòng)動(dòng)畫終于正式支持了~

          好了,關(guān)鍵原理就這些了,我們需要做的就是想辦法將「計(jì)數(shù)器」「元素進(jìn)出容器范圍」關(guān)聯(lián)起來(lái)就行了,接著往下看

          二、CSS 計(jì)數(shù)器

          利用 CSS 計(jì)數(shù)器,我們可以很輕松的統(tǒng)計(jì)元素的數(shù)量。

          先簡(jiǎn)單布局一下文章開頭的例子,HTML如下所示

          <div class="con">
            <a class="tag">HTML</a>
            <a class="tag">CSS</a>
            <a class="tag">JavaScript</a>
            <a class="tag">Flutter</a>
            <a class="tag">Vue</a>
            <a class="tag">React</a>
            <a class="tag">Svelte</a>
          </div>
          <span class="num"></span><!--用來(lái)計(jì)數(shù)的標(biāo)簽-->
          

          然后美化一下

          .con{
            display: flex;
            gap: 5px;
            padding: 5px;
            overflow: hidden;
          }
          .tag{
            padding: .2em .5em;
            background-color: #c49ef5;
            color: #fff;
            border-radius: 4px;
            animation: appear;
          }
          .num::after{
            content: "+0";
            padding: .2em .5em;
            background-color: #FFE8A3;
            color: #191919;
            border-radius: 4px;
          }
          

          這樣就得到了水平排列的 tag 布局(超出隱藏),后面跟一個(gè)數(shù)字

          現(xiàn)在我們定義一個(gè)計(jì)數(shù)器,然后通過(guò)每個(gè)tag進(jìn)行累計(jì),有多個(gè)tag相當(dāng)于多少次累加,最后在::after中顯示出來(lái)

          .con{
            counter-reset: num;  /*計(jì)數(shù)器初始值,默認(rèn)為0*/
          }
          .tag{
            counter-increment: num; /*計(jì)數(shù)器增量值,默認(rèn)為1*/
          }
          .num::after{
            content: "+"counter(num); 
          }
          

          默認(rèn)計(jì)數(shù)器的起始值是 0,每次累計(jì)是1,所以這里最后得到了7,這樣就能實(shí)時(shí)統(tǒng)計(jì)元素的數(shù)量了

          當(dāng)然,我們也可以自定義這些默認(rèn)值,比如

          .con{
            counter-reset: num 10;
          }
          .tag{
            counter-increment: num -1;
          }
          
          

          這種情況下,起始值是10,增量值是-1,所以最后得到了3,如下

          那么,該如何統(tǒng)計(jì)容器之外的標(biāo)簽數(shù)量呢?

          三、CSS 滾動(dòng)驅(qū)動(dòng)動(dòng)畫

          這里我們要利用CSS 視圖進(jìn)度時(shí)間軸,也就是觀察元素自身的位置,在進(jìn)入到容器范圍之內(nèi)執(zhí)行動(dòng)畫。

          拿上面這個(gè)例子,我們給標(biāo)簽添加一個(gè)動(dòng)畫,讓標(biāo)簽在進(jìn)入到容器之內(nèi)時(shí)變個(gè)顏色,實(shí)現(xiàn)如下

          .tag{
            animation: appear;
            animation-timeline: view(inline);
          }
          @keyframes appear{
            to {
              background-color: #4d47ff;
            }
          }
          

          由于是水平方向,所以這里需要設(shè)置view(inline) ,效果如下

          好像不是很明顯?這是因?yàn)閯?dòng)畫是在整個(gè)視區(qū)內(nèi)過(guò)渡的,我們可以改變動(dòng)畫時(shí)間線的區(qū)間animation-range,讓這個(gè)動(dòng)畫在進(jìn)出的一瞬間就變化

          .tag{
            animation: appear;
            animation-timeline: view(inline);
            animation-range: contain;
          }
          @keyframes appear{
            from,to {
              background-color: #4d47ff;
            }
          }
          

          效果如下

          那么,這個(gè)效果和前面的計(jì)數(shù)器有什么關(guān)聯(lián)呢?

          從效果上來(lái)看,在視區(qū)內(nèi)會(huì)執(zhí)行一個(gè)動(dòng)畫,如果在這個(gè)動(dòng)畫中加入計(jì)數(shù)器的累加會(huì)怎么樣呢?先去除原先的累加器

          .tag{
            /* counter-increment: num; */
          }
          @keyframes appear{
            from,to {
              background-color: #4d47ff;
              counter-increment: num;
            }
          }
          

          效果如下

          可以看到計(jì)數(shù)器已經(jīng)生效了,不過(guò)現(xiàn)在統(tǒng)計(jì)的在「可視區(qū)內(nèi)」標(biāo)簽的數(shù)量。而我們要統(tǒng)計(jì)的是「可視區(qū)外」的數(shù)量,好像反過(guò)來(lái)了,如何實(shí)現(xiàn)呢?

          這里有兩種思路。

          第一種,用總數(shù)減去可視區(qū)內(nèi)的數(shù)量,不就行了嗎?由于現(xiàn)在動(dòng)畫是針對(duì)可視區(qū)內(nèi)的,我們可以給計(jì)數(shù)器設(shè)置一個(gè)初始值,就是總量,然后動(dòng)畫中給累加值設(shè)置為-1,就相當(dāng)于減去當(dāng)前數(shù)量了,實(shí)現(xiàn)如下

          .con{
          	counter-reset: num 7;
          }
          @keyframes appear{
            from,to {
              background-color: #4d47ff;
              counter-increment: num -1;
            }
          }
          

          這樣就完美統(tǒng)計(jì)出了可視區(qū)外的數(shù)量了

          還有一種方式,我覺得更加巧妙,需要反向思考。原理是重置當(dāng)前的累加值,比如默認(rèn)情況下,正常累加,進(jìn)入可視范圍,把累加值設(shè)置為0,不就相當(dāng)于可視區(qū)外的正常累加了嗎?

          .tag{
            counter-increment: num;
          }
          @keyframes appear{
            from,to {
              background-color: #4d47ff;
              counter-increment: num 0;
            }
          }
          

          同樣能達(dá)到相同的效果

          現(xiàn)在基本已經(jīng)達(dá)到我們需要的效果了

          四、其他細(xì)節(jié)修正

          首先是,在超出范圍時(shí),需要在邊緣出添加一個(gè)半透明蒙層,這樣體驗(yàn)效果會(huì)更好。

          半透明蒙層很好實(shí)現(xiàn),只需要添加一個(gè)水平漸變的mask遮罩就行了

          .con{
            -webkit-mask: linear-gradient(to right, #fff calc(100% - 30px), transparent);
          }
          

          效果如下

          那么,如何在沒有超出時(shí),不出現(xiàn)這個(gè)遮罩呢?

          這個(gè)其實(shí)在之前的文章中有詳細(xì)介紹了,建議回顧一下

          純 CSS 檢測(cè)文本是否溢出

          利用CSS滾動(dòng)驅(qū)動(dòng)動(dòng)畫,可以檢測(cè)容器是否可滾動(dòng),也就是是否超出。所以我們只需要將遮罩放在滾動(dòng)驅(qū)動(dòng)動(dòng)畫里就行了,關(guān)鍵實(shí)現(xiàn)如下

          .con{
            animation: check;
            animation-timeline: scroll(x self);
          }
          @keyframes check{
            from,to {
              -webkit-mask: linear-gradient(to right, #fff calc(100% - 30px), transparent);
            }
          }
          

          效果如下

          還有一個(gè)問題,希望在沒有超出的時(shí)候不顯示后面的數(shù)量。

          關(guān)于這個(gè),我本來(lái)是打算用樣式查詢來(lái)實(shí)現(xiàn),但是遇到了一個(gè)問題,由于樣式查詢只能匹配到子元素,所以不得不將顯示數(shù)量的標(biāo)簽放到.con容器內(nèi)。但是這樣一來(lái),mask遮罩就會(huì)出現(xiàn)問題,就像這樣

          遮罩層連同數(shù)量標(biāo)簽一起被裁剪了!

          于是又想出了另一種方案,這個(gè)在以前的布局中其實(shí)用到的更多,那就是負(fù)margin

          實(shí)現(xiàn)很簡(jiǎn)單,給標(biāo)簽容器一個(gè)的負(fù)margin-right,這樣,右邊的數(shù)量就會(huì)被左邊的標(biāo)簽蓋住,比如

          .con{
            margin-right: -20px;
          }
          

          效果如下

          是不是已經(jīng)被蓋住一部分了?我們繼續(xù)向左偏移

          .con{
            margin-right: -50px;
          }
          

          這樣就完全看不到右邊的數(shù)量了

          那么,如何在超出時(shí)顯示數(shù)量呢?這里就體現(xiàn)出負(fù)margin的好處了,可以借助前一個(gè)元素來(lái)隱藏后一個(gè)元素,在這里,我們直接在前面的動(dòng)畫中還原margin就行了

          .con{
            animation: check;
            animation-timeline: scroll(x self);
          }
          @keyframes check{
            from,to {
              -webkit-mask: linear-gradient(to right, #fff calc(100% - 30px), transparent);
              margin-right: 0;
            }
          }
          

          這樣就完美實(shí)現(xiàn)了文章開頭所示效果了

          你也可以訪問以下鏈接來(lái)體驗(yàn)真實(shí)效果(Chrome115+)

          • CSS auto tag num (juejin.cn)[2]
          • CSS auto tag num (codepen.io)[3]

          五、總結(jié)一下

          以上就是本文的全部?jī)?nèi)容了,不知道你學(xué)會(huì)了嗎?下面總結(jié)一下實(shí)現(xiàn)重點(diǎn):

          1. 很多時(shí)候,CSS并沒有直接的實(shí)現(xiàn)方式,需要“繞”點(diǎn)彎路
          2. CSS計(jì)數(shù)器可以實(shí)現(xiàn)數(shù)字累加
          3. CSS滾動(dòng)驅(qū)動(dòng)動(dòng)畫可以檢測(cè)元素是否在可視范圍之內(nèi)
          4. CSS滾動(dòng)驅(qū)動(dòng)動(dòng)畫還能檢測(cè)元素是否內(nèi)容超出
          5. 計(jì)數(shù)累加器可以放在滾動(dòng)驅(qū)動(dòng)動(dòng)畫中,這樣在動(dòng)畫觸發(fā)時(shí)也就相當(dāng)于計(jì)數(shù)器生效了,這樣就能統(tǒng)計(jì)可視區(qū)的標(biāo)簽數(shù)量了
          6. 樣式查詢只能匹配到子元素,但是用子元素會(huì)受到mask遮罩的影響
          7. 負(fù)margin可以借助前一個(gè)元素來(lái)隱藏后一個(gè)元素

          [1]交叉觀察器 API - Web API 接口參考 | MDN (mozilla.org): https://developer.mozilla.org/zh-CN/docs/Web/API/Intersection_Observer_API

          [2]CSS auto tag num (juejin.cn): https://code.juejin.cn/pen/7352565668073439241

          [3]CSS auto tag num (codepen.io): https://codepen.io/xboxyan/pen/rNbYpZV



          作者:XboxYan

          來(lái)源-微信公眾號(hào):前端偵探

          出處:https://mp.weixin.qq.com/s/_m5UxLQQtDU1GxbLRnCUhQ

          增的結(jié)構(gòu)標(biāo)簽

          section元素

          表示頁(yè)面中的一個(gè)內(nèi)容區(qū)塊,比如章節(jié)、頁(yè)眉、頁(yè)腳或頁(yè)面的其他部分。可以和h1、 h2...等元素結(jié)合起來(lái)使用,表示文檔結(jié)構(gòu)。

          例:HTML5中<section>...</section>;HTML4中<div>...</div>。


          article元素

          表示頁(yè)面中一塊與上下文不相關(guān)的獨(dú)立內(nèi)容。比如一篇文章。


          aside元素

          表示article元素內(nèi)容之外的、與article元素內(nèi)容相關(guān)的輔助信息。


          header元素

          表示頁(yè)面中一個(gè)內(nèi)容區(qū)塊或真?zhèn)€頁(yè)面的標(biāo)題。


          hgroup元素

          表示對(duì)真?zhèn)€頁(yè)面或頁(yè)面中的一個(gè)內(nèi)容區(qū)塊的標(biāo)題進(jìn)行組合。


          footer元素

          表示整個(gè)頁(yè)面或頁(yè)面中一個(gè)內(nèi)容區(qū)塊的腳注。一般來(lái)說(shuō),他會(huì)包含創(chuàng)作者的姓名、創(chuàng)作日期以及創(chuàng)作者的聯(lián)系信息。


          nav元素

          表示頁(yè)面中導(dǎo)航鏈接的部分。


          figure元素

          表示一段獨(dú)立的流內(nèi)容,一般表示文檔主體流內(nèi)容中的一個(gè)獨(dú)立單元。使用figcaption元素為figure元素組添加標(biāo)題。

          figure 定義媒介內(nèi)容的分組, 以及它們的標(biāo)題。

          figcaption 定義 figure 元素的標(biāo)題。

          例如:

          <figure>
          <figcaption>PRC</figcaption>
          <p>The People's Republic of China was born in 1949</p>
          </figure>

          HTML4中常寫作

          <dl>
          <h1>prc</h1>
          <p>The People's Republic of China was born in 1949</p>
          </dl>

          新增的其他元素

          video元素

          定義視頻。像電影片段或其他視頻流。例:

          <video src="movie.ogg" controls="controls">video元素</video>

          HTML4中寫法:

          <object type="video/ogg" data="move.ogv">
          <param name ="src" value="movie.ogv">
          </object>

          audio元素

          定義音頻。如音樂或其他音頻流。例:

          <audio src ="someaudio.wav">audio元素</audio>

          html4中寫法:

          <object tyle="application/ogg" data="someaudio.wav">
          <param name ="src" value= "someaudio.wav">
          </object>

          embed元素

          用來(lái)嵌入內(nèi)容(包括各種媒體)。格式可以是Midi、Wav、AIFF、AU、MP3,flash等。例:<embed src="flash.swf" />

          HTML4中代碼示例<object data="flash.swf" type="application/x-shockwave-flash"><object>


          mark元素

          主要用來(lái)在視覺上向用戶呈現(xiàn)哪些需要突出顯示或高亮顯示的文字。典型應(yīng)用搜索結(jié)果中高亮顯示搜素關(guān)鍵字。

          HTML5<mark></mark>;HTML4 <span></span>。


          progress元素

          表示運(yùn)行中的進(jìn)程,可以使用progress元素顯示JavaScript中耗時(shí)時(shí)間函數(shù)的進(jìn)程。等待中……、請(qǐng)稍后等。<progress></progress>。


          time元素

          表示日期或時(shí)間,也可以兩者同時(shí)。


          ruby元素

          定義 ruby 注釋(中文注音或字符)。

          與 <ruby> 以及 <rt> 標(biāo)簽一同使用。ruby 元素由一個(gè)或多個(gè)字符(需要一個(gè)解釋/發(fā)音)和一個(gè)提供該信息的 rt 元素組成,

          還包括可選的 rp 元素,定義當(dāng)瀏覽器不支持 "ruby" 元素時(shí)顯示的內(nèi)容。


          <ruby>

          漢朝<rt><rp>(</rp>西漢和東漢<rp>)</rp></rt>

          </ruby>


          rt元素

          定義字符(中文注音或字符)的解釋或發(fā)音。


          rp元素

          在 ruby 注釋中使用, 以定義不支持 ruby 元素的瀏覽器所顯示的內(nèi)容。


          wbr元素

          表示軟換行。與br元素的區(qū)別:br元素表示此處必須換行;wbr表示瀏覽器窗口或父級(jí)元素足弓寬時(shí)(沒必要換行時(shí)),

          不換行,而寬度不夠時(shí)主動(dòng)在此處換行。


          canvas元素

          定義圖形,比如圖表和其他圖像。<canvas> 元素只是圖形容器(畫布),必須使用腳本來(lái)繪制圖形。

          <canvas id="myCanvas"></canvas>
          <script type="text/javascript">
          var canvas=document.getElementById('myCanvas');
          var ctx=canvas.getContext('2d');
          ctx.fillStyle='#FF0000';
          ctx.fillRect(0,0,80,100);
          </script>

          command元素 各版本瀏覽器支持有問題

          表示命令按鈕,比如單選按鈕、復(fù)選框或按鈕。

          只有當(dāng) command 元素位于 menu 元素內(nèi)時(shí),該元素才是可見的。否則不會(huì)顯示這個(gè)元素,但是可以用它規(guī)定鍵盤快捷鍵。。

          <menu>
          <command onclick="alert('Hello World')">
          Click Me!</command>
          </menu>


          details標(biāo)簽

          用于描述文檔或文檔某個(gè)部分的細(xì)節(jié) 。

          可與 summary 標(biāo)簽配合使用,summary可以為 details 定義標(biāo)題。

          標(biāo)題是可見的,用戶點(diǎn)擊標(biāo)題時(shí),會(huì)顯示出 details。summary應(yīng)該是details的第一個(gè)子元素。

          <details>
          <summary>迪麗熱巴</summary>
          <p>迪麗熱巴(Dilraba),1992年6月3日出生于新疆烏魯木齊市,中國(guó)內(nèi)地影視女演員。</p>
          </details>

          fieldset標(biāo)簽

          組合表單中的相關(guān)元素

          fieldset 標(biāo)簽用于從邏輯上將表單中的元素組合起來(lái)。

          legend 標(biāo)簽為 fieldset 元素定義標(biāo)題。

          <form>
          <fieldset>
          <legend>健康信息</legend>
          身高:<input type="text" />
          體重:<input type="text" />
          </fieldset>
          </form>

          datalist標(biāo)簽

          定義選項(xiàng)列表。請(qǐng)與 input 元素配合使用該元素,來(lái)定義 input 可能的值。

          datalist 及其選項(xiàng)不會(huì)被顯示出來(lái),它僅僅是合法的輸入值列表。使用 input 元素的 list 屬性來(lái)綁定 datalist。

          <input id="myCar" list="cars" />
          <datalist id="cars">
          <option value="BMW">
          <option value="Ford">
          <option value="Volvo">
          </datalist>

          datagrid標(biāo)簽 如何用?

          定義可選數(shù)據(jù)的列表。datagrid 作為樹列表來(lái)顯示。

          如果把 multiple 屬性設(shè)置為 true,則可以在列表中選取一個(gè)以上的項(xiàng)目。

          keygen標(biāo)簽 如何用?

          標(biāo)簽規(guī)定用于表單的密鑰對(duì)生成器字段。

          當(dāng)提交表單時(shí),私鑰存儲(chǔ)在本地,公鑰發(fā)送到服務(wù)器。

          <form action="demo_keygen.asp" method="get">
          Username: <input type="text" name="usr_name" />
          Encryption: <keygen name="security" />
          <input type="submit" />
          </form>

          output標(biāo)簽

          定義不同類型的輸出,比如腳本的輸出。

          <form action="form_action.asp" method="get" name="sumform">
          <output name="sum"></output>
          </form>

          source標(biāo)簽

          標(biāo)簽為媒介元素(比如 <video> 和 <audio>)定義媒介資源。


          menu標(biāo)簽

          定義菜單列表。當(dāng)希望列出表單控件時(shí)使用該標(biāo)簽。注意與nav的區(qū)別,menu專門用于表單控件。

          <menu>
          <li><input type="checkbox" />Red</li>
          <li><input type="checkbox" />blue</li>
          </menu>

          abbr: 標(biāo)記一個(gè)縮寫

          The <abbr title="People's Republic of China">PRC</abbr> was founded in 1949.

          顯示結(jié)果

          The PRC was founded in 1949.

          mark標(biāo)簽

          定義有記號(hào)的文本。

          <mark>有記號(hào)的文本</mark>

          progress 定義任何類型的任務(wù)的進(jìn)度。

          <progress min="0" max="100" value="60"></progress>

          Flask 的 Jinja2 模板引擎中,使用 block 標(biāo)簽可以在基模板(父模板)中聲明替換的區(qū)域,子模板則可以繼承父模板并重寫這些 block 區(qū)域中的內(nèi)容。向 Flask 的父模板中添加或追加內(nèi)容,你可以使用 super() 函數(shù)來(lái)引用父模板中的原始內(nèi)容。


          假設(shè)你有一個(gè)父模板 base.html,其中定義了兩個(gè) block:


          <!-- base.html -->

          <html>

          <head>

          ...

          {% block head %}

          <!-- 父模板的 head 內(nèi)容 -->

          {% endblock %}

          </head>

          <body>

          {% block content %}

          <!-- 父模板的主體內(nèi)容 -->

          {% endblock %}

          </body>

          </html>


          如果你想在子模板中不僅替換這些 block,還想保留并在其前面或后面追加內(nèi)容,你可以在子模板中這樣寫:


          <!-- child.html -->

          {% extends "base.html" %}


          {% block head %}

          {{ super() }} <!-- 這里使用 super() 調(diào)用父模板的原始內(nèi)容 -->

          <!-- 子模板追加的頭部?jī)?nèi)容 -->

          <link rel="stylesheet" href="style.css">

          {% endblock %}


          {% block content %}

          <!-- 子模板的主體內(nèi)容 -->

          <div>這里是子模板獨(dú)有的內(nèi)容。</div>


          <!-- 還可以在后面追加 super() 來(lái)保留父模板的內(nèi)容 -->

          {{ super() }}

          {% endblock %}


          在這個(gè)例子中,child.html 繼承了 base.html 并重寫了 head 和 content 塊。通過(guò)調(diào)用 {{ super() }},子模板 child.html 在新內(nèi)容的前后分別保留了父模板 base.html 中相應(yīng)塊的內(nèi)容。這允許你在現(xiàn)有內(nèi)容上擴(kuò)展,而不是替換掉整個(gè)塊的內(nèi)容。


          總之,通過(guò) block 和 super(),你可以很靈活地控制模板繼承的具體行為,既可以重寫整塊內(nèi)容,也可以在不修改父模板的情況下對(duì)其內(nèi)容進(jìn)行擴(kuò)展。


          主站蜘蛛池模板: 一区二区三区在线观看中文字幕| 精品一区二区ww| 国产精品被窝福利一区| 制服丝袜一区二区三区| 成人免费视频一区二区三区 | 国产成人一区二区三区在线| 日韩精品人妻一区二区三区四区 | 偷拍激情视频一区二区三区| 成人精品一区二区三区中文字幕| 日韩一区二区三区免费体验| 3D动漫精品一区二区三区| 蜜桃传媒视频麻豆第一区| 国产福利电影一区二区三区,免费久久久久久久精 | 视频一区二区三区免费观看| 国产精品福利一区二区久久| 亚洲电影国产一区| 国产成人一区二区三区在线观看| 精品无码综合一区| 久久精品一区二区影院| 精品视频一区二区三区四区五区| 亚洲一区二区高清| 91福利国产在线观看一区二区| 亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 在线精品亚洲一区二区小说| 农村人乱弄一区二区 | 亚洲AV永久无码精品一区二区国产| 精品国产亚洲一区二区三区在线观看| 中文字幕AV无码一区二区三区| 国产91精品一区二区麻豆网站| 国产精品福利一区二区久久| 亚洲欧美日韩国产精品一区 | 国产一区中文字幕在线观看| 国产在线一区视频| 无码人妻久久一区二区三区蜜桃| 天天爽夜夜爽人人爽一区二区| 国产精品免费大片一区二区| 一区二区三区人妻无码| 香蕉免费一区二区三区 | 中文字幕AV一区中文字幕天堂| 亚洲AV无码一区二区乱子伦| 亚洲一区二区三区深夜天堂|