整合營銷服務(wù)商

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

          免費咨詢熱線:

          Web 技術(shù):CSS最小和最大(寬度/高度)知識點及優(yōu)缺點

          常,我們希望限制元素相對于其父元素的寬度,同時使其具有動態(tài)性。因此,有一個基礎(chǔ)寬度或高度的能力,使其擴展的基礎(chǔ)上,可用的空間。比如說,我們有一個按鈕,它的寬度應(yīng)該是最小的,不應(yīng)該低于它的寬度。這就是最大和最小屬性變得方便的地方。

          在本文中,我們將詳細介紹CSS的最大和最小寬度和高度屬性,并使用可能的用例和技巧詳細解釋每一個屬性。

          width 屬性

          首先要討論的是與寬度相關(guān)的屬性。我們有min-width和max-width,它們中的每一個都很重要,都有自己的用例。

          Min Width

          設(shè)置min-width的值時,其好處在于防止width屬性使用的值變得小于min-width的指定值。 請注意,min-width的默認值是auto,它解析為0。

          讓我們舉一個基本的例子來說明這一點。

          我們有一個按鈕,里面有一個變化的文本。文本的范圍可能從一個單詞到多個單詞。為了確保即使只有一個單詞,它也有最小寬度,應(yīng)該使用min-width。

          最小寬度為100px,這樣即使按鈕的內(nèi)容很短,比如Done,或者只有一個圖標,它仍然足夠大,可以被注意到。在使用阿拉伯語等多語言網(wǎng)站時,這一點非常重要。 考慮以下來自Twitter的示例:

          在以前的情況下,按鈕上帶有單詞“??”,表示完成。 按鈕的寬度太小,因此在后面的案例中,我增加了它的最小寬度。

          min-width 和 padding

          在內(nèi)容較長的情況下,min-width可以擴展按鈕的寬度,而水平方向上的padding應(yīng)該被添加,以實現(xiàn)一個合適的外觀按鈕。

          Max Width

          在設(shè)置max-width值時,它的好處在于防止width屬性使用的值超過max-width的指定值。max-width的默認值是none。

          max-width的常見且簡單的用例是將其與圖像一起使用。 考慮以下示例:

          圖像比它的父元素大。通過使用max-width: 100%,圖像的寬度不會超過其父圖像的寬度。如果圖像比父圖像小,則max-width: 100%不會對圖像產(chǎn)生實際影響,因為它比父圖像小。

          使用最小寬度和最大寬度

          當min-width和max-width都用于一個元素時,它們中的哪一個將覆蓋另一個?換句話說,哪個優(yōu)先級更高?

          html

          <div class="wrapper">
            <div class="sub"></div>
          </div>

          css

          .sub {
            width: 100px;
            min-width: 50%;
            max-width: 100%;
          }

          初始width值為100px,并在其上加上min-width和max-width值。 結(jié)果是元素寬度未超過其包含的塊/父元素的50%。

          height 屬性

          除了最小和最大寬度屬性外,我們還具有與高度相同的屬性。

          min-height

          設(shè)置min-height的值時,其好處在于防止使用的height屬性值變得小于min-height的指定值。 請注意,最小高度的默認值為auto,它解析為0。

          我們用一個簡單的例子來演示一下。

          我們有一個帶有描述文本的部分。目標是為section設(shè)置一個最小高度,這樣它就可以處理短或長內(nèi)容。考慮下面的基本情況

          .sub {
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 1rem;
            min-height: 100px;
            color: #fff;
            background: #3c78dB;
          }

          最小高度為100px,使用flexbox時,內(nèi)容水平和垂直居中。 如果內(nèi)容更長,會發(fā)生什么? 例如一段?

          是的,你猜對了!section的高度將展開以包含新內(nèi)容。有了它,我們就可以構(gòu)建靈活的組件,并對其內(nèi)容做出響應(yīng)。

          事例源碼:https://codepen.io/shadeed/pen/cfb600cf30acdae9cf6f9cb5347a37cf

          max-height

          在設(shè)置max-height值時,它的好處在于防止height屬性使用的值超過max-height的指定值。注意,max-height的默認值是none。

          考慮下面的示例,其中我為內(nèi)容設(shè)置了max-height。 但是,因為它大于指定的空間,所以會發(fā)生溢出。 因此,文本超出了其父邊界。

          最小和最大屬性的用例

          我們將介紹min-width,min-height,max-width和max-height的一些常見和不常見的用例。

          標簽列表

          當有一個標簽列表時,建議限制一個標簽的最小寬度,這樣如果它的內(nèi)容很短,它的外觀就不會受到影響。

          通過具有這種靈活性,無論內(nèi)容有多短,標簽都將看起來不錯。 但是,如果內(nèi)容作者輸入了一個非常長的標簽名稱,而他使用的內(nèi)容管理系統(tǒng)沒有標簽的最大字符長度,將會發(fā)生什么情況呢? 我們也可以使用max-width。

          .c-tag {
            display: inline-block;
            min-width: 100px;
            max-width: 250px;
            overflow: hidden;
            white-space: nowrap;
            text-overflow: ellipsis;
            /*Other styles*/
          }

          通過使用max-width,標簽寬度將被限制為特定值。 但是,這還不夠,標簽名稱應(yīng)被截斷。

          事例地址:https://codepen.io/shadeed/pen/320e42b7ad75c438a9e633417d737d16

          按鈕

          對于按鈕的最小值和最大值有不同的用例,因為按鈕組件有多種變體。考慮下面的圖:

          請注意,按鈕的“Get”寬度太小。 如果不設(shè)置最小寬度,則由于任何原因而沒有文本時,情況可能會變得更糟。 在這種情況下,設(shè)置最小寬度很重要。

          使用 flexbox 將最小寬度設(shè)置為零

          min-width的默認值是auto,它被計算為0。當一個元素是一個flex項時,min-width的值不會計算為零。flex 項目的最小大小等于其內(nèi)容的大小。

          根據(jù)CSSWG:

          默認情況下,flex項目不會縮小到它們的最小內(nèi)容大小(最長單詞或固定大小元素的長度)以下。要更改此設(shè)置,請設(shè)置min-width或 min-height屬性。

          考慮下面的例子

          這個人的名字有一個很長的單詞,這導(dǎo)致了溢出和水平滾動。盡管如此,我還是在標題中添加了下面的CSS來截斷它

          .c-person__name {
              white-space: nowrap;
              overflow: hidden;
              text-overflow: ellipsis;
          }

          由于title是flex項目,因此解決方案是重置min-width并將其強制為零。

          .c-person__name {
              /*Other styles*/
              min-width: 0;
          }

          下面是修復(fù)后的樣子

          根據(jù)CSSWG:

          在彈性項目的主軸上可見溢出的項目上,當在彈性項目的主軸min-size屬性中指定時,指定自動最小尺寸。

          意味著,將overflow設(shè)置為visible值以外的值會導(dǎo)致min-width被計算為0,這解決了我們不設(shè)置min-width: 0的問題。

          事例源碼:https://codepen.io/shadeed/pen/398ccffcd437a2fb042f5ce3bdd68c57

          使用 flexbox 將最小高度設(shè)置為零

          雖然與min-width相比,這是一個不太常見的問題,但是它可能發(fā)生。 只是為了確認,問題與不能少于其內(nèi)容的彈性項目有關(guān)。 結(jié)果min-height值被設(shè)置為與內(nèi)容一樣長。

          考慮以下示例:

          用紅色表示的文本應(yīng)該在父文本中裁剪。因為面板主體是一個flex項目,所以它的min-height與它的內(nèi)容相等。為了防止這種情況,我們應(yīng)該重新設(shè)置最小高度值。看看HTML和CSS是怎么樣的。

          HTML

          <div class="c-panel">
            <h2 class="c-panel__title"><!-- Title --></h2>
            <div class="c-panel__body">
              <div class="c-panel__content"><!-- Content --></div>
            </div>
          </div>

          CSS

          .c-panel {
            display: flex;
            flex-direction: column;
            height: 180px;
          }
          
          .c-panel__body {
            min-height: 0;
          }
          
          .c-panel__content {
            overflow-y: scroll;
            height: 100%;
          }

          通過向面板主體添加min-height: 0,這將重置該屬性,并且現(xiàn)在應(yīng)該可以正常工作。

          事例源碼:https://codepen.io/shadeed/pen/dea75b84b1fcfd03e5c21173a40afc20?editors=0100

          混合最小寬度和最大寬度

          在某些情況下,我們有一個最小寬度的元素,但同時,它沒有最大寬度。這可能會導(dǎo)致組件太寬,而我們并不想這樣做。考慮以下示例

          由于寬度是以像素為單位定義的,因此不能保證上面的方法適用于移動視口。為了解決這個問題,我們可以使用百分比來代替像素作為最小和最大屬性。考慮下面這個具有article主體的示例。

          我為圖像添加了以下CSS:

          img {
            min-width: 35%;
            max-width: 70%;
          }

          事例源碼:https://codepen.io/shadeed/pen/11f49fd1a35ad06ce241bee17c3d3124

          #### 頁面包裝器/容器

          最常用的`max-width`用例之一是頁面包裝器或容器。通過向頁面添加最大寬度,我們可以確保內(nèi)容對用戶來說是可讀的、易于瀏覽的。

          下面是一個包裝器的例子,它是居中的,左右兩邊有水平的填充。

          .wrapper {
              max-width: 1170px;
              padding-left: 16px;
              padding-right: 16px;
              margin-left: auto;
              margin-right: auto;
          }

          最大寬度和ch單位

          ch 是一個相對于數(shù)字0的大小,1ch 就是數(shù)字 0 的寬度。如定義一個3ch的寬度,那么就只能裝下 3個0。

          <!-- HTML代碼 -->
          
          <div>0000</div>
          
          /* CSS代碼 */
          
          div {
            width: 3ch;
            background: powderblue;
          }

          在前面的wrapper元素示例中,我們可以利用ch單元,因為它是一個article 主體。

          .wrapper {
              max-width: 70ch;
              /* Other styles */
          }

          對高度未知的元素進行動畫處理

          在某些情況下,我們面臨著使手風琴或移動菜單具有意想不到的內(nèi)容高度的挑戰(zhàn)。在這種情況下,max-height可能是一個很好的解決方案。

          請考慮以下示例:

          單擊菜單按鈕后,菜單應(yīng)隨動畫從上到下滑動。 如果沒有固定的高度(不建議這樣做),除非使用JavaScript,否則這是不可能的。 但是,對于max-height,這是可能的。 想法是為高度添加一個較大的值,例如max-height:20rem,可能無法達到,然后我們可以使用動畫從max-height: 0變換到max-height: 20rem。

          .c-nav {
              max-height: 0;
              overflow: hidden;
              transition: 0.3s linear;
          }
          
          .c-nav.is-active {
              max-height: 22rem;
          }

          點擊菜單按鈕可以看到動畫的運行。

          事例源碼:https://codepen.io/shadeed/pen/164c7ef67f5d4541bddb8bc12b2772da

          Hero 元素的最小高度

          一般來說,我不喜歡給元素添加固定的高度。我覺得這樣做,會破壞流式布局的結(jié)構(gòu)。但有些情況設(shè)置固定高度卻很有用。

          考慮下面的例子,在這里我們有一個設(shè)置了固定高度的hero部分。

          是,當內(nèi)容較長時,它會溢出并離開hero包裝器,這可不太好。

          為了預(yù)先解決這個問題,我們可以使用min-height來代替height。我們可以用這種方式先解決問題,盡管這可能會導(dǎo)致頁面看起來很奇怪,但是我認為應(yīng)該首先防止內(nèi)容管理系統(tǒng)(CMS)中發(fā)生這樣的事情。這樣,問題就解決了,看起來也不錯。

          內(nèi)容溢出的問題不僅在于內(nèi)容是否大于固定的hero 高度。它可以發(fā)生在屏幕大小調(diào)整作為文本換行的結(jié)果。

          如果改用min-height,則上述情況根本不會發(fā)生。

          模態(tài)組件

          對于模態(tài)組件,它需要最小和最大寬度,以便可以適應(yīng)移動設(shè)備到PC的屏幕上的適應(yīng)。

          思路1

          .c-modal__body {
              width: 600px;
              max-width: 100%;
          }

          思路2

          .c-modal__body {
              width: 100%;
              max-width: 600px;
          }

          對于我來說,我更喜歡第二個思路,因為我只需要定義max-width: 600px。modal是一個<div>元素,因此它已經(jīng)具有其父元素的100%寬度,對嗎?

          考慮下面為模態(tài)設(shè)計簡化的測試案例。 請注意,如果可用視口空間不足,則寬度如何更改為其父級的100%。

          事例源碼:https://codepen.io/shadeed/pen/5dcb1c4c6773cc3a97a766c327c36443

          最小高度和粘性頁腳

          當一個網(wǎng)站的內(nèi)容不夠長,它希望看到頁腳粘到底部。讓我們用一個可視化的例子來更好地展示這一點。

          請注意,頁腳未粘貼在瀏覽器窗口的末尾。 那是因為內(nèi)容不足以達到瀏覽器窗口高度的長度。 修復(fù)后,其外觀應(yīng)如下所示:

          首先,將body元素作為flexbox容器,然后將其最小高度設(shè)置為視口高度的100%。

          事例源碼:https://codepen.io/shadeed/pen/aeb14f2819b9cc4805275b88c2d55645?editors=1100

          最大寬度/高度和視口單位的流體比率

          為了使比例容器能夠根據(jù)視口大小進行響應(yīng)縮放,引入了padding hack。 現(xiàn)在,我們可以通過組合CSS中的視口單位和最大寬度/高度來模仿相同的行為。

          我們有一個尺寸為644 * 1000像素的圖像。 為了使其流暢,我們需要以下內(nèi)容:

          • 縱橫比:高度/寬度
          • 容器的寬度:可以是固定數(shù)字,也可以是動態(tài)數(shù)字(100%)
          • 設(shè)置height為視口寬度的100%乘以縱橫比
          • 設(shè)置max-heigh,該高度是容器的寬度乘以縱橫比
          • max-width設(shè)置為等于容器寬度

          人才們的 【三連】 就是小智不斷分享的最大動力,如果本篇博客有任何錯誤和建議,歡迎人才們留言,最后,謝謝大家的觀看。


          作者:Ahmad shaded 譯者:前端小智 來源:sitepoint 原文:https://www.impressivewebs.com/min-max-width-height-css

          本文中,我們看看開發(fā)人員使用JavaScript和正則表達式在他的網(wǎng)站上縮小元素的過程。閱讀更多!

          我創(chuàng)建了一個ShareButton Web組件,雖然效果并不好,但我喜歡它,并在創(chuàng)建Web組件時了解了很多關(guān)于Web組件的生態(tài)系統(tǒng)。

          這個項目的主要目標是將所有內(nèi)容封裝在一個ES6類中。我這樣做是因為我不想從我的元素發(fā)出任何非開發(fā)人員控制的Web請求。我認為我已經(jīng)實現(xiàn)了這個目標,但是代碼的可讀性受損,因為我不得不內(nèi)聯(lián)定義元素的HTML和CSS。

          它看起來很像這樣:

          const overlay = document.createElement('div');

          overlay.id = 'overlay';

          overlay.innerHTML = `

          <div id="urlbar">

          <input type="url" id="url" />

          <button id="copy" aria-label="Copy to clipboard">

          <slot name="clipboard">

          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24">

          <path fill="none" d="M0 0h24v24H0z"/>

          <path d="M16 1H4C3 1 2 2 2 3v14h2V3h12V1zm3 4H8C7 5 6 6 6 7v14c0 1 1 2 2 2h11c1 0 2-1 2-2V7c0-1-1-2-2-2zm0 16H8V7h11v14z"/>

          </svg>

          </slot>

          </button>

          <button id="mailto" aria-lable="Mail to">

          <slot name="mailto">

          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24">

          <path fill="none" d="M0 0h24v24H0z"/>

          <path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 id="android" aria-label="Share on Android">

          <slot name="android">

          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24">

          <path fill="none" d="M0 0h24v24H0z"/>

          <path d="M6 18c0 .6.5 1 1 1h1v3.5c0 .8.7 1.5 1.5 1.5s1.5-.7 1.5-1.5V19h2v3.5c0 .8.7 1.5 1.5 1.5s1.5-.7 1.5-1.5V19h1c.6 0 1-.5 1-1V8H6v10zM3.5 8C2.7 8 2 8.7 2 9.5v7c0 .8.7 1.5 1.5 1.5S5 17.3 5 16.5v-7C5 8.7 4.3 8 3.5 8zm17 0c-.8 0-1.5.7-1.5 1.5v7c0 .8.7 1.5 1.5 1.5s1.5-.7 1.5-1.5v-7c0-.8-.7-1.5-1.5-1.5zm-5-5.8L16.8 1c.2-.3.2-.6 0-.8-.2-.2-.5-.2-.7 0l-1.3 1.4C13.7 1.2 13 1 12 1c-1 0-2 .2-2.7.6L7.8 0H7v1l1.5 1C7 3.2 6 5 6 7h12c0-2-1-3.8-2.5-4.8zM10 5H9V4h1v1zm5 0h-1V4h1v1z"/>

          </svg>

          </slot>

          </button>

          </div>

          <div class="buttons">

          <slot name="buttons"></slot>

          </div>`;

          這并不壞,但這也意味著我的元素不可能被最大限度地縮小。事實上,除了聚合物工具(專注于解析HTML導(dǎo)入)之外,我找不到任何有關(guān)部署經(jīng)過優(yōu)化的自定義元素(如果我錯了,請告訴我)的工具或指導(dǎo)。

          我不認為作為一名元素作者,我應(yīng)該將整個構(gòu)建鏈和工具生態(tài)系統(tǒng)強加給我的元素用戶。我也相信我應(yīng)該能夠為用戶提供盡可能小的內(nèi)置文件,為用戶提供默認的快速體驗,而無需跳過這些環(huán)節(jié)。

          我不希望任何超級復(fù)雜的基礎(chǔ)架構(gòu)將單獨的CSS和JS文件合并到一個輸出中; 我只想讓自定義元素的開發(fā)版本與我部署的版本完全相同......只是更小。

          我希望通過這篇文章,至少你可以看到我的過程,并了解我如何縮小我的自定義元素。

          壓縮ES6類

          我用過babili。這是一個壓縮ES6類的非常整潔的工具。它仍然是試驗性的,但我沒有遇到任何重大問題。

          npm install babili --save-dev

          您可以通過許多不同的方式運行它,我選擇通過STDOUT將數(shù)據(jù)傳輸?shù)剿?/p>

          cat xyz | babili

          這很有效,但它將字符串留下,因為它假定(正確)這些字符串的輸出和格式是有意的。如果我想讓元素盡可能小,那么我需要縮小嵌入到元素中的CSS和HTML。

          那么你如何解決這樣的問題呢?

          我選擇了打破壓縮HTML并將CSS壓縮成兩個額外步驟的問題。

          壓縮內(nèi)聯(lián)CSS

          我無法輕松找出一種可擴展的方式來推斷字符串是CSS,并且需要壓縮,所以我上了舊學(xué)校并復(fù)制了我在Google Web Starter Kit中看到的一些東西 - 自定義標記,用于定義需要的東西被處理。

          自定義標記只是瀏覽器忽略的普通注釋,但是縮小器也會被刪除。

          我編寫了這個簡單的腳本,它從STDIN中讀取,加載整個文件,然后查找自定義注釋,然后使用簡單的正則表達式在運行替換函數(shù)之前查找注釋和內(nèi)容,然后再打印整個輸出回STDOUT。

          它包括clean-css,它似乎會做的伎倆。

          const CleanCSS = require('clean-css');

          const process = require('process');

          let input = '';

          process.stdin.on('readable', () => {

          let chunk = process.stdin.read();

          if(chunk != null) input += chunk;

          })

          process.stdin.on('end', () => {

          let cssRe = /\/\*compress\*\/(.|[\n\r])+?\/\*endcompress\*\//;

          let compressedOutput = input.replace(cssRe, (match, p1, offset, string) => {

          let output = new CleanCSS({}).minify(match);

          return output.styles;

          });

          process.stdout.write(compressedOutput);

          process.exit();

          });

          我不得不加強我的內(nèi)聯(lián)CSS /*compress*/和/*endcompress*/注釋,這對于任何閱讀源代碼的開發(fā)人員來說都可能有點混亂,但它確實給了我很大的靈活性。

          壓縮內(nèi)聯(lián)HTML

          我為HTML縮小做了完全相同的事情。這個html-minifier軟件包非常整齊,我玩弄了一些理想的默認設(shè)置,運行良好。

          const minify = require('html-minifier').minify;

          const process = require('process');

          let input = '';

          process.stdin.on('readable', () => {

          let chunk = process.stdin.read();

          if(chunk != null) input += chunk;

          })

          process.stdin.on('end', () => {

          let cssRe = /<!--compress-->(.|[\n\r])+?<!--endcompress-->/;

          let compressedOutput = input.replace(cssRe, (match, p1, offset, string) => {

          return minify(match, { removeAttributeQuotes: true, removeComments: true, collapseWhitespace: true });

          });

          process.stdout.write(compressedOutput);

          process.exit();

          });

          連接在一起

          共享按鈕具有build壓縮CSS和HTML 的自定義腳本,最后它執(zhí)行ES6縮小操作,并確保用于分發(fā)和包含的文件盡可能小。

          "scripts": {

          "build": "cat share-button.js | node build/compress-css.js | node build/compress-html.js | babili > dist/share-button.min.js"

          }

          將它整合到我的博客中

          我打算寫一篇關(guān)于部署Web組件的咆哮,但最后它非常簡單。

          1.從我的項目中安裝元素。

          npm install sharebutton --save

          2.將它添加到我的構(gòu)建部署中。

          install:

          - npm install

          - cp node_modules/sharebutton/dist/share-button.min.js static/javascripts/share-button.js

          下一步是什么?

          我認為這是值得的。該元素現(xiàn)在是7917字節(jié)與11700字節(jié),大約減小了33%(gzip,與2742比較是2792字節(jié)),所以我現(xiàn)在很高興(盡管我認為我可以做得更好)。我現(xiàn)在也有一個可以用于其他元素的進程,并且所有內(nèi)容都封裝在這個包中。

          我支持自己進入一個角落,選擇內(nèi)聯(lián)CSS和HTML,但我仍然認為這是構(gòu)建自定義元素的最佳解決方案。

          這里介紹的解決方案將在縮小元素方面做得很好,但是它不會做得很好,例如,因為自定義元素對外部元素不透明,所以我可以在縮小CSS選擇器,ID等方面做得更好。 。但CSS,HTML和JS沒有足夠的耦合度,足以讓我有信心做到這一點。

          我很樂意在這個過程中得到你的想法,如果你做了類似的事情,并有更好的結(jié)果。

          JSS是CSS的創(chuàng)作工具,它允許你使用JavaScript以聲明,無沖突和可重用的方式描述樣式。它可以在瀏覽器,服務(wù)器端或在構(gòu)建時在Node中編譯。JSS與框架無關(guān)。它由多個包組成:核心部分,插件以及框架集成等。



          Github

          https://github.com/cssinjs/jss stars:5.1k


          快速開始

          如果你已經(jīng)對使用JSS感興趣,可以使用在線代碼編輯器。在CodeSandbox(一個非常實用的在線編輯器,可以用來學(xué)習(xí)各種編程技能)上嘗試Hello World示例。以下是三種不同框架下的用法(代碼圖片生成自carbon網(wǎng)站):

          • JSS


          • React-JSS


          • Styled-JSS


          特性

          • 真實的CSS

          JSS生成實際的CSS,而不是內(nèi)聯(lián)樣式。它支持每個現(xiàn)有的CSS功能。CSS規(guī)則只創(chuàng)建一次,并使用其類名與元素重復(fù)使用,與內(nèi)聯(lián)樣式相反。此外,當DOM元素更新時,將應(yīng)用先前創(chuàng)建的CSS規(guī)則。

          • 無沖突選擇器

          JSS默認生成唯一的類名。它允許避免典型的CSS問題,默認情況下一切都是全局的。它完全消除了命名約定的需要。

          • 代碼重用

          使用JavaScript作為宿主語言使我們有機會以常規(guī)CSS無法實現(xiàn)的方式重用CSS規(guī)則。您可以利用JavaScript模塊,變量,函數(shù),數(shù)學(xué)運算等。如果做得好,它仍然可以完全聲明。

          • 易于拆卸和修改

          CSS規(guī)則的明確使用允許您跟蹤消費者并確定是否可以安全地刪除或修改它。

          • 動態(tài)Style

          使用JavaScript函數(shù)和Observable可以在瀏覽器中動態(tài)生成樣式,使有機會訪問應(yīng)用程序狀態(tài),瀏覽器API或遠程數(shù)據(jù)以進行樣式設(shè)置。你不僅可以定義一次樣式,還可以在任何時間點以有效的方式更新樣式。

          • 用戶控制的動畫

          JSS可以高效地處理CSS更新,可以使用它創(chuàng)建復(fù)雜的動畫。使用函數(shù)值,Observables并將它們與CSS過渡相結(jié)合,可以為用戶控制的動畫提供最大的性能。對于預(yù)定義的動畫,使用@keyframes和transition更好,因為它們將完全取消阻止JavaScript線程。

          • 關(guān)鍵的CSS

          要優(yōu)化第一次繪制的時間,你可以使用服務(wù)器端渲染并提取關(guān)鍵CSS。可以將CSS的呈現(xiàn)與HTML的呈現(xiàn)結(jié)合起來,這樣就不會生成未使用的CSS。它將導(dǎo)致在服務(wù)器端呈現(xiàn)期間提取的最小關(guān)鍵CSS,并允許內(nèi)聯(lián)它。

          • 插件

          JSS核心實現(xiàn)了基于插件的架構(gòu)。它允許您創(chuàng)建可以實現(xiàn)自定義語法或其他強大功能的自定義插件。JSS有許多官方插件,可以單獨安裝或使用默認預(yù)設(shè)。社區(qū)插件的一個很好的例子是jss-rtl。

          • Expressive 語法

          由于各種插件,JSS允許您使用現(xiàn)有的全局類名來嵌套,全局選擇器和組合。例如,允許您以比CSS更可讀的方式表達屬性。如果要直接從瀏覽器開發(fā)工具復(fù)制粘貼樣式,也可以使用模板字符串。jss-plugin-expandbox-shadow

          • 完全隔離

          另一個有用的插件示例是,它允許您完全隔離元素與全局級聯(lián)規(guī)則,并可能覆蓋不需要的屬性。在創(chuàng)建應(yīng)該在第三方文檔內(nèi)部呈現(xiàn)的窗口小部件時尤其有用。jss-plugin-isolate

          • React整合。

          React-JSS包提供了一些額外的功能:

          1. 動態(tài)主題 - 允許基于上下文的主題傳播和運行時更新。
          2. 關(guān)鍵CSS提取 - 僅提取渲染組件中的CSS。
          3. 延遲評估 - 樣式表在組件安裝時創(chuàng)建。
          4. 樣式表的靜態(tài)部分在所有元素之間共享。
          5. 使用props作為參數(shù)自動更新函數(shù)值和規(guī)則。
          • JavaScript構(gòu)建管道

          CSS不需要額外的構(gòu)建管道配置。無論你選擇構(gòu)建JavaScript的工具是什么,它都可以與JSS一起使用。

          安裝使用

          yarn add jss
          

          yarn add jss-preset-default //使用默認設(shè)置
          

          import jss from 'jss'
          import preset from 'jss-preset-default'
          jss.setup(preset())
          // 創(chuàng)造你的style.
          const style = {
           myButton: {
           color: 'green'
           }
          }
          //編譯樣式,應(yīng)用插件。
          const sheet = jss.createStyleSheet(style)
          //如果要在客戶端上呈現(xiàn),請將其插入DOM。
          sheet.attach()
          //如果要渲染服務(wù)器端,請獲取CSS文本。
          sheet.toString()
          

          • 使用自定義插件進行設(shè)置
          import jss from 'jss'
          import camelCase from 'jss-plugin-camel-case'
          import somePlugin from 'jss-some-plugin'
          //使用插件。
          jss.use(camelCase(), somePlugin())
          // Create your style.
          const style = {
           myButton: {
           color: 'green'
           }
          }
          //編譯樣式,應(yīng)用插件。
          const sheet = jss.createStyleSheet(style)
          // 如果要在客戶端上呈現(xiàn),請將其插入DOM
          sheet.attach()
          // 如果要渲染服務(wù)器端,請獲取CSS文本。
          sheet.toString()
          

          • 指定DOM插入點
          <head>
           <title>JSS</title>
           <!-- 自定義插入點 -->
          </head>
          

          import jss from 'jss'
          jss.setup({insertionPoint: 'custom-insertion-point'})
          

          <head>
           <title>JSS in body</title>
          </head>
          <body>
           <div id="insertion-point">
           這可能是你選擇的任何DOM節(jié)點,可以作為插入點。
           </div>
          </body
          

          import jss from 'jss'
          jss.setup({
           insertionPoint: document.getElementById('insertion-point')
          })
          

          簡單案例

          通過兩張圖片來體驗:




          總結(jié)

          JSS的功能是十分強大的,不僅僅讓寫css的方式放到了JavaScript,這樣對更加喜愛編寫javascript的小伙伴來說是值得嘗試的,而且還支持服務(wù)器端渲染等更多高級的特性,前端技術(shù)百花齊放,但目前仍然不變的是掌握JavaScript者得天下的時代!


          主站蜘蛛池模板: 久久久99精品一区二区| 老熟妇高潮一区二区三区| 国产一区二区三区在线影院| 日韩一区二区在线观看| 色精品一区二区三区| jazzjazz国产精品一区二区| 成人区人妻精品一区二区不卡视频| 日本免费精品一区二区三区| 不卡一区二区在线| 精品无码国产一区二区三区AV| 亚洲日韩一区精品射精| 精品一区二区三区在线播放| 亚洲一区二区三区在线观看精品中文 | 精品少妇人妻AV一区二区| 国产主播福利精品一区二区| 精品一区二区三区四区| 精品无码国产一区二区三区51安 | 久久精品国产一区二区三区肥胖| 3d动漫精品成人一区二区三| 日本免费电影一区| 亚洲熟女一区二区三区| 中文乱码字幕高清一区二区| 亚洲熟女乱综合一区二区| 无码人妻久久一区二区三区 | 国产一区二区三区免费观在线| 久久精品道一区二区三区| 久久久无码精品人妻一区| 熟女少妇精品一区二区| 无码一区二区三区AV免费| 国产免费一区二区三区免费视频| 国产福利一区二区三区在线视频| 精品一区二区三区在线观看l | 在线一区二区观看| 久久精品免费一区二区三区| 激情久久av一区av二区av三区| 精品一区二区久久| 视频在线观看一区二区三区| 亚洲国产情侣一区二区三区| 亚洲熟女少妇一区二区| 色多多免费视频观看区一区| 中文字幕在线不卡一区二区|