整合營銷服務(wù)商

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

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

          JAVA筆記(三十一):層疊樣式表CSS常用總結(jié)

          JAVA筆記(三十一):層疊樣式表CSS常用總結(jié)

          疊樣式表 CSS

          1.CSS介紹:

          引題:

          • 網(wǎng)站中的所有頁面的標(biāo)題都是黑色

          • 老板需要將頁面中的所有的標(biāo)題改為紅色

          定義:

          • Cascade Style Sheet 層疊樣式表

          • html 在一個(gè)網(wǎng)頁中負(fù)責(zé)的事情是一個(gè)頁面的結(jié)構(gòu)

          • css(層疊樣式表) 在一個(gè)網(wǎng)頁中主要負(fù)責(zé)了頁面的數(shù)據(jù)樣式。

          優(yōu)勢(shì):

          • 使得頁面的結(jié)構(gòu)和表現(xiàn)分離

          2.CSS引入方式:

          行內(nèi)樣式:

          • <h2 style="color:#0F0">Hello World</h2>

          內(nèi)部樣式:

          內(nèi)部樣式

          外部樣式:

          外部樣式

          優(yōu)先級(jí)問題???

          行內(nèi)樣式 > 內(nèi)部樣式 > 外部樣式 就近原則

          link和@import引入外部樣式的區(qū)別???

          link與@import區(qū)別

          3.CSS選擇器

          作用:選擇器的作用就是找到對(duì)應(yīng)的數(shù)據(jù)進(jìn)行樣式化

          格式:選擇器{ 屬性:屬性值; }

          常見的選擇器

          4.偽類和偽元素:

          它們?cè)试S應(yīng)用的樣式用于文檔不存在的結(jié)構(gòu)上,或者是通過當(dāng)前元素的狀態(tài)甚至是文檔自身的狀態(tài)而推斷的某些東西上。偽類選擇器就是對(duì)元素處于某種狀態(tài)下進(jìn)行樣式的。

          <a>標(biāo)簽的偽使用

          案例嘗試

          5.常用操作屬性

          背景與文本

          表格

          邊框

          6.盒子模型

          盒子模型就是把一個(gè)html邊框比作成了一個(gè)盒子的邊框,盒子模型要做用于操作數(shù)據(jù)與邊框之間的距離或者 是邊框與邊框之間的距離。

          盒子模型主要是用于操作內(nèi)邊距(padding)與外邊距(margin)

          盒子模型

          嘗試代碼

          絕對(duì)定位與相對(duì)定位區(qū)別:

          position: absolute;絕對(duì)定位:絕對(duì)定位是相對(duì)于元素最近的已定位的祖先元素(即是設(shè)置了絕對(duì)定位或者相對(duì)定位的祖先元素)。如果元素沒有已定位的祖先元素,那么它的位置則是相對(duì)于最初的包含塊(body)。

          絕對(duì)定位本身與文檔流無關(guān),因此不占空間,普通文檔流中的元素的布局就當(dāng)絕對(duì)定位的元素不存時(shí)一樣,所以 它們可以覆蓋頁面上其他的元素,且可以通過z-index屬性來控制這些層的對(duì)方順序。

          絕對(duì)定位

          position: relative;相對(duì)定位:相對(duì)定位是相對(duì)于元素在文檔中的初始位置——首先它出現(xiàn)在它所在的位置上(即不設(shè)置position時(shí)的位置,然后通過設(shè)置垂直或水平位置,讓這個(gè)元素“相對(duì)于”它的原始起點(diǎn)進(jìn)行移動(dòng);

          注意,在使用相對(duì)定位時(shí),無論是否進(jìn)行移動(dòng),元素仍然占據(jù)原來的空間。因此,移動(dòng)元素會(huì)導(dǎo)致它覆蓋其它框。

          相對(duì)定位

          PS:這里只是對(duì)css的簡單使用總結(jié),里面還有很多技術(shù),可以參考菜鳥教程,W3CSCHOOL等在線教程

          往 css 優(yōu)先級(jí)中存在的問題

          如果我們的頁面上存在非常多的樣式,譬如有我們開發(fā)頁面的時(shí)候的自定義樣式,也有引入的組件庫樣式。這時(shí)候樣式將會(huì)非常混亂難以管理。

          當(dāng)我們想覆蓋一些本身非我們書寫的樣式時(shí)候,往往不得不通過使用優(yōu)先級(jí)權(quán)重更高的樣式名,去覆蓋那些樣式。

          同時(shí),當(dāng)樣式優(yōu)先級(jí)感到難以控制時(shí),開發(fā)者習(xí)慣濫用 !important 去解決,這又循環(huán)導(dǎo)致了后續(xù)更混亂的樣式結(jié)構(gòu)。

          基于讓 CSS 得到更好的控制和管理的背景,CSS @layer 應(yīng)運(yùn)而生。

          何為 CSS @layer?

          CSS Cascade Layers,也叫做CSS級(jí)聯(lián)層,是Cascading and Inheritance Level5 規(guī)范中新增了一個(gè)新的 CSS 特性。

          @layer聲明了一個(gè) 級(jí)聯(lián)層, 同一層內(nèi)的規(guī)則將級(jí)聯(lián)在一起, 這給予了開發(fā)者對(duì)層疊機(jī)制的更多控制。語法也非常簡單,看這樣一個(gè)例子:

          @layer utilities {
          
            /* 創(chuàng)建一個(gè)名為 utilities 的級(jí)聯(lián)層 */
          
          }

          這樣,我們就創(chuàng)建一個(gè)名為 utilities 的 @layer 級(jí)聯(lián)層。

          @layer語法

          @layer規(guī)則可以通過三種方式其一來創(chuàng)建級(jí)聯(lián)層。第一種方法如上方代碼所示,它創(chuàng)建了一個(gè)塊級(jí)的@規(guī)則,其中包含作用于該層內(nèi)部的CSS規(guī)則。

          @layer utilities {
          
            .padding-sm {
          
              padding: .5rem;
          
            }
          
          
          
          
            .padding-lg {
          
              padding: .8rem;
          
            }
          
          }

          一個(gè)級(jí)聯(lián)層同樣可以通過 @import 來創(chuàng)建,規(guī)則存在于被引入的樣式表內(nèi):

          @import(utilities.css) layer(utilities);

          你也可以創(chuàng)建帶命名的級(jí)聯(lián)層,但不指定任何樣式。例如,單一的命名層:

          @layer utilities

          或者,多個(gè)命名層也可以被同時(shí)定義。例如:

          @layer theme, layout, utilities

          這一做法很有用,因?yàn)閷幼畛醣恢付ǖ捻樞驔Q定了它是否有父級(jí)層。對(duì)于聲明而言,如果同一聲明在多個(gè)級(jí)聯(lián)層中被指定,最后一層中的將優(yōu)先于其他層。

          因此,在上面的例子中,如果 theme 層和 utilities 層中存在沖突的規(guī)則,那么 utilities 層中的將優(yōu)先被應(yīng)用。

          即使 utilities 層中規(guī)則的 優(yōu)先級(jí)低于 theme 層中的,該規(guī)則仍會(huì)被應(yīng)用。一旦級(jí)聯(lián)層順序建立之后,優(yōu)先級(jí)和出現(xiàn)順序都會(huì)被忽略。

          這將使創(chuàng)建CSS選擇器變得更加簡單,因?yàn)槟悴恍枰_保每一個(gè)選擇器都有足夠高的優(yōu)先級(jí)來覆蓋其他沖突的規(guī)則,你只需要確保它們出現(xiàn)在一個(gè)順序更靠后的級(jí)聯(lián)層中。

          :在已經(jīng)聲明級(jí)聯(lián)層的名字后,它們的順序隨即被確立,你可以重復(fù)聲明某級(jí)聯(lián)層的名字來向其添加CSS規(guī)則。這些樣式將被附加到該層的末尾,且級(jí)聯(lián)層之間的順序不會(huì)改變。

          其他不屬于任何一級(jí)聯(lián)層的樣式將被集中到同一匿名層,并置于所有層的前部,這意味著任何級(jí)聯(lián)層內(nèi)定義的規(guī)則都將覆蓋外部聲明的規(guī)則。

          嵌套層

          級(jí)聯(lián)層允許嵌套,例如:

          @layer framework {
          
            @layer layout {
          
          
          
          
            }
          
          }

          向 layout 層內(nèi)部的 framework 層附加規(guī)則,只需用 . 連接這兩層。

          @layer framework.layout {
          
            p {
          
              margin-block: 1rem;
          
            }
          
          }

          匿名層

          如果創(chuàng)建了一個(gè)級(jí)聯(lián)層但并未指定名字,例如:

          @layer {
          
            p {
          
              margin-block: 1rem;
          
            }
          
          }

          那么則稱為創(chuàng)建了一個(gè)匿名層。除創(chuàng)建后無法向其添加規(guī)則外,該層和其他命名層功能一致。

          標(biāo)準(zhǔn)語法

          @layer [ <layer-name># | <layer-name>?  {
          
            <stylesheet>
          
          } ]

          @layer如何使用

          創(chuàng)建級(jí)聯(lián)層

          級(jí)聯(lián)層可以通過多種方式聲明:

          1、使用@layer 塊規(guī)則,并立即為其分配樣式:

          @layer reset {
          
            * { /* Poor Man's Reset */
          
              margin: 0;
          
              padding: 0;
          
            }
          
          }

          2、使用規(guī)則@layer 語句,沒有指定任何樣式:

          @layer reset;

          3、將@import 與layer關(guān)鍵字或layer()函數(shù)一起使用

          @import(reset.css) layer(reset);

          以上每一個(gè)都創(chuàng)建了一個(gè)名為 的級(jí)聯(lián)層reset。

          管理級(jí)聯(lián)層

          級(jí)聯(lián)層會(huì)按它們聲明的順序排序。

          在下面的例子中,我們建立四個(gè)級(jí)聯(lián)層:reset,base,theme,和utilities。

          @layer reset { /* 創(chuàng)建級(jí)聯(lián)層 “reset” */
          
            * {
          
              margin: 0;
          
              padding: 0;
          
            }
          
          }
          
          
          
          
          @layer base { /* 創(chuàng)建級(jí)聯(lián)層 “base” */
          
            …
          
          }
          
          
          
          
          @layer theme { /* 創(chuàng)建級(jí)聯(lián)層 “theme” */
          
            …
          
          }
          
          
          
          
          @layer utilities { /* 創(chuàng)建級(jí)聯(lián)層 “utilities” */
          
            …
          
          }

          按照它們的聲明順序,層順序變?yōu)椋?/span>

          reset
          base
          theme
          utilities

          重復(fù)使用級(jí)聯(lián)層名稱時(shí),樣式將附加到現(xiàn)有級(jí)聯(lián)層。級(jí)聯(lián)層的順序保持不變,因?yàn)橹挥械谝淮蔚某霈F(xiàn)已經(jīng)確定順序:

          @layer reset { /* 創(chuàng)建第一個(gè)級(jí)聯(lián)層 “reset” */
          
            …
          
          }
          
          
          
          
          @layer base { /* 創(chuàng)建第二個(gè)級(jí)聯(lián)層 “base” */
          
            …
          
          }
          
          
          
          
          @layer theme { /* 創(chuàng)建第三個(gè)級(jí)聯(lián)層 “theme” */
          
            …
          
          }
          
          
          
          
          @layer utilities { /* 創(chuàng)建第四個(gè)級(jí)聯(lián)層 “utilities” */
          
            …
          
          }
          
          
          
          
          @layer base { /* 會(huì)將樣式添加至級(jí)聯(lián)層“base” */
          
            …
          
          }

          重新使用級(jí)聯(lián)層名稱時(shí)層順序保持不變的使@layer 語法變得更加方便和嚴(yán)謹(jǐn)。使用它,可以預(yù)先建立圖層順序,然后將所有 CSS 附加到它:

          @layer reset;     /* 創(chuàng)建第一個(gè)級(jí)聯(lián)層 “reset” */
          
          @layer base;      /* 創(chuàng)建第二個(gè)級(jí)聯(lián)層 “base” */
          
          @layer theme;     /* 創(chuàng)建第三個(gè)級(jí)聯(lián)層“theme” */
          
          @layer utilities; /* 創(chuàng)建第四個(gè)級(jí)聯(lián)層 “utilities” */
          
          
          
          
          @layer reset { /* 添加樣式至級(jí)聯(lián)層 “reset” */
          
            …
          
          }
          
          
          
          
          @layer theme { /* 添加樣式至級(jí)聯(lián)層  “theme” */
          
            …
          
          }
          
          
          
          
          @layer base { /* 添加樣式至級(jí)聯(lián)層  “base” */
          
            …
          
          }
          
          
          
          
          @layer theme { /* 添加樣式至級(jí)聯(lián)層  “theme” */
          
            …
          
          }

          當(dāng)然你可以用更短的語法來聲明級(jí)聯(lián)層,

          @layer reset, base, theme, utilities;

          從上面可以看出,多個(gè)級(jí)聯(lián)層被聲明時(shí),最后一個(gè)級(jí)聯(lián)層的聲明會(huì)獲勝。像這樣,

          @import(reset.css) layer(reset); /* 第一個(gè)級(jí)聯(lián)層 */
          
          
          
          
          @layer base { /* 第二個(gè)級(jí)聯(lián)層 */
          
            form input {
          
              font-size: inherit; 
          
            }
          
          }
          
          
          
          
          @layer theme { /*第三個(gè)級(jí)聯(lián)層 */
          
            input {
          
              font-size: 2rem;
          
            }
          
          }

          按以往CSS級(jí)聯(lián)來進(jìn)行分析的話,form input(多層級(jí))的優(yōu)先級(jí)會(huì)大于input,但是由于級(jí)聯(lián)層所起的作用,@layer theme的input會(huì)取勝。

          級(jí)聯(lián)層嵌套

          級(jí)聯(lián)層支持嵌套使用,如下:

          @layer base { /* 第一個(gè)級(jí)聯(lián)層*/
          
            p { max-width: 70ch; }
          
          }
          
          
          
          
          @layer framework { /* 第二個(gè)級(jí)聯(lián)層 */
          
            @layer base { /* 第二級(jí)聯(lián)層的嵌套子級(jí)聯(lián)層1 */
          
              p { margin-block: 0.75em; }
          
            }
          
          
          
          
            @layer theme { /* 第二級(jí)聯(lián)層的嵌套子級(jí)聯(lián)層2 */
          
              p { color: #222; }
          
            }
          
          }

          在這個(gè)例子中有兩個(gè)級(jí)聯(lián)外層:

          base
          framework

          該framework層本身也包含兩層:
          base
          theme

          如果要將樣式附加到嵌套級(jí)聯(lián)層,需要使用以下全名來引用它,

          @layer framework {
          
            @layer default {
          
               p { margin-block: 0.75em; }
          
            }
          
          
          
          
            @layer theme {
          
              p { color: #222; }
          
            }
          
          }
          
          
          
          
          @layer framework.theme {
          
            /* 這些樣式會(huì)被添加到@layer framework層里面的theme層 */
          
            blockquote { color: rebeccapurple; }
          
          }

          @media與@layer

          @media (min-width: 30em) {
          
            @layer layout {
          
              .title { font-size: x-large; }
          
            }
          
          }
          
          
          
          
          @media (prefers-color-scheme: dark) {
          
            @layer theme {
          
              .title { color: white; }
          
            }
          
          }

          如果第一個(gè)@media (min-width: 30em)匹配(基于視口尺寸),則layout級(jí)聯(lián)層層將在圖層順序中排在第一位。如果只有@media (prefers-color-scheme: dark)匹配,theme則將是第一層。

          如果兩者匹配,則圖層順序?qū)閘ayout, theme。如果沒有匹配,則不定義層。


          、CSS的層疊

          CSS的全稱是

          Cascading Style Sheets,

          中文翻譯為“層疊樣式表”

          1、聲明沖突

          ● 什么是聲明沖突?

          舉個(gè)栗子:

          【1】代碼:

          【2】顯示效果:

          通過上述栗子,我們可以看出什么是“聲明沖突”。

          所謂“聲明沖突”就是同一樣式多次應(yīng)用到同一元素

          ● 怎么解決聲明沖突?

          沖突 !=錯(cuò)誤

          通過CSS層疊解決聲明沖突,瀏覽器會(huì)自動(dòng)處理。


          2、層疊

          ● 層疊的三部曲


          ● 比較重要性(優(yōu)先級(jí))

          先了解幾個(gè)概念:

          ① 樣式表的分類:

          I、用戶樣式表

          瀏覽器的用戶提供。

          II、作者樣式表

          網(wǎng)頁開發(fā)者提供。

          III、默認(rèn)樣式表

          瀏覽器自身提供。

          ② 重要聲明與普通聲明

          屬性值后跟上! important 就表示這是一條重要聲明,反之則是普通聲明

          注意:一般不建議使用! important ,在實(shí)際開發(fā)中,需求在不斷變化,重要聲明可能變成普通申明。

          ③ 重要性(優(yōu)先級(jí))從高到低:

          • 用戶樣式表中的重要聲明
          • 作者樣式表中的重要聲明
          • 作者樣式表中的普通聲明
          • 用戶樣式表中的普通聲明
          • 瀏覽器默認(rèn)樣式表中的聲明

          重要性(優(yōu)先級(jí))高的會(huì)替換重要性(優(yōu)先級(jí))的樣式。


          ● 比較特殊性

          比較特殊性,看選擇器的適用范圍的大小。

          總體規(guī)則:選擇器選中的范圍越窄越特殊。

          越特殊的樣式會(huì)被最終應(yīng)用。

          特殊性從高到低:內(nèi)聯(lián)樣式——id選擇器——類選擇器——元素選擇器——通配符選擇器

          在比較特殊性時(shí),每個(gè)沖突的聲明會(huì)生成四位數(shù)(a b c d)來比較特殊性,值越大,越特殊。

          千位:如果是內(nèi)聯(lián)樣式,記1,否則記0。

          看下面

          百位:等于選擇器中id選擇器的數(shù)量

          十位:等于選擇器中所有類選擇器屬性選擇器偽類選擇器的數(shù)量

          個(gè)位:等于選擇器中所有元素選擇器偽元素選擇器的數(shù)量


          ● 比較源次序

          當(dāng)CSS樣式的重要性和特殊性都相同時(shí)

          比較源次序,簡單說就是最后出現(xiàn)的聲明勝出,其他的淘汰。


          3、小試牛刀

          ● html代碼

          ● css代碼


          二、CSS的繼承與非繼承

          當(dāng)元素的一個(gè)繼承屬性 (inherited property)沒有指定值時(shí),則取父元素的同屬性的計(jì)算值 computed value。只有文檔根元素取該屬性的概述中給定的初始值(initial value)(這里的意思應(yīng)該是在該屬性本身的定義中的默認(rèn)值)。

          通常,跟文字內(nèi)容相關(guān)的屬性都能被繼承。

          1、繼承屬性的一個(gè)典型例子就是 color 屬性。給出以下樣式規(guī)則:

          p { color: green; }
          
          <p>This paragraph has <em>emphasized text</em> in it.</p>
          

          …文本 "emphasized text" 就會(huì)呈現(xiàn)為綠色,因?yàn)?em 元素繼承了 p 元素 color 屬性的值,而沒有獲取 color 屬性的初始值(這個(gè) color 值用于頁面沒有指定 color 時(shí)的根元素)。

          2、非繼承屬性的一個(gè)典型例子就是 border 屬性。給出以下樣式規(guī)則:

           p { border: medium solid; }
          
           <p>This paragraph has <em>emphasized text</em> in it.</p>
          

          …文本 "emphasized text" 就沒有邊框,因?yàn)?border-style 屬性的初始值為none

          3、如何查看一個(gè)元素是默認(rèn)繼承還是默認(rèn)不繼承?

          ● 查看權(quán)威網(wǎng)站:

          https://developer.mozilla.org/zh-CN/docs/Web/HTML

          ● 比如查看background是否默認(rèn)繼承

          4、特殊CSS屬性值

          - inherit:手動(dòng)(強(qiáng)制)繼承,將父元素的值取出應(yīng)用到該元素

          - initial:初始值,將該屬性設(shè)置為默認(rèn)值


          三、 CSS渲染過程

          1、CSS渲染過程

          確定聲明值

          參考樣式表中沒有沖突的聲明,作為CSS屬性值

          層疊沖突

          對(duì)樣式表有沖突的聲明使用層疊規(guī)則,確定CSS屬性值

          使用繼承

          對(duì)仍然沒有值的屬性,若可以繼承,則繼承父元素的值

          使用默認(rèn)值

          對(duì)仍然沒有值的屬性,使用默認(rèn)值

          2、小試牛刀

          問題:

          a元素中的“”顯示的是什么顏色?

          p元素中的“Python大星”顯示的是什么顏色?

          why?歡迎評(píng)論區(qū)留言。


          四、上一集

          >>>《Python Web全棧之旅04--Web前端●走入CSS的世界》


          主站蜘蛛池模板: asmr国产一区在线| 91在线精品亚洲一区二区| 亚洲一区二区三区无码国产| 无码一区二区三区亚洲人妻| 国语精品一区二区三区| 人妻无码一区二区三区| 国产精品美女一区二区三区| 亚洲一区中文字幕在线观看| 无码人妻精品一区二区三区久久| 国产成人精品一区二三区在线观看| 无码人妻一区二区三区av| 69久久精品无码一区二区| 精品国产一区二区三区色欲| 一区二区三区四区精品视频| 国产午夜福利精品一区二区三区| 全国精品一区二区在线观看| 国产亚洲综合精品一区二区三区| 成人国产精品一区二区网站公司| 日本无卡码一区二区三区| 伊人色综合一区二区三区影院视频| 日韩人妻精品无码一区二区三区 | 无码精品人妻一区二区三区中| 国产成人无码精品一区在线观看| 福利一区二区在线| 亚洲福利视频一区二区| 国产伦一区二区三区高清| 亚洲国产综合精品一区在线播放| www.亚洲一区| 中文字幕在线精品视频入口一区 | 成人在线观看一区| 在线观看日韩一区| 乱中年女人伦av一区二区| 久久久久国产一区二区| 久久国产视频一区| 亚洲AV成人一区二区三区在线看| 国产一区二区三区播放心情潘金莲| 日韩精品免费一区二区三区| 日韩经典精品无码一区| 亚洲色婷婷一区二区三区| 中文字幕无线码一区二区| 国产一区二区三区不卡在线观看|