Html 在锚点内放置一个div是否正确?

Html 在锚点内放置一个div是否正确?,html,Html,我听说在内联元素中放置块元素是一种HTML错误: <a href="http://www.mydomain.com"><div> What we have here is a problem. You see, an anchor element is an inline element, and the div element is a block level element. </div></a> 但是如果在样式表中将外部锚点样式设置为

我听说在内联元素中放置块元素是一种HTML错误:

<a href="http://www.mydomain.com"><div>
What we have here is a problem. 
You see, an anchor element is an inline element,
and the div element is a block level element.
</div></a>

但是如果在样式表中将外部锚点样式设置为
display:block
,会怎么样?还是错了吗?上的HTML 4.01规范似乎是这样认为的:

样式表提供了 指定任意图形的渲染 元素,包括是否为元素 渲染为块或内联。在里面 某些情况下,例如内联样式 对于列表元素,这可能是 适当,但总的来说,, 作家们不愿意写作 超越常规 中HTML元素的解释 这边走


有人对这个问题有什么进一步的建议吗?

如果你要努力制作
块,为什么不把
放在div中,作为块元素,它会给你同样的效果。

W3C文档不使用像错误和罪恶这样的概念,但它确实使用像提供方法这样的概念,可能是适当的和不鼓励的

实际上,在4.01规范的第二段中,它的文字如下所示

本文件中的关键词“必须”、“不得”、“必需”、“应”、“不应”、“应”、“不应”、“建议”、“可”和“可选”应按照[RFC2119]中所述进行解释。然而,为了可读性,这些单词在本规范中并非以所有大写字母出现

考虑到这一点,我相信在7.5.3块级和内联元素中有一个明确的陈述,它说

通常,内联元素可能只包含数据和其他内联元素

“一般”条件似乎引入了足够多的歧义,可以说HTML4.01允许内联元素包含块元素

当然,CSS2有一个显示属性值,它似乎适合您描述的用途。我不确定它是否得到过广泛的支持,但似乎有人预见到了这种行为的必要性

DTD在这里似乎不那么宽容,但符合规范:

HTML4.01规范包括附加的 无法在中表达的语法约束 DTD


在另一个注释中,您建议通过将块包装在锚点中使其处于活动状态。我不相信HTML禁止这样做,CSS显然也允许这样做。因此,为了回答标题问题,关于它是否永远正确,我说是的。根据标准,它有时是正确的。

不,它不会验证,但它通常在现代浏览器中工作。也就是说,在锚点内使用一个跨度,并在其上设置
display:block
,这肯定会在任何地方都有效,并且会验证

如果将其更改为块样式元素,则不会,它不再“错误”,但可能无法验证。但是做你正在做的事情没有多大意义。您应该将锚定标记保留为块级元素,没有内部div,或者将div放在外部。

您不能将
放在内部
-它是无效的(X)HTML

即使您使用display:block为span设置样式,您仍然无法将块级元素放入其中:(X)HTML仍然必须遵守(X)htmldtd(无论您使用哪一个),无论CSS如何改变内容


浏览器可能会根据您的需要显示它,但这并不正确。

取决于您所使用的HTML版本:

  • 声明
    指定
    是,因此它可能不会出现在

    当然,您可以自由设置内联元素的样式,使其看起来像块,或者确实可以设置块的样式,使其内联呈现。HTML中术语
    inline
    block
    的使用是指元素与文档语义结构的关系,而CSS中的相同术语更多地与元素的视觉样式相关。如果您使内联元素以块的方式显示,这很好

    但是,您应该确保当CSS不存在时,文档的结构仍然有意义,例如,当通过屏幕阅读器等辅助技术访问时,或者当强大的Google机器人检查时


  • 这是错误的。使用。

    在HTML 4中有一个DTD。此DTD是规范的机器可处理形式,其限制是DTD控制XML和HTML4,特别是“瞬态”风格,允许许多非“合法”XML的内容。不过,我认为它接近编纂说明符的意图。

    <!ELEMENT A - - (%inline;)* -(A)       -- anchor -->
    
    <!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
    
    <!ENTITY % fontstyle "TT | I | B | BIG | SMALL">
    
    <!ENTITY % phrase "EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE | ABBR | ACRONYM" >
    
    <!ENTITY % special "A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO">
    
    <!ENTITY % formctrl "INPUT | SELECT | TEXTAREA | LABEL | BUTTON">
    
    
    
    我将此层次结构中列出的标记解释为允许的标记总数

    虽然规范可能会说“inline elements”,但我很确定,它并不意味着您可以通过将块元素的显示类型声明为inline来绕过这个意图。内联标记具有不同的语义,无论您如何滥用它们


    另一方面,我发现有趣的是,包含
    special
    似乎允许嵌套
    A
    元素。规范中可能有一些强烈的措辞不允许这样做,即使它在XML语法上是正确的,但我不会进一步讨论这个问题,因为这不是问题的主题。

    我认为大多数情况下,当人们问这个问题时,他们构建了一个只有div的站点,现在其中一个div需要成为链接

    我看到有人在锚定标记中使用一个透明的空图像PNG,只是为了在div中创建一个链接,而该图像的大小与div相同

    事实上,这很令人伤心……但它的作用…

    仅供参考

    如果您的目标是使div可点击,那么可以使用jQuery/Java脚本

    这样定义您的div:

    <div class="clickableDiv" style="cursor:pointer">
      This is my div. Try clicking it!
    </div>
    
    
    这是我的分区。请尝试单击它!
    
    然后,jQuery的实现方式如下:
     <script type="text/javascript">
    
        $(document).ready(function () {
    
            $("div.clickableDiv").click(function () {
                alert("Peekaboo"); 
            });
        });
    </script>
    
    <div class="div__container>
      <div class="div__one>
      </div>
      <div class="div__two">
      </div>
      <a href="#"></a>
    </div>
    
    .div__container {
      position: relative; 
    }
    .div__container a {
      position: absolute;
      top: 0;
      bottom: 0;      
      left: 0;
      right: 0;
      z-index: 999;
    }