2012-02-28 44 views
1

我想让命名空间写在外部的css(实际上是两个单独的文件)。当我在浏览器上运行该文件时,它不会使用声明的名称空间。我认为,该文件被调用CSS文件,但它不是采用命名空间的方式得到声明的命名空间工作时出现问题

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<?xml version="1.0" encoding="utf-8"?> 


<html xmlns:act="http://www.superstarmovies.com/actors" 
    xmlns:mov="http://www.superstarmovies.com/movies" 
    xmlns="http://www.w3.org/1999/xhtml" > 

<head> 
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> 
<title>Superstar Movies: Stars of the Month</title> 
<link rel="stylesheet" href="movies.css" type="text/css" ?> 
<link rel="stylesheet" href="actors.css" type="text/css" ?> 
<link rel="stylesheet" href="superstar.css" type="text/css" /> 
</head> 

<body> 
<div id="heading"><img src="logo.gif" alt="Superstar Movies" /></div> 

<div id="main"> 
<h1>Stars of the Month</h1> 
<h3>Movies by Our Featured Stars!</h3> 
<act:actors> 

    <act:actor> 
     <act:name>Halle Berry</act:name> 
    <act:date>August 14, 1966</act:date> 
    <act:birthplace>Cleveland, Ohio</act:birthplace> 
      <mov:movie genre="action" star="Halle Berry"> 
     <mov:name>Catwoman</mov:name> 
    <mov:date>(2004)</mov:date> 
    <mov:length>104 minutes</mov:length> 
    </mov:movie> 

    <mov:movie genre="horror" star="Halle Berry"> 
     <mov:name>Gothika</mov:name> 
    <mov:date>(2003)</mov:date> 
    <mov:length>98 minutes</mov:length> 
    </mov:movie> 

    <mov:movie genre="drama" star="Halle Berry"> 
     <mov:name>Monster&apos;s Ball</mov:name> 
    <mov:date>(2001)</mov:date> 
    <mov:length>111 minutes</mov:length> 
    </mov:movie> 

    <mov:movie genre="fantasy" star="Halle Berry"> 
     <mov:name>X-Men</mov:name> 
    <mov:date>(2000)</mov:date> 
    <mov:length>104 minutes</mov:length> 
    </mov:movie> 

    <mov:movie genre="romance" star="Halle Berry"> 
     <mov:name>Jungle Fever</mov:name> 
    <mov:date>(1991)</mov:date> 
    <mov:length>132 minutes</mov:length> 
    </mov:movie> 
    </act:actor> 

    <act:actor> 
    <act:name>Tom Hanks</act:name> 
    <act:date>July 9, 1956</act:date> 
    <act:birthplace>Concord, California</act:birthplace> 

<mov:movie genre="drama" star="Tom Hanks"> 
    <mov:name>Catch Me If You Can</mov:name> 
<mov:date>(2002)</mov:date> 
<mov:length>141 minutes</mov:length> 
</mov:movie> 

<mov:movie genre="adventure" star="Tom Hanks"> 
    <mov:name>Cast Away</mov:name> 
<mov:date>(2000)</mov:date> 
<mov:length>143 minutes</mov:length> 
</mov:movie> 

<mov:movie genre="action" star="Tom Hanks"> 
    <mov:name>Saving Private Ryan</mov:name> 
<mov:date>(1998)</mov:date> 
<mov:length>170 minutes</mov:length> 
</mov:movie> 

<mov:movie genre="adventure" star="Tom Hanks"> 
    <mov:name>Apollo 13</mov:name> 
<mov:date>(1995)</mov:date> 
<mov:length>140 minutes</mov:length> 
</mov:movie> 

<mov:movie genre="comedy" star="Tom Hanks"> 
    <mov:name>Forrest Gump</mov:name> 
<mov:date>(1994)</mov:date> 
<mov:length>142 minutes</mov:length> 
</mov:movie> 

<mov:movie genre="drama" star="Tom Hanks"> 
    <mov:name>Philadelphia</mov:name> 
<mov:date>(1993)</mov:date> 
<mov:length>125 minutes</mov:length> 
</mov:movie> 

<mov:movie genre="comedy" star="Tom Hanks"> 
    <mov:name>Big</mov:name> 
<mov:date>(1988)</mov:date> 
<mov:length>104 minutes</mov:length> 
</mov:movie> 
    </act:actor> 

</act:actors> 
</div> 

<address> 
Superstar Movies &#183; 123 Moviestar Lane &#183; Hollywood, FL 12345 
</address> 

</body> 

</html> 

CSS

@namespace act "http://www.superstarmovies.com/actors"; 

act|actor  {display: block; font-family: Arial, Helvetica, sans-serif; 
      margin-bottom: 20pt} 

act|name, act|date {display: block} 

act|name   {font-size: 14pt; color: DarkRed; font-style: bold} 

act|date, act|birthplace {display: inline; font-style: italic; color: DarkRed} 

act|birthplace   {padding-left: 0.5em} 

@namespace mov "http://www.superstarmovies.com/movies"; 

mov|movie  {display:block; font-family: Arial, Helvetica, sans-serif} 

mov|name, mov|date, mov|length {display: inline} 

mov|name   {font-style: bold; color:#003;} 

mov|length  {font-style: italics; padding-left: 0.5em} 

的思考?

回答

5

在您的XHTML:

  1. 您的标记没有形成良好:

    • 你的XML声明应该是第一位的,那么你的DOCTYPE声明:

      <?xml version="1.0" encoding="utf-8"?> 
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
      
    • 您的某些<link />标签未正确关闭,应该是:

      <link rel="stylesheet" href="movies.css" type="text/css" /> 
      <link rel="stylesheet" href="actors.css" type="text/css" /> 
      
  2. 您的网页必须由服务器来担任application/xhtml+xml。典型的服务器不知道您正在服务XHTML,因此他们将它们发送为text/html。浏览器将无法将text/html文件视为XML,因此它们不会将CSS应用于您的自定义XML元素。

    如果你用PHP的工作,它只是加入给你的XHTML文件的最顶端的一个问题:

    <?php header('Content-Type: application/xhtml+xml'); ?> 
    

    或者在ASP,补充一点:

    <% Response.ContentType = "application/xhtml+xml"; %> 
    

    你也应该有一个伴随的元标记,但不需要您的网页进行验证,并且浏览器无论如何都忽略它:

    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> 
    

    为了更好地理解这一点,你可以在UA上找到一篇简短的历史课程,将其作为HTML标记汤在this answer中处理XHTML。

在你的CSS:

  1. font-weight: bold,不font-style: bold

  2. 这是font-style: italic而不是font-style: italics

  3. 确保您的@namespace语句放置在样式表的开头。从spec

    任何@namespace规则必须遵守所有@charset和@import规则和其他之前所有非忽略的规则在样式表和规则集。


但与所有的说,你为什么不把你的演员和电影转换成自己的XML文件,然后使用XSLT到熟悉,实际XHTML转变呢?

+0

当然,除非你只是将它作为练习,在这种情况下,除了突出显示代码中的错误外,没有什么需要说的。 – BoltClock 2012-02-29 00:11:57

+0

好的,我做了HTML文件中的所有更改,我认为正在发生的是您在第4步中讨论的内容。我不确定为什么它根本没有读取.css。是的,这是一个任务,我不使用PHP的这一个。我认为我错过了一些愚蠢和基本的东西。我编辑了原始html文件以反映更改 – Overcranked 2012-02-29 00:53:23

+2

@Overcranked:关于'application/xhtml + xml'的观点是最重要的。如果您没有为正确的内容类型提供XHTML,那么您的自定义元素将不会被正确处理,并且您的CSS无法应用。您是否在使用任何服务器端技术来完成您的任务? ASP.NET,也许? – BoltClock 2012-02-29 00:54:37