【问题标题】:Multiple class attributes in HTMLHTML 中的多个类属性
【发布时间】:2012-03-19 17:14:51
【问题描述】:

当一个元素有多个class 属性时会发生什么?

<div id="test" class="one two three" class="four">

我正在尝试在 WordPress 插件中为 post_class(); 的输出添加一个类,但函数本身正在创建整个部分 class="one two three"

是否等同于class="one two three four"? 还是第一个或第二个赢? 或者是未定义的行为,在这种情况下主流浏览器是做什么的?

如果您知道向这个 sn-p(WordPress 插件)添加类的正确方法,那也将不胜感激!

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

【问题讨论】:

    标签: php html css wordpress


    【解决方案1】:

    当一个元素有多个类属性时会发生什么?

    当为单个元素多次声明一个属性时(顺便说一句,这是无效的 HTML),从行为上讲,第一个值将覆盖同一属性的所有后续值。因此,在这种情况下,您的元素将只有 one two three 类。

    the HTML5 spec, 8.2.4.35 Attribute name state 中解释了这种行为,“...如果 [元素] 上已经有一个同名的属性,那么这是一个解析错误,必须删除新属性...”

    如果您知道向这个 sn-p(WordPress 插件)添加类的正确方法,那也将不胜感激!

    通常,如果您需要将自定义类动态添加到您的 WordPress 帖子中,您可以连接到 post_class 过滤器并根据需要操作 $classes 数组。以下是它在我的主题中的大致样子:

    function nv_post_class( $classes ) {
        // Most recent post on the front page
        global $count;
        if ( is_home() && 1 == $count )
            $classes[] = 'latest-post';
    
        return $classes;
    }
    
    add_filter( 'post_class', 'nv_post_class' );
    

    如果您只需要添加一个或多个静态类,请将它们作为空格分隔的字符串直接传递给post_class()

    <div id="post-<?php the_ID(); ?>" <?php post_class( 'myclass1 myclass2' ); ?>>
    

    更多信息请关注WordPress Codex

    【讨论】:

      【解决方案2】:

      那么文档就会失效,浏览器会尝试进行错误恢复。

      来自HTML 5 specification

      如果属性名称已经在属性列表中,则返回到标记属性的步骤。

      因此,如果正在使用 HTML 5 解析器,则应应用第一个属性。

      【讨论】:

      • 至少在 webkit 和 Firefox 中,这是正确的,第一类被尊重,随后被丢弃。 Fiddle
      猜你喜欢
      • 1970-01-01
      • 2015-06-06
      • 2018-08-12
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      相关资源
      最近更新 更多