终于解决body元素居中问题(xslt+xml->html,终极解决方案)

对html不熟,所以整个过程比较复杂,目的是将一个宽800的div居中显示,但html是xslt+xml产生的。

【1】设置属性

开始对body属性各种设置,IE和FF都很好,但VC里的CHtmlView控件显示不能居中。(表现上看,貌似使用的是IE6引擎,以前碰到都是去修改网页和脚本,没试过用程序设置)。

后来查到是自己理解错了,不是对body设置,body就是浏览器宽度,应该对div设置。div样式中加上如下(或相同效果的)代码:

#mainframe
{
    width:800px;
    margin:0 auto;
} 
但是,不能居中,左对齐。不同的帖子和回复,相同的代码,让我坚信不是这两行代码的问题。

【2】html开头

查到了HTML开头需要如下一句(w3c有具体解释),否则开始查到的居中设置不能应用,也就是写对了但无效,被忽略了。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
【3】如何用xslt生成

手工写不行,

放到<![CDATA[]],有网友反映不行,

有的说放到xml里,然后xsl:value-of,未尝试

有的在xslt里写了一个固定的模板,html之前先输出,我也没尝试,但这种方法最接近了

http://bbs.blueidea.com/thread-2167695-1-1.html

<?xml version="1.0" encoding="GB2312" ?>
<!--作者:八神奄-->
<?xml-stylesheet type="text/xsl" href="Test.xslt"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">                
        
        <xsl:output method="html" encoding="gb2312"/>
        <xsl:template match="/">
                <xsl:value-of select="document('')/*/xsl:template[@name='DOCTYPE']/node()" disable-output-escaping="yes"/>
        </xsl:template>

        <xsl:template name="DOCTYPE">
                <![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">]]>
        </xsl:template>

</xsl:stylesheet>
最终解决方法,使用xsl:output标签及其属性:

http://bbs.xml.org.cn/dispbbs.asp?boardID=8&ID=63717

	<xsl:output method="html" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" indent="yes"/>
【4】搜索,改变你我生活:)

你可能感兴趣的:(终于解决body元素居中问题(xslt+xml->html,终极解决方案))