溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么用原生JS進行CSS格式化和壓縮

發(fā)布時間:2021-08-10 16:54:37 來源:億速云 閱讀:123 作者:chen 欄目:web開發(fā)

本篇內(nèi)容介紹了“怎么用原生JS進行CSS格式化和壓縮”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

前  言

一直比較喜歡收集網(wǎng)頁特效,很多時候都會遇到CSS被壓縮過的情況,這時查看起來就會非常不方便,有時為了減少文件大小,也會對自己的CSS進行壓縮,網(wǎng)上提供這樣服務(wù)的很多,但都不盡如人意,因此打算自己動手寫一個JS來進行CSS的格式化和壓縮。

原  理

CSS的結(jié)構(gòu)如下:

選擇器{  css屬性聲明:值;  }

所以對CSS格式化也就比較簡單,大致分為以下幾步;

1、把多個空格合并成一個,去掉換行

2、對處理后的字符串按"{"進行分組

3、遍歷分組,對含有"}"的部分再次以"}"進行分組

4、對分組后的數(shù)據(jù)進行處理,主要是加上空格和換行

對CSS壓縮就比較簡單了,把空格合并,去掉換行就可以了

格式化

下面分步對以上步驟進行實現(xiàn)。

初始化:

function formathtmljscss(source, spaceWidth, formatType) {      this.source = source;      this.spaceStr = "    ";      if (!isNaN(spaceWidth)) {          if (spaceWidth > 1) {              this.spaceStr = "";              for (var i = 0; i < spaceWidth; i++) {                  this.spaceStr += " ";              }          }          else {              this.spaceStr = "\t";          }      }      this.formatType = formatType;      this.output = [];  }

這里幾個參數(shù)分別是要格式化的CSS代碼、CSS屬性聲明前空格寬度,類型(格式化/壓縮)

1、把多個空格合并成一個,去掉換行:

formathtmljscss.prototype.removeSpace = function () {      this.source = this.source.replace(/\s+|\n/g, " ")          .replace(/\s*{\s*/g, "{")          .replace(/\s*}\s*/g, "}")          .replace(/\s*:\s*/g, ":")          .replace(/\s*;\s*/g, ";");  }

2、對處理后的字符串按"{"進行分組

formathtmljscss.prototype.split = function () {      var bigqleft = this.source.split("{");  }

3、遍歷分組,對含有"}"的部分再次以"}"進行分組

formathtmljscss.prototype.split = function () {      var bigqleft = this.source.split("{");      var bigqright;      for (var i = 0; i < bigqleft.length; i++) {          if (bigqleft[i].indexOf("}") != -1) {              bigqright = bigqleft[i].split("}");          }          else {                       }      }  }

4、對分組后的數(shù)據(jù)進行處理,主要是加上空格和換行

這里的處理主要分為,把CSS屬性聲明和值部分取出來,然后加上空格和換行:

formathtmljscss.prototype.split = function () {      var bigqleft = this.source.split("{");      var bigqright;      for (var i = 0; i < bigqleft.length; i++) {          if (bigqleft[i].indexOf("}") != -1) {              bigqright = bigqleft[i].split("}");              var pv = bigqright[0].split(";");              for (var j = 0; j < pv.length; j++) {                  pv[j] = this.formatStatement(this.trim(pv[j]),true);                  if (pv[j].length > 0) {                      this.output.push(this.spaceStr + pv[j] + ";\n");                  }              }              this.output.push("}\n");              bigqright[1] = this.trim(this.formatSelect(bigqright[1]));              if (bigqright[1].length > 0) {                  this.output.push(bigqright[1], " {\n");              }          }          else {              this.output.push(this.trim(this.formatSelect(bigqleft[i])), " {\n");          }      }  }

這里調(diào)用了幾個方法:trim、formatSelect、formatStatement,下面一一說明。

trim:從命名就可以看出是去除首尾空格;

formathtmljscss.prototype.trim = function (str) {      return str.replace(/(^\s*)|(\s*$)/g, "");  }

formatSelect:是處理選擇器部分語法,做法就是給"."前面加上空格,把","前后的空格去掉,把多個空格合并為一個:

formathtmljscss.prototype.formatSelect = function (str) {      return str.replace(/\./g, " .")          .replace(/\s+/g, " ")          .replace(/\. /g, ".")          .replace(/\s*,\s*/g, ",");  }

formatStatement:是處理“css屬性聲明:值;”部分的語法,做法就是給":"后面加上空格,把多個空格合并為一個,去掉“#”后面的空格,去掉"px"前面的空格,去掉"-"兩邊的空格,去掉":"前面的空格:

formathtmljscss.prototype.formatStatement = function (str, autoCorrect) {      str = str.replace(/:/g, " : ")          .replace(/\s+/g, " ")          .replace("# ", "#")          .replace(/\s*px/ig, "px")          .replace(/\s*-\s*/g, "-")          .replace(/\s*:/g, ":");       return str;  }

調(diào)  用

調(diào)用部分比較簡單,對于格式化來說就是去掉空格和換行,然后分組處理,對于壓縮來說就是去掉空格和換行:

formathtmljscss.prototype.formatcss = function () {      if (this.formatType == "compress") {          this.removeSpace();      }      else {          this.removeSpace();          this.split();          this.source = this.output.join("");      }  }

界面HTML代碼:

<div id="content">         <div class="container">             <div class="box">                 <div class="main">                     <h3>CSS格式化/壓縮</h3>                     <div id="blurb">                         <fieldset id="options">                             <button id="submit">                                 <span>格式化 / 壓縮&nbsp;&nbsp;<img alt="格式化" src="/images/29.png"/></span>                             </button><br/>                             <span>縮進:</span>                             <ul>                                 <li>                                     <select name="tabsize" id="tabsize">                                         <option value="1">tab鍵縮進</option>                                         <option value="2">2空格縮進</option>                                         <option selected="selected" value="4">4空格縮進</option>                                     </select>                                 </li>                             </ul><br />                             <span>類型:</span><br />                             <input type="radio" name="format_type" value="format" checked="checked" id="format_format" /><label for="format_format">格式化</label>                             <input type="radio" name="format_type" value="compress" id="format_compress" /><label for="format_compress">壓縮</label>                         </fieldset>                     </div>                     <div id="beauty">                         <fieldset id="textarea-wrap">                             <textarea rows="20" cols="40" id="source"></textarea>                         </fieldset>                     </div>                 </div>             </div>         </div>     </div>

跟頁面元素按鈕綁定事件:

window.onload = function () {      var submitBtn = document.getElementById("submit");      var tabsize = document.getElementById("tabsize");      var sourceCon = document.getElementById("source");      var size = 4;      var formatType = "format";      submitBtn.onclick = function () {          var radios = document.getElementsByName("format_type");          for (i = 0; i < radios.length; i++) {              if (radios[i].checked) {                  formatType = radios[i].value;                  break;              }          }          var format = new formathtmljscss(sourceCon.value, size, formatType);          format.formatcss();          sourceCon.value = format.source;      }      tabsize.onchange = function () {          size = this.options[this.options.selectedIndex].value;          submitBtn.click();          return false;      }  }

“怎么用原生JS進行CSS格式化和壓縮”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI