如果我为每个CSS设置CSS,我可以使用我自己的可选的带命名的HTML标签吗?

前端之家收集整理的这篇文章主要介绍了如果我为每个CSS设置CSS,我可以使用我自己的可选的带命名的HTML标签吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要我自己的 HTML标签,但我不希望新的标签可能会使用相同的名称,以使它们在将来中断.

这是一个好主意吗?我可以使用命名空间来避免冲突吗?

例:

HTML:

  1. <b:HGroup>
  2. <span>item 1</span><span>item 2</span><span>item 3</span>
  3. </b:HGroup>

CSS:

  1. @namespace b "library://ns.example.com/framework/1";
  2.  
  3. b|HGroup {
  4. display:inline-block;
  5. vertical-align: middle;
  6. }

我读了一个相关的问题,它建议DTD.我宁愿不创建一个DTD,但如果有必要,那么我想内联定义它.此外,我希望它以HTML5而不是XHTML运行.

注意:

我不想使用div加一个类.

据我所知,如果我明确地注册我的自定义元素,那么我写的自定义元素看起来不会被同名的未来元素所覆盖.这是W3的一个报价:

Because element registration can occur at any time,a non-custom
element could be created that might in the future become a custom
element after an appropriate definition is registered. Such elements
are called undefined potentially-custom elements. If such a definition
is ever registered,the element will be upgraded,becoming a custom
element.

我已经根据答案添加了一个完整的页面原型,我无法将其附加到任何带有命名空间的元素上.我已经在其中一个链接添加了一些JS,但评论了一些给我错误的部分.我的主要关注点是获得名称空间的元素将被带有命名空间的CSS风格化.从我如何理解它应该没有JS工作.

  1. <!DOCTYPE html>
  2. <html xmlns:xhtml="http://www.w3.org/1999/xhtml"
  3. xmlns:s="http://www.w3.org/2002/spark"
  4. xmlns:space="http://www.w3.org/2002/space"
  5. xmlns:spaced="http://www.w3.org/2002/spaced">
  6. <head>
  7.  
  8. <script>
  9. "use strict";
  10.  
  11. const inDocument = document.querySelector("example-element");
  12. const outOfDocument = document.createElement("example-element");
  13. // Before the element definition,both are HTMLElement:
  14. //console.assert(inDocument instanceof HTMLElement);
  15. //console.assert(outOfDocument instanceof HTMLElement);
  16.  
  17. //class ExampleElement extends HTMLElement {};
  18. //customElements.define("example-element",HTMLElement);
  19.  
  20. //class ExampleElement3 extends HTMLElement {}
  21. //customElements.define("element3",ExampleElement3);
  22.  
  23. //document.body.appendChild(outOfDocument);
  24.  
  25. </script>
  26. <style>
  27.  
  28. @namespace s url(http://www.w3.org/2000/spark);
  29. @namespace space url(http://www.domain.org/2000/spark-space);
  30. @namespace spaced "http://www.domain.org/2002/spark-spaced";
  31.  
  32. example-element {
  33. color: red;
  34. display:block;
  35. }
  36. element2 {
  37. color:green;
  38. font-weight:bold;
  39. }
  40. s|element3 {
  41. color:yellow;
  42. }
  43. space-element {
  44. color:yellow;
  45. }
  46. space|space-element {
  47. display:block;
  48. color:yellow;
  49. }
  50. spaced|spaced-element {
  51. display:block;
  52. color:yellow;
  53. }
  54. </style>
  55. </head>
  56.  
  57. <body>
  58. <example-element>example-element</example-element>
  59. <element2>element 2</element2>
  60. <space-element>space element</space-element>
  61. <s:element3>s namespace element 3</s:element3>
  62. <space:space-element>space namespace el</space:space-element>
  63. <spaced:spaced-element>spaced namespace el</spaced:spaced-element>
  64. </body>
  65.  
  66. </html>

解决方法

你在这里有一个很好的研究问题.在这样做时,您已经消除了所有“有效”的解决方案.

你绝对可以做你所建议的,无害的*打破标准.为了达到future proof,所有HTML标准允许使用未知元素,指示浏览器忽略它们(实质上,它们都成为< span>元素),因为没有任何迹象表明如何处理它们,尽管CSS确实会影响它们.这将在所有的浏览器,甚至马赛克和原始的IE(虽然CSS将不能在这样的古代浏览器中)工作.

正如您已经指出的那样,“正确”的方法是定义您自己的Document Type Definition(DTD),然后将其包含在〜HTML文档的顶部,并使用<!DOCTYPE>标签.这可能是过度的,但在技术上是正确的方法.

另一个解决方案(你也已经消除)将是使用< span class =“HGroup”>对于内联元素,< div class =“HGroup”>因为这些元素在默认情况下实际上并没有做任何事情.

解决方案的一个变体是覆盖某些其他无用标签的操作,并禁用其CSS中的标准属性,< s>例如:

  1. s {
  2. text-decoration: none; /* remove line-through */
  3. display: inline-block;
  4. vertical-align: middle;
  5. }

(*您可以使用自定义元素名称运行的“伤害”是,如果不指定DTD(您自己的或其他具有确切版本的DTD),则未来版本的HTML标准可以理论上定义一些不需要的属性为您的自定义元素.)

猜你在找的CSS相关文章