热烈祝贺台州维博网络的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » DIV+CSS编程 » CSS创建竖排文字的简单方法

CSS创建竖排文字的简单方法

论坛链接
  • CSS创建竖排文字的简单方法
  • 发布时间:2010-12-02 16:44:27    浏览数:6516    发布者:tzlink    设置字体【   
在制作网页的时候我们经常需要创建一些竖排的文字,或许这对你来说是一件很简单的事情,但是你是否想过用CSS可有N种创建竖排文字的方法?下面是由我翻译自Nettuts+的文章,希望这几种方法能够给你带来一些提示。

方法一:<br/>标签

一种可能的方法(但不推荐)是在每个字母后面添加<br />标签来实现竖排文字:

以下为引用的内容:

<h1>
N <br />E <br />T <br />T <br />U <br />T <br />S
</h1>



千万不要使用使用这种方法,它是跛脚和草率的。

方法二:静态包裹

通过这个方法,我们将每个字母包裹在一个span中,然后在CSS中设置它的display属性为block。

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Vertical Text</title>

<style>
h1 span { display: block; }
</style>
</head>
<body>

<h1>
<span> N </span>
<span> E </span>
<span> T </span>
<span> T </span>
<span> U </span>
<span> T </span>
<span> S </span>
</h1>

</body>
</html>




这种方法的问题是,除了可怕的标签外,它需要你手工去给每个字母用span括起来。如果这些文字是由CMS动态生成的,那就别用这种方法了。

方法三:使用JavaScript

我最初的想法是用JavaScript动态地添加span标签,这样我们就避开了方法二遇到的问题。

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Vertical Text</title>

<style>
h1 span { display: block; }
</style>
</head>
<body>
<h1> NETTUTS </h1>

<script>
var h1 = document.getElementsByTagName('h1')[0];
h1.innerHTML = '<span>' + h1.innerHTML.split('').join('</span><span>') + '</span>';
</script>
</body>
</html>
      这个方法绝对是一个进步。以上方法中,我们将一行文本(NETTUTS)分拆放到一个数组中,并且将每个字母用span标签括起来。虽然我们可以用如for语句或$.map来筛选这个数组,但是更好更快的方法是手动地同时将文字插入和括起来。虽然相比方法二,这种方法更好,但是仍然不推荐此方法:

在JavaScript被禁用的情况下会破坏你的布局。

理想的情况下,如果可能的话,我们应该使用CSS来完成这个任务。

方法四:给容器指定一个宽度

如果可能的话,还是让我们远离JavaScript吧。如果我们给容器元素指定一个宽度,并强迫文字换行,如何?那是可以的。

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Vertical Text</title>

<style>
h1 {
width: 50px;
font-size: 50px;
word-wrap: break-word;
}
</style>
</head>
<body>
<h1> NETTUTS </h1>
</body>
</html>



在这个方法中,我们给h1定义很窄的宽度,然后是其文字的宽度等于外围的宽度,最后设置word-wrap 等于 break-word,这样我们就可以强制每个字母单独在一行。不过需要注意的是, break-word是一个CSS3的属性,并不是所有浏览器都兼容。如果排除旧浏览器的话,这个问题貌似就可以解决了。。。但并完全是!上面的演示确实可以正常工作,但是玩像素值是很危险的,不信可以看看 将大写字母转换成小写字母的后果(在IE下看看):

所以,使用这种方法,当你给h1指定具体像素宽度的时候,要特别小心。这种方法也不推荐!

方法五:使用 letter-spacing

作为预防措施,并扩展方法四,我们为什么不申请相当大的letter-spacing来解决这个问题?

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Vertical Text</title>

<style>
h1 {
width: 50px;
font-size: 50px;
word-wrap: break-word;
letter-spacing: 20px; /* Set large letter-spacing as precaution */
}
</style>
</head>
<body>
<h1> Nettuts </h1>
</body>
</html>



这似乎解决了这个问题,但是在这里,我们又使用了一些CSS3的属性。
      方法六:使用 ems

另外,还有一个一行内的解决方法。不知道你有没有记得,当给父级元素指定 overflow: hidden 的时候,父元素就会扩展以包含浮动? 这个方法就类似这个,关键是使用了 em,并给每个字母之间添加了空格。

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Vertical Text</title>

<style>
h1 {
width: 1em;
font-size: 40px;
letter-spacing: 40px; /* arbitrarily large letter-spacing for safety */
}
</style>
</head>
<body>
<h1> N e t t u t s </h1>
</body>
</html>



漂亮又整洁,对不对?并且,这种方法可以给你的文字指定任意的font-size,因为我们使用了em,它就相当于选择字体的x-height,给我们提供了更多的灵活性。

但是,你是否又一次想起,有时一行中会有不止一个字母。可实际情况是,你可以安全使用这种方法,因为我已经指定了一个相当大的letter-spacing,以确保一行只会有一个字母。

到目前为止,据我所知,这是最好的跨浏览器兼容的解决方案。

方法七:Whitespace

最后一个方法来达到这种效果是使用 white-space属性。

<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vertical Text</title>
<style>
h1 { white-space: pre; }
</style>
</head>
<body>

<h1>
J
E
F
F
R
E
Y
</h1>
</body>
</html>



通过设置 white-space 的值为 pre,即可控制文字的排版就像在一个 pre 标签中一样。因此,它会严格地显示你添加的空格。
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理