网页文字竖排的几种实现方式

古时候的书籍里面文字的书写方式都是从上到下从右向左书写的,我们可不可以在网页上实现这种文字排版效果,虽然现在竖排在网页上用的比较的少,但是我们可以在我们自己的个人网站或者博客介绍页面用竖排来排版,使网页样式看起来更加的丰富和复古!

通过一些尝试我找到了如下3中方式在网页上竖排文字的方法,各有各的缺点和优点,下面我们就来看看具体的方法和实现效果吧!

方式1、css属性float实现文字竖排#

实现原理:把一短话的每一句放在一个div中,设置div的宽度和要显示的字体的大小一样(div的高度=字数×字体大小),div就变成了一个竖条每一行就只能显示一个文字,第二个文字就会被挤到下一行,然后把div的float设置为right向右浮动排列。就达到了一首诗的竖排显示。

代码实现:

<style>
* {
    font-family: Georgia;
}

#content {
    position: absolute;
    width: 1200px;
    height: 400px;
    left: 50%;
    top: 50%;
    margin-top: -300px;
    margin-left: -600px;
    border: 1px dashed #2f96b4;
    padding-top: 50px;
    border-radius: 20px;
}

#contentRemark {
    position: absolute;
    width: 1200px;
    height: 300px;
    left: 50%;
    top: 56%;
    margin-left: -600px;
    padding-top: 50px;
    text-indent: 2em;
    font-size: 20px;
    line-height: 2em;
}

.PoetryName {
    font-size: xx-large;
    font-weight: bold;
    line-height: 1.5em;
    width: 1.5em;
    float: right;
    font-size: 36px;
    padding-top: 40px;
    padding-right: 20px;
}

.PoetryPerson {
    width: 1.5em;
    float: right;
    line-height: 2em;
    padding-top: 70px;
    font-size: 18px;
    color: #d3524e;
}

.PoetryContent {
    width: 1.5em;
    float: right;
    line-height: 1.5em;
    padding-top: 30px;
    font-size: 20px;
}

.PoetryContent:hover {
    width: 1.5em;
    float: right;
    line-height: 1.5em;
    padding-top: 30px;
    font-size: 20px;
    cursor: pointer;
    color: #d3524e;
}
</style>
<div id="content">
    <div class="PoetryName">爱莲说</div>
    <div style="width:1.5em; float:right;"> </div>
    <div class="PoetryPerson">周 敦 颐 </div>
    <div style="width:1.5em; float:right;"> </div>
    <div class="PoetryContent">水陆草木之花 </div>
    <div class="PoetryContent">可爱者甚蕃 </div>
    <div class="PoetryContent">晋陶渊明独爱菊 </div>
    <div class="PoetryContent">自李唐来 </div>
    <div class="PoetryContent">世人甚爱牡丹 </div>
    <div class="PoetryContent">予独爱莲之出淤泥而不染 </div>
    <div class="PoetryContent">濯清涟而不妖 </div>
    <div class="PoetryContent">中通外直 </div>
    <div class="PoetryContent">不蔓不枝 </div>
    <div class="PoetryContent">香远益清 </div>
    <div class="PoetryContent"> 亭亭净植 </div>
    <div class="PoetryContent"> 可远观而不可亵玩焉 </div>
    <div class="PoetryContent">予谓菊花之隐逸者也 </div>
    <div class="PoetryContent">牡丹花之富贵者也 </div>
    <div class="PoetryContent">莲花之君子者也 </div>
    <div class="PoetryContent">噫菊之爱 </div>
    <div class="PoetryContent">陶后鲜有闻 </div>
    <div class="PoetryContent"> 莲之爱 </div>
    <div class="PoetryContent"> 同予者何人 </div>
    <div class="PoetryContent"> 牡丹之爱 </div>
    <div class="PoetryContent"> 宜乎众矣 </div>
    <div style="margin-left:40px;margin-top:-20px;">![](http://upload-images.jianshu.io/upload_images/2054-980f1bc940e1b9b9.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</div>
</div>

通过float的方式实现文字竖排的demo

这种方式的优缺点:
优点:网页文档的书写和我们平时正常书写网页时候一样,可以为每一行设置不同的显示样式。
缺点:如果一行文字比较长,没有办法换行~

方式2、css属性transform:rotate实现文字竖排#

实现原理:把一段话的每一个字放在一个span标签中(文字比较多可以通过js生成span),然后把这些span标签放在一个大的div容器中,将容器div顺时针旋转90度,然后将容器中的span逆时针旋转90度,经过两次旋转之后就达到了竖排文字的需求。

代码实现:

<style>
.container {
    position: absolute;
    right: 300px;
    margin-top: -200px;
    width: 440px;
    height: 1000px;
    background-color: #FFFFFF;
    padding-left: 36px;
    font-family: "楷体";
    border: 1px solid #999999;
    margin-left: 100px;
    overflow-y: scroll;
    overflow-x: hidden;
    -webkit-transform: rotate(90deg);
}

/**每一行的容器(竖列)**/

.container .items {
    width: 445px;
    height: 34px;
    /*background-color: #EEEEEE;*/
    /*border-left: 1px solid #999999;*/
}

.container .items .item {
    display: inline-block;
    width: 20px;
    height: 20px;
    font-size: 20px;
    text-align: center;
    line-height: 20px;
    /*border-bottom: 1px solid #CCCCCC;*/
}

.container .items .item:hover {
    background-color: pink;
    cursor: pointer;
    font-size: 22px;
}

.action1 {
    width: 100px !important;
    padding-left: 20px;
}

.rotate {
    -webkit-transform: rotate(-90deg);
}

.style1 {
    background-color: #ff6699;
    color: #EEEEEE;
}

.style2 {
    background-color: #4c98ce;
    color: #EEEEEE;
}

#vertical div {
    width: 1.5em;
    float: right;
}

#vertical .title {
    font-size: xx-large;
    font-weight: bold;
    line-height: 1em;
}
</style>
<div class="container">
    <p> </p>
    <div class="items">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item rotate" style="font-size:36px;font-weight:bold;">爱</div>
    <div class="item"></div>
    <div class="item rotate" style="font-size:36px;font-weight:bold;">莲</div>
    <div class="item"></div>
    <div class="item rotate" style="font-size:36px;font-weight:bold;">说</div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <p> </p>
    </div>
    <p class=‘action1‘></p>
</div>
<!--引入jquery依赖-->
<script src="jquery.min.js"></script>
<script>
var arr = "水陆草木之花,可爱者甚蕃。晋陶渊明独爱菊。自李唐来,世人甚爱牡丹。予独爱莲之出淤泥而不染,濯清涟而不妖,中通外直,不蔓不枝,香远益清,亭亭净植,可远观而不可亵玩焉。予谓菊,花之隐逸者也;牡丹,花之富贵者也;莲,花之君子者也。噫!菊之爱,陶后鲜有闻。莲之爱,同予者何人?牡丹之爱,宜乎众矣!".split("");

var cHeight = $(".items").height();

var textHeight = $(".item").height();

var vCount = parseInt(cHeight / textHeight); //每列显示的字数

var textArr = [];
for (var i = 0; i < arr.length; i++) {
    if (i % 20 == 0) {
    textArr.push({
        "hanzi": arr[i]
    });
    } else {
    textArr[textArr.length - 1].hanzi += arr[i];
    }
}

var html = "";
for (var j = 0; j < textArr.length; j++) {
    html += "<div class=‘items‘>";
    var tempArr = textArr[j].hanzi.split("");
    console.log(tempArr)
    for (var k = 0; k < tempArr.length; k++) {
    if (/[<>《》!*(^)$%[email protected]#$…&%¥—+=、。,;‘’“”:·`]/.test(tempArr[k])) {
        html += "<div class=‘item‘ style=‘display:inline‘>" + tempArr[k] + "</div>";
    } else {
        html += "<div class=‘item rotate‘>" + tempArr[k] + "</div>";
    }
    }
    html += "</div>";
}

$(".action1").after(html);
</script>

通过transform:rotate方式实现文字竖排的demo

这种方式的优缺点:
优点:一大段文字也可以实现自动换行。 缺点:在具体位置实现换行控制比较麻烦,而且每个字写都要用一个span标签来包住。

方式3、CSS属性write-mode实现文字竖排#

writing-mode直译过来就是书写模式,它是为了控制文本布局而产生的,换句话说它就是用来实现文字竖排的,只不过文字竖排我们平时用的少,所以这个css属性也不常见,发现这个属性之前我还是在用一些其它方式(前两中方法)实现文字的竖排。

writing-mode的属性比较多,详细请看MDN,文字竖排使用到的属性是writing-mode:vertical-rl从右向左竖排,writing-mode:vertical-lr从左向右竖排

代码实现

<style>
#content1 {
    width: 900px;
    height: 200px;
    -webkit-writing-mode: vertical-rl;
    writing-mode: vertical-rl;
    padding-top: 40px;
    font-size: 16px;
}

#content2 {
    width: 900px;
    height: 200px;
    -webkit-writing-mode: vertical-lr;
    writing-mode: vertical-lr;
    padding-top: 40px;
    font-size: 16px;
}
</style>
<div id="content1">
    <p style="letter-spacing:1em;font-size:20px;">水调歌头 </p>
    <p style="letter-spacing:.3em;font-size:18px;">苏 轼</p>
    <p>明月几时有</p>
    <p>把酒问青天</p>
    <p>不知天上宫阙</p>
    <p>今夕是何年</p>
    <p>我欲乘风归去</p>
    <p>惟恐琼楼玉宇</p>
    <p>高处不胜寒</p>
    <p>起舞弄清影</p>
    <p>何似在人间</p>
    <p> 转朱阁</p>
    <p>低绮户</p>
    <p>照无眠</p>
    <p>不应有恨</p>
    <p>何事长向别时圆</p>
    <p>人有悲欢离合</p>
    <p>月有阴晴圆缺</p>
    <p>此事古难全</p>
    <p>但愿人长久</p>
    <p>千里共蝉娟</p>
</div>
<hr>
<div id="content2">
    <p style="letter-spacing:1em;font-size:20px;">水调歌头 </p>
    <p style="letter-spacing:.3em;font-size:18px;">苏 轼</p>
    <p>明月几时有</p>
    <p>把酒问青天</p>
    <p>不知天上宫阙</p>
    <p>今夕是何年</p>
    <p>我欲乘风归去</p>
    <p>惟恐琼楼玉宇</p>
    <p>高处不胜寒</p>
    <p>起舞弄清影</p>
    <p>何似在人间</p>
    <p> 转朱阁</p>
    <p>低绮户</p>
    <p>照无眠</p>
    <p>不应有恨</p>
    <p>何事长向别时圆</p>
    <p>人有悲欢离合</p>
    <p>月有阴晴圆缺</p>
    <p>此事古难全</p>
    <p>但愿人长久</p>
    <p>千里共蝉娟</p>
</div>

通过write-mode方式实现文字竖排的demo

这种方式的优缺点:
优点:实现文字竖排的方式比较的方便和优雅 缺点:语法比较多,而且有两套不同的规范(IE和css3)!

注意事项:write-mode会改变一些原有的规则,如我们队上面的content1中的p设置行高,那么行高会变成左右行距离而不是上下行距。

本文如有误,请不吝赐教!

原文标题:网页文字竖排的几种实现方式

原文链接:http://www.mengxiangjia.info/2017/04/05/text-landscape/

版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

时间: 2024-08-02 11:01:32

网页文字竖排的几种实现方式的相关文章

【iOS开发-28】制造UITabBarController标签控制器的过程以及定制UITabBarItem文字图片的6种方式

一.一个简单的创造过程(实际项目不推荐这种方式,仅做演示理解原理用) 在AppDelegate.m中: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //创建一个到导航控制器 UIViewController *vc1=[[UIViewController alloc]init]; UINavigationControll

asp.net C# 获取网页源码的几种方式

1 方法 System.Net.WebClient aWebClient = new System.Net.WebClient(); aWebClient.Encoding = System.Text.Encoding.Default; Byte[] pageData = aWebClient.DownloadData(url); string nhtml = Encoding.GetEncoding("utf-8").GetString(pageData); 2方法 System.N

Android自定义控件:进度条的四种实现方式

前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源码在最后) 最近一直在学习自定义控件,搜了许多大牛们Blog里分享的小教程,也上GitHub找了一些类似的控件进行学习.发现读起来都不太好懂,就想写这么一篇东西作为学习笔记吧. 一.控件介绍: 进度条在App中非常常见,例如下载进度.加载图片.打开文章.打开网页等等--都需要这么一个效果让用户知道我们的App正在读取,以构造良好的

Android自己定义控件:进度条的四种实现方式

前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://download.csdn.net/detail/chaoyu168/9616035 近期一直在学习自己定义控件,搜了很多大牛们Blog里分享的小教程.也上GitHub找了一些类似的控件进行学习.发现读起来都不太好懂,就想写这么一篇东西作为学习笔记吧. 一.控件介绍: 进度条在App中非经常见,比例如以下载

php网站常见的几种攻击方式(转)

针对 PHP 的网站主要存在下面几种攻击方式::1.命令注入(Command Injection)2.eval 注入(Eval Injection)3.客户端脚本攻击(Script Insertion)4.跨网站脚本攻击(Cross Site Scripting, XSS)5.SQL 注入攻击(SQL injection)6.跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)7.Session 会话劫持(Session Hijacking)8.Sessio

Android自定义控件:进度条的四种实现方式(Progress Wheel的解析)(源码 + Demo)

Progress Wheel为GitHub热门项目,作者是:Todd-Davies,项目地址: https://github.com/Todd-Davies/ProgressWheel 前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源码在最后) 最近一直在学习自定义控件,搜了许多大牛们Blog里分享的小教程,也上GitHub找了一些类似的控件进行学习.发现读起来都不太好懂,就想

网站制作之网页文字排版技巧

一套巧妙的网站布局设计,一些漂亮的颜色搭配,或者一个合适的网页文字排版,都在给每一位浏览网页的人留下一份美好的印象和舒适的感官享受,在商业化气息越来越浓重的今天,提高一个网站的个性及审美体验也不失为一种网站建设及推广的方法. 很多中小企业在网站建设初期,不太注重网站的运营及打理,网站发布的文章或者内容未进行合理的布局及排版,造成文字大小不合适,颜色不搭配,行高过大过小等等直接影响浏览体验的问题,针对这些问题,巩义网站建设公司提出以下一些建议: 一.文字的字体及大小        经常上网的朋友,

python全栈开发day37-css三种引入方式、基础选择器、高级选择器、补充选择器

一.昨日内容回顾 div:分割整个网站,很多块 (1)排版标签 (2)块级标签 独占一行 可以设置高和宽,如果不设置宽高,默认是父盒子的宽 span: (1) 小区域 (2)文本标签 (3)在一行内显示,不能放置容器类(块)的盒子 (4)宽高不能设置 (5)宽高跟span的内容相关 a: (1)文本级标签 (2)不能设置高和宽 (3)超链接href:连接资源 title 鼠标的悬浮时的标题 跳转顶部top: <div id= 'top'> <div> ....... <a h

详解瀑布流布局的5种实现方式及object-fit

最近项目中需要处理与图片相关的布局,不得不说图片这玩意真想要得到完美的展示效果还真是要费些力气.因为图片的尺寸或者比例各不相同.所以想要不同尺寸的图片有好的显示效果,你就需要找到适合的方式. 而且图片往往是不可或缺元素.毕竟一图胜千言,有时候图片能给带来非常好的效果. 比如我们每天都会使用的表情包,它往往能够表达出我们无法用文字描述的信息,还比如我们经常在公众号里看到的漫画虽然短短几个字,但是却能够让我们看的不亦乐乎. 当然如果我们做图片网站的,那图片的处理就是绕不开的话题了.因对图片的处理经验