如何使用class属性指向CSS默认类

时间:2009-10-16 21:11:55

标签: html css validation class

有没有办法指向对象的默认CSS类?

例如,根据用户是否登录,我想指定一个不同的CSS类来控制标题的样式。

$css_class = "";
if($logged_in)
    $css_class = "success"

echo "[h1 class=".$css_class."] My Title [/h1]"

如果用户已登录,则css类设置为“success”,否则设置为“”。

我知道有一个空白类是不合适的,但有没有办法可以指向默认的H1属性,而不是创建一个单独的“未登录”的css类?

6 个答案:

答案 0 :(得分:3)

空类属性仅在XHTML 1.1下无效。使用XHTML 1.0的DOCTYPE,HTML 4.01和HTML 5将验证正常。

我不会对验证过于笼罩,它非常有用,但并不是Web开发的全部和最终目标。我绝对确保我的HTML 100%验证的唯一实例是在最初的HTML和CSS构建期间,因为在那个阶段无效的标记可能导致使用CSS的havock。一旦我开始添加服务器端和Javascript交互,我就不会过分担心它。

当然,你不应该只是默默地忽略它,但只要你知道验证错误是什么,理解它们,并做出一个不修复它们的巧妙决定,我认为没关系。

答案 1 :(得分:2)

为什么不省略class属性,如果它是空的?

$css_class = "";
if($logged_in)
    $css_class = " class=""success"""

echo "[h1.$css_class.] My Title [/h1]"

(不确定字符串中引号的转义......我不知道你使用的语言是什么......)

答案 2 :(得分:2)

为className设置一个空字符串并不是无效的。 属性是一个cdata-list,因此几乎任何东西都可以进入,它仍然会验证。

但是,您需要在属性值周围使用引号,否则无法进行空属性解析。无论如何,始终包括引号是正确的。

echo '<h1 class="'.htmlspecialchars($css_class).'"> My Title </h1>'

答案 3 :(得分:1)

<h1 class="">My Title</h1>可以正常工作(不确定它是否会通过W3C验证,但它适用于所有主流浏览器)。

答案 4 :(得分:0)

$css = $logged_in ? 'success' : 'dummy-undefined-css-value';
echo "<h1 class=\"$css\">My Title</h1>";

答案 5 :(得分:0)

如果您打算在Matt Huggins' answer中有条件,并考虑您对Guffa's answer的评论,为什么不将条件转移到回声?这将为您提供最干净的HTML输出。例如:

$css_class = array();
if($logged_in)
{
    $css_class[] = "success";
}

if($something_else)
{
    $css_class[] = "some-class";
}

echo '<h1' .
     empty($css_class)
         ? ''
         : ' class="' . implode(' ', $css_class) . '"'
     . '> My Title </h1>';