CSS文字控制技术总结(上篇)

罗里吧嗦的开头

由于连续工作多日,再加上坐姿不妥,导致近日朕龙体微恙,不想上朝。无奈“礼部”爱卿非要朕帮他解决他们单位网站上面文字排版的问题。轻叹一声,心怀天下的我只能“抱着笔记本上马安天下”了。

废话不多说了,直接说正题吧。哥们单位的网站用的是DEDECMS,用什么无可厚非因为这些CMS都很牛,主要差异还是由二次开发者的技术层次决定。真的不是我黑它们,一个简单的DEDECMS配合bootstrap用成这熊样的我也是真心的醉了。现在虽说前端框架满天飞,学习起来也比容易,无外乎简单的复制剪贴以求达到统一的页面效果。但是基础的CSS知识抽空去看一下会死啊?

再吐下槽,用bootstrap就用呗,干嘛还要用这么大的篇幅去写自主的CSS文件,很多bootstrap很好的创意由于层叠样式表的性质全被自主CSS给覆盖了。做无用功做的也是很卖力。如果是自主CSS写的漂亮也就算了……算了。不评价了……还是说说问题出到什么地方了吧:

自主CSS文件引入在bootstrap框架CSS之后,所以自主CSS覆盖bootstrap的CSS样式。破坏了整个版面对于文字方面的优化和美化。而作者自身对文字类CSS控制不熟练导致整体页面失去协调性。

其实这毛病我也有,明明用了前端框架了,还要自己写一大堆自主CSS样式,后来突然发现根本用不着,用原生框架的类效果更好!人呢~都是看别人清楚,看自己模糊啊……

font属性和color属性

想要自己做出的网站比较美观,需要下一番功夫。除了整体颜色和布局的合理搭配之外,由于人的眼球并不是一个十分完美的机器,有的时候还会产生错觉,例如在数学上绝对垂直居中的点,处于不同的容器中的时候在视觉上会有一点偏差。所以我们还要对网站内容文字进行精心的修饰。有句俗话说的好啊:“钱花哪哪好”。我给引申出来了一句“精力放哪哪出活”。除了对框架的学习使用之外,基础CSS的积累也是不可或缺的。

关于CSS中文字控制的常用属性个人总结起来有两大类:第一类是以文字自身为目标,第二类是以文字“环境”为目标。先来说对文字自身的这一类,属于这类的属性也是两大块:字形和颜色。字形用一个属性就可以概括了,就是font。这个简写属性已经可以包括全部关于字形的设置。如下图所示

通过font属性的设置,我们可以以这种简写形式来设置文字倾斜、加粗、字号、行高、字体。当然了也可以通过分别设置这些属性来单独改变文字某个属性的样式。再然后我们可以通过color属性来设置的文字的颜色,例如color:#333;。以上这些就是对文字自身为目标的常用属性设置。

text/vertical的align

之后比较复杂的就是以文字“环境”为目标的属性。这一类包含的属性比较多,不过没关系我们一点一点来。最简单的就是对文字水平位置的进行控制的text-align,在包裹文字的元素上设置这个属性可以让文字处于水平上不同的位置。例如text-align:center;就是让文字水平居中。这个地方需要提一下的是text-align:justify;这个声明。它的含义是两端对齐的意思。在两端对齐文本中,文本行的左右两端都放在父元素的内边界上。然后,调整文字间的间隔,使各行的长度恰好相等,两端对齐文本在打印领域很常见。
[图片上传失败...(image-d36dd9-1524316282318)]

上图可以明显看出来text-align:justify;对文本的影响。既然在水平方向上可以控制文本之外还能在垂直方向控制文字。当然这个垂直控制是指在单行的文本中——也就是说行内元素的基线相对于该元素所在行的基线的垂直对齐的意思。

The vertical-align CSS property specifies the vertical alignment of an inline or table-cell box.

翻译:vertical-align属性指定内联或表单元格框的垂直对齐方式。

这句话需要注意的地方是<u style="box-sizing: border-box; margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background: transparent;">该属性适用的是display:inline/inline-block;的行内元素和display:table-cell;表单元素。</u>如果是块级元素的话,就不要考虑使用vertical-align。关于块级元素和行内元素的区别,出门右转查看文章《行内元素和块级元素的那些事儿》。如果是是想要对容器中的文本区域在垂直方向进行控制,这还需要一点其他的技巧,所谓的技巧不在这里详细说明了。

我们继续来说vertical-align这个能在垂直方向控制文字的属性。不过这个属性的值比较多,它的值有几种类型——关键字,数值,百分比。列一个表格就知道了。

vertical-align属性值

描述
baseline 默认。元素放置在父元素的基线上。
sub 垂直对齐文本的下标。
super 垂直对齐文本的上标
top 把元素的顶端与行中最高元素的顶端对齐
text-top 把元素的顶端与父元素字体的顶端对齐
middle 把此元素放置在父元素的中部。
bottom 把元素的底端与行中最低的元素的底端对齐。
text-bottom 把元素的底端与父元素字体的底端对齐。
length 如:2em、10px。允许使用负值。
% 使用 “line-height” 属性的百分比值来排列此元素。允许使用负值。
inherit 规定应该从父元素继承 vertical-align 属性的值。

挺多的是吧?看似很多的知识一般来说都有一条主线存在,主要抓住了主线,所谓的难点重点重构到自己的知识体系中只不过是时间问题。(有点像小学语文课老师讲阅读理解的情况。)这些值的理解重点只有一个就是“基线(Baseline)”,只要能理解掌握了“基线”那么vertical-align就像是一盘“小咸菜”一样轻松掌控。

先来说说什么是基线。基线称领海基线,是陆地和内水同领海的分界线,是划定领海、毗连区、专属经济区和大陆架宽度的起算线。好像有什么不对!?啊哈,复制错了,应该是字体排印学中,基线(英语:Baseline)指的是多数字母排列的基准线。上个图直接就明白基线的含义了。

baseline

图中灰色的区域可以暂时理解为行内框,图片区域可以暂时理解为行框。vertical-align:baseline;的含义就是指,行内框的基线和行框的基线对齐。这个就是vertical-align垂直操作文本的原理,具体每个参数对文本的影响我会专门再写一篇文章来说明。关于vertical-align属性就暂时告一段落。还要介绍其他属性。

word-wrap\break

这个没什么需要特别说明的了,可以查看博客文章《容易混淆的word-wrap和word-break》里面有更详细的说明。

letter\word-spacing

letter-spacingword-spacing这俩哥们有时候也是挺让人头晕的,不知道谁是谁。关于这个我不想打太多字来说明只是举个例子。通过例子直接就能看出来两者的区别了。

点击查看letter-spacing和word-spacing区别的DEMO

letter-spacing是控制字符间距,同时可以对中文有效。该属性定义了在文本字符框之间插入多少空间。由于字符字形通常比其字符框要窄,指定长度值时,会调整字母之间通常的间隔。因此,normal就相当于值为 0。

word-spacing控制英文单词间距,对中文无效。该属性定义元素中字之间插入多少空白符。针对这个属性,“字” 定义为由空白符包围的一个字符串。如果指定为长度值,会调整字之间的通常间隔;所以,normal就等同于设置为 0。允许指定负长度值,这会让字之间挤得更紧。

对这两个属性的设置可以直接影响到文字内容整体的感觉,所以设置的时候一定要慎重,多试验几次要相信眼睛看到的结果,而不是数学计算的计算的结果。毕竟文字区域的是靠人眼来感测接受信息的。

white-space

该属性的作用是属性是用来设置如何处理元素中的空白。任何元素都可以设置white-space属性。

white-space: normal | pre | nowrap | pre-wrap | pre-line

这些值分别代表的是什么含义呢?看下边的表格解释,能帮助理解:

white-space属性值

描述
normal 连续的空白符会被合并,换行符会被当作空白符来处理。填充line盒子时,必要的话会换行。
nowrap 和 normal 一样,连续的空白符会被合并。但文本内的换行无效。
pre 连续的空白符会被保留。在遇到换行符或者<br>元素时才会换行。
pre-wrap 连续的空白符会被保留。在遇到换行符或者<br>元素,或者需要为了填充line盒子时才会换行。
pre-line 连续的空白符会被合并。在遇到换行符或者<br>元素,或者需要为了填充line盒子时会换行。

这个表已经把white-space属性介绍的差不多了,关于如何运用这个属性。我记得我以前写过一篇文章中介绍截断处理技巧的时候提到过这个属性,想看的可以>>>>>>>猛击这里《标题字数超出范围截断处理方案比较》

text-indent

这个属性规定了一个元素首行文本内容之前应该有多少水平空格。我们的书写习惯都是在一段文字的第一行空两格,这样的话可以在CSS样式中直接重置<p>的样式。p{text-indent:2em;}。要看例子么?本博客的文章中每段的空两格就是这样来控制的,看我的源码就可以了,不用再举例子了吧。

使用的时候要考虑的浏览器的兼容问题,早期版本的浏览器对这个属性兼容性有限需要配合css hacker。而且本属性可以直接设置数值;还可以设置百分比数值,这里面的百分比是相对文本父元素的宽度而计算的。而且还能设置负值。

伪元素

其实我一直考虑要不要提一下伪元素中对文本的控制。其实伪元素的数量很少大概有四个,都可以为文本添加格外样式。关于伪类和伪元素之间的区别可以看我的文章——《伪类与伪元素,傻傻分不清楚》。里面有对伪类和伪元素比较详细的介绍。

最后的最后

不舒服~~写着写着都没劲儿了。关于文本控制类的CSS属性大概就是这么多了,文本控制的好了就能让整个网站锦上添花,就算出现大段的文本区域也会让人感到很协调很友好,而不是一看就丧失继续阅读下去的勇气。在文本控制中最重要的一点是要相信眼睛观测的结果而不是数学计算的结果,这个结论或者说技巧吧就是来自人的视觉误差。

例如文字的形状在两端看起来比较整齐,而顶部和底部往往参差不齐,导致人眼观测的结果会把这些参差不齐的空缺部分感知为多出来的内边距padding,所以这个时候为了文字的观测协调性我们需要减少顶部和底部的内边距。这也就是为什么在给文字区域设置内边距的时候要用padding:5px 10px;而不是使用padding:10px;的原因。

关于视距误差在前端中的影响很大,不过不用担心的是目前大多数的前端框架都很完美的解决此类问题。所以我们在使用框架技术的时候一定要尽可能多的用框架原生样式而非自主样式。但是CSS基础一定要牢靠,知其然还要知其所以然才是让自己面对诸多未知情况的时候游刃有余。掌握和掌控可不是一个境界,观察和洞察也不是一个境界,思量和忖度更不是一个境界。境界的差异一旦拉开根本就不需要再去比较等级了。


报告完毕!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 3,828评论 0 0
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,727评论 1 92
  • 1.块级元素和行内元素 块级(block-level)元素;行内(内联、inline-level)元素。 块元素的...
    饥人谷_小侯阅读 1,985评论 1 4
  • 你是否也有这样的烦恼:拿到一本书,规规矩矩从头看到尾,却还是不知道自己收获了什么。只好骗自己,这就像张无忌学太极,...
    拂景阅读 282评论 0 3
  • 秒针滴滴答答跨过12点整点的那一刻,我正躺在床上看手机,头发既没有多掉一根,皱纹也没有多长一条。周围一片寂静,什么...
    GM一阅读 146评论 0 0