如何用链接包装一个块元素?

时间:2018-08-24 16:56:47

标签: php html html5 hyperlink

HTML5 spec声明

  

只要其中没有交互内容(例如按钮或其他链接),元素可以包裹在整个段落,列表,表格等等,甚至整个节中。

考虑到这一点,我有一个以HTML5文档类型(<!DOCTYPE html>开头的WordPress PHP文档,并用<article>包装了一个<a>,并设置了<a>display: block

我的源PHP:

<a href="<?php the_permalink(); ?>">
    <article>
        <header>
            Some header content
        </header>
        <footer>
            Some footer content
        </footer>
    </article>
</a>

但是,当我在几种最新的浏览器(在Chrome,Firefox和Safari中测试)上查看它时,我得到了:

<a href="the-correctly-rendered-url">
</a>
<article>
  <a href="the-correctly-rendered-url"></a>
  <header>
    <a href="the-correctly-rendered-url">
			    Some header content
            </a>
  </header>
  <footer>
    Some footer content
  </footer>
</article>

包装<a>被完全移到<article>的外面,并被复制以包装其中的某些元素。

这些浏览器是否不遵守HTML5规范?如果渲染的页面似乎不符合给定的规范,该怎么办?

4 个答案:

答案 0 :(得分:0)

您的问题与函数the_permalink()有关,该函数将包含过滤器和其他内容。

您发布的代码与仅回显字符串的普通函数一起正常工作。

代替使用

<a href="<?php the_permalink(); ?>">

尝试使用

<a href="<?php echo get_permalink(); ?>">

答案 1 :(得分:0)

在这种情况下,其他一些自定义和Wordpress函数正在<a>标签内创建其他project_categories_terms_links()标签edit_post_link()<article>,这导致了奇怪的呈现。

一旦我删除了这些内容或将它们制成纯文本,一切都会按预期呈现。

希望这可以帮助遇到相同问题的任何人。

答案 2 :(得分:-1)

您可以尝试

    <article>
      <a href="<?php the_url(); ?>">
         <header>
            Some header content
         </header>
         <footer>
            Some footer content
        </footer>
      </a>
    </article>

答案 3 :(得分:-1)

我只是使用此简单示例测试了您的代码,它在我的浏览器中运行良好

<?php
    function the_url()
    {
        echo 'http://exemple.com';
    }
?>

<a href="<?php the_url(); ?>">
    <article>
        <header>
            Some header content
        </header>
        <footer>
            Some footer content
        </footer>
    </article>
</a>

输出

<a href="http://exemple.com">
    <article>
        <header>
            Some header content
        </header>
        <footer>
            Some footer content
        </footer>
    </article>
</a>

您的问题在其他地方