css 如何在HTML中找到未使用的类?

6qfn3psc  于 5个月前  发布在  其他
关注(0)|答案(6)|浏览(93)

有很多工具可以在样式表中找到未使用的CSS规则,例如Chrome Audits和Firefox的Dust-Me Selectors附加组件(不幸的是,与Firefox Quantum不兼容)。
但是反过来呢?
如何找到HTML中的类,而这些类在样式表中不存在?

rvpgvaaj

rvpgvaaj1#

这可能是有帮助的:https://code.google.com/p/find-unused-classes/.根据描述:
它显示了存在于css选择器中的类,而不存在于html页面和like-verse中。
正如Jim所说,要注意的是,有些类可能不被样式表使用,但仍然在JavaScript中使用。

wkyowqbh

wkyowqbh2#

来自https://github.com/philipwalton/html-inspector的HTML Inspector具有以下功能之一:

*未使用类:有时候你会从样式表中删除一个CSS规则,但忘记从HTML中删除这个类。“unused-classes”规则将CSS中的所有类选择器与HTML中的类进行比较,并报告任何未使用的类。

HTML中作为JavaScript钩子的类可以通过白名单忽略。默认情况下,任何以js-language-supports-为前缀的类都被列入白名单。有关此规则背后的原理的更多信息可以在here中找到。
在它的FAQ中,你会发现一个书签。
或者通过脚本标签添加它:

<script src="http://cdnjs.cloudflare.com/ajax/libs/html-inspector/0.8.2/html-inspector.js"></script>

字符串
然后运行这个片段:

HTMLInspector.inspect(["unused-classes"]);


Andrew Grimm的评论指出,这个项目已经不再维护(最后一次提交是2017年12月)。幸运的是,它似乎仍然可以正常工作(2019年6月测试)。
还有grunt-unclassify,但该项目似乎已经死亡(最后提交2014年12月)。

55ooxyrt

55ooxyrt3#

这是关于如何在html中获取类名的部分答案

var classesEvery = [];
var elementsEvery = document.querySelectorAll('*');
for (var i = 0; i < elementsEvery.length; i++) {
  var classes = elementsEvery[i].className.toString().split(/\s+/);
  for (var j = 0; j < classes.length; j++) {
    var thisClass = classes[j];
    if (thisClass && classesEvery.indexOf(thisClass) === -1)
      classesEvery.push(thisClass);
  }
}

字符串
可以使用此JavaScript代码获取html文件中的类名。要获取CSS中使用的所有类,请尝试list-selectors。仍在考虑如何获取Javascript angularJS中使用的类名。添加了一个带有随机HTML类的工作片段来测试js。

var classesEvery = [];
var elementsEvery = document.querySelectorAll('*');
for (var i = 0; i < elementsEvery.length; i++) {
  var classes = elementsEvery[i].className.toString().split(/\s+/);
  for (var j = 0; j < classes.length; j++) {
    var thisClass = classes[j];
    if (thisClass && classesEvery.indexOf(thisClass) === -1)
      classesEvery.push(thisClass);
  }
}
console.log(classesEvery);
.hidden {
  display: none;
}
<!-- Some random HTML code. -->
<div ng-controller="HomeController" class="container hidden">

  <span>Simple Notifications:</span>
  <div class="rows">
    <div class="col-md-2"><button class="btn btn-primary" href ng-click="simple()">Simple notification</button></div>
    <div class="col-md-2"><button class="btn btn-warning" href ng-click="warning()">Warning notification</button></div>
    <div class="col-md-2"><button class="btn btn-success" href ng-click="success()">Success notification</button></div>
    <div class="col-md-2"><button class="btn btn-danger" href ng-click="error()">Error notification</button></div>
    <div class="col-md-2"><button class="btn btn-grimace" href ng-click="wait()">Wait notification</button></div>
    <div class="col-md-2"><button class="btn btn-primary" href ng-click="pop()">Link to other page</button></div>
  </div>
  <hr/>
  <span>Addding Option from Script:</span>
  <div class="rows">
    <div class="col-md-6">
      <Span>With CLose button</span>
      <button class="btn btn-primary" href ng-click="close()">Close Button </button>
    </div>
    <div class="col-md-6">
      <Span>Fade after 1 Sec</span>
      <button class="btn btn-primary" href ng-click="timeout()">Html notification</button>
    </div>
  </div>
  <br/>
  <hr/>
  <span>Custom Notification and Body output type:</span>
  <div class="rows">
    <div class="col-md-3"><button class="btn btn-primary" href ng-click="Custom_temp()">Custom template</button></div>
    <div class="col-md-3"><button class="btn btn-primary" href ng-click="trusted_html()">Trusted HTML</button></div>
    <div class="col-md-3"><button class="btn btn-primary" href ng-click="default_temp()">Default Template</button></div>
    <div class="col-md-3"><button class="btn btn-primary" href ng-click="file_custom_temp()">Including file from Folder</button></div>
  </div>
  <script type="text/ng-template" id="myTemplate.html">
    <div class="Custom_temp_html">
      <p>Notice, custom temlate is not in the list</p>
    </div>
  </script>
</div>
w9apscun

w9apscun4#

工具grunt-unclassify看起来也很有前途,尽管它的使用似乎并不简单:
https://medium.com/@mariusc23/remove-unused-css-classes-in-html-bbb856da8bdf#.55u0uokfb

hjqgdpho

hjqgdpho5#

当传递一个HTMLElement时,以下代码输出未使用的类和id:

function unused(e) {
  const s0 = JSON.stringify(window.getComputedStyle(e));
  const c = Array.from(e.classList.values());
  if (c.length !== 0) {
    c.forEach(cc => {
      e.classList.remove(cc);
      const s = JSON.stringify(window.getComputedStyle(e));
      if (s0 === s) {
        console.log(`class ${cc} is unused`);
      }
      e.classList.add(cc);
    });
  }
  const id = e.id;
  if (id) {
    e.removeAttribute("id");
    const s = JSON.stringify(window.getComputedStyle(e));
    if (s0 === s) {
      console.log(`id ${id} is unused`);
    }
    e.id = id;
  }
}

字符串
它的工作原理是通过window.getComputedStyle()提取元素的样式,然后逐个删除类并检查样式是否仍然相同。
(If你想要一个删除了无关的类和id的HTML版本,然后修改代码,只在类影响样式时才重新添加类,在所有子节点上递归调用函数,然后使用XMLSerializer. serializeToString序列化DOM。)

vngu2lb8

vngu2lb86#

https://css-tricks.com/detect-unused-classes-in-html/
前几天我看到Robert Kieffer发布了一个Gist,其中有一个有趣的解决方案。这个想法是加载document.styleSheets并找到所有的规则(那些是类的规则)。然后,使用MutationObserver来观察所有HTML的DOM,并检查每个节点的classList,看看它是否与任何样式表中的任何一个匹配。如果HTML有一个在样式表中找不到的类,报告它。
https://gist.github.com/broofa/7e95aad7ea0f34655428cda9868e7fa3
也作为npm包发布:https://github.com/broofa/checkcss

相关问题