CSS Font知识整理总结

1、什么是字体

  字体是文字的外在形式,就是文字的风格,是文字的外衣。比如行书、楷书、草书,都是一种字体。同样一个字每个人写起来都会有差异,可以说每个人都有一套潜在的字体库。对于web页面来说,字体就是计算机上存储的一套文字显示方式。通过对文字进行一些特殊处理(比如末端加强)来提高不同环境中文字的可读性。

  比如同样大小的文字,在不同字体下的可读性是不同的。

  

  一般来讲,一款字库的诞生,要经过字体设计师的创意设计、字体制作人员一笔一划的制作、修改,技术开发人员对字符进行编码、添加程序指令、装库、开发安装程序,测试人员对字库进行校对、软件测试、兼容性测试,生产部门对字库进行最终产品化和包装上市等几个环节。通常情况下文字跟字体库是一对多的关系,所以对于多语言支持的web页面,要求设计师在选用字体时不能光考虑一种语言的情况。

2、font-family

  关于font-family的介绍大多数只是说明他可以设置文本中的字体名称序列。其实font-family真正的作用是将一系列近似的字体按照优先级顺序组成一个列表,浏览器从第一项开始依次查找,找到第一种可用的字体来显示文字。

font-family: Times New Roman,"open-sans","幼圆",sans-serif

  当浏览器显示一个字符时,会首先从Times New Roman中寻找这个字符,如果找到就用Times New Roman字体来显示这个字符。如果没找到就去open-sans中寻找,如果找到就用该字体显示字符,没找到就会依次寻找下去,如果在通用字体库sans-serif中也没有找到就会用一个缺字符代替(通常是小方框)。

<p style=‘font-family: Times New Roman,"open-sans","幼圆",sans-serif‘>
    <span>时间就是金钱</span><span>Time is money.</span>
</p>

  比如上面这段代码,对于汉字部分浏览器会先去Times New Roman中查找,没有找到,接着再去open-sans中查找,仍然没有找到,继续到“幼圆”中寻找,幼圆中可以找到对应字符则用该字体来显示。对于英文部分可以在Times New Roman中寻找则会用该字体来显示。

  

  font-family中有时候字体加引号有时候不加引号。区别在于对字体名称中空格的处理不同。不加引号时,忽略字体左右两端的空白字符,单词之间的空白字符被解释为一个空白字符。比如font-family:   Times   New   Roman   , sans-serif。被解释为font-family:Times New Roman,sans-serif。加引号时,需要保留引号内的所有空格。比如font-family:"Times    New Roman",sans-serif。浏览器会去寻找“Times   New Roman”这个字体。

3、通用字体族

  w3c建议在定义字体是最后以一个类别结尾,例如sans-serif,来保证不同操作系统下网页都能够正确显示。常见的字体族为serif(衬线字体)、sans-serif(非衬线字体),可以简单理解为在所有字体都是失效的情况下,浏览器从字体族中选择一种字体来显示。

  一种字体族代表了拥有某类特性的多种字体,字体族中字体的选择完全有浏览器决定。设计者给出的字体应该尽可能覆盖所有系统,而不应该依赖字体族。字体族一定要放到font-family的最后一位。

  serif 衬线字体,通常是指使用末端加强原则的字体,通过在文字末端加入细小变化来改变小号文字的可读性。

  

  上述字体都是衬线字体,文字的末端使用了衬线。陈贤字体具有较高的可读性,通常用于以大段文字作为表现形式的作品如报纸、书籍等。常见的衬线字体有Georgia, Garamond, Times New Roman, 中文的宋体等等。

  sans-serif非衬线字体,衬线字体以外的所有字体都成为非衬线字体。非衬线字体的线条比较均匀,通常在艺术字、标题中的使用较多。

  

  由于非衬线字体字条比较均匀,所以在小号文字下的可读性不如衬线字体。常见的非衬线字体有Trebuchet MS, Tahoma, Verdana, Arial, Helvetica, 中文的幼圆、隶书等等。

  综上所述,衬线字体适合小号文字的显示,如果使用非衬线字体要保证font-size足够大,以确保正文内容的可读性。11px下的英文推荐使用衬线字体,对于中文,无论如何都不推荐11px下显示。

4、@font-face

  @font-face是链接服务器上的字体的一种方式,就像制定图片链接一样,浏览器会根据这条指令把对应字体下载到本地缓存,用它去修饰文本。

  

  <identifier>:字体名称

  <url>:此值指的是你自定义的字体的存放路径,可以是相对路径也可以是绝路径

<string>:此值指的是你自定义的字体的格式,主要用来帮助浏览器识别,其值主要有以下几种类型:truetype, opentype,Web Open Font Format, embedded-opentype, svg等

<font>:定义字体相关样式,符合该样式设定的文本会使用该字体显示。

  truetype(.ttf)、opentype(.otf)这两种格式在绝大多数浏览器上都能正常工作。Web Open Font Format(.woff)是Web字体中最佳格式,他是一个开放的TrueType/OpenType的压缩版本,同时也支持元数据包的分离。Embedded Open Type(.eot)为IE的私有字体格式。svg(.svg)字体是基于SVG字体渲染的一种格式。下表中列出了这些格式的浏览器兼容性。

  

@font-face{
        font-family: ‘open-sans‘;
        src: url(‘./open-sans/OpenSans-Regular.eot‘); /* IE9+ */
        src: url(‘./open-sans/OpenSans-Regular.eot?#iefix‘) format(‘embedded-opentype‘), /* IE6-IE8 */
         url(‘./open-sans/OpenSans-Regular.woff‘) format(‘woff‘), /* chrome、firefox */
         url(‘./open-sans/OpenSans-Regular.ttf‘) format(‘truetype‘), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
         url(‘./open-sans/OpenSans-Regular.svg#fontname‘) format(‘svg‘); /* iOS 4.1- */
    }
    @font-face{
        font-family: ‘open-sans‘;
        src: url(‘./open-sans/OpenSans-Bold.eot‘); /* IE9+ */
        src: url(‘./open-sans/OpenSans-Bold.eot?#iefix‘) format(‘embedded-opentype‘), /* IE6-IE8 */
         url(‘./open-sans/OpenSans-Bold.woff‘) format(‘woff‘), /* chrome、firefox */
         url(‘./open-sans/OpenSans-Bold.ttf‘) format(‘truetype‘), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
         url(‘./open-sans/OpenSans-Bold.svg#fontname‘) format(‘svg‘); /* iOS 4.1- */
        font-weight:bold;
    }
<p style=‘font-family: open-sans,sans-serif‘>
    <span>时间就是金钱</span><span>Time is money.</span>
</p>
<p style=‘font-family: open-sans,sans-serif;font-weight:bold;‘>
    <span>时间就是金钱</span><span>Time is money.</span>
</p>

  

  上述代码中两次@font-face命令定义了一个字体族,在普通情况下使用OpenSans-Regular字体,粗体时使用OpenSans-Bold字体。这也印证了我们上文所说,对于字体族中的字体由浏览器根据当前设置自动选择。

  如果要使用@font-face通常需要做一些优化工作,比如有的字体库太大就需要只保留网页中用到的文字,对于中文字体更是如此,这时候字蛛(FontSpider)工具可以来帮助我们;对于进一步优化,可以将字体文件以base64编码方式嵌入到css文件中来减少一次http请求,小米主页就是采用这种方式(这里这里)。

  

  对于字体库的压缩可以使用这款工具

  参考文章:

  优秀网站看前端 —— 小米Note介绍页面

  谈谈网页设计中的字体应用 (1) Font Set

  

时间: 2024-08-18 13:49:56

CSS Font知识整理总结的相关文章

css实战知识整理

Css实战只是汇总 1 Css背景图居中 需求 首页都会有背景大图居中,并且自动撑满整个屏幕,保证图片不拉伸 代码 div{height: 500px; background:url(bg_index_new.jpg) center center;} //必须指定高度,否则看不到背景图,一般高度设为和图片高度一样,这边设置为有重复,当图片小于屏幕宽度时,自动重复,两边都重复 2  padding和margin 设置padding里面的填充颜色还会填充,margin就不会填充,margin算是外面

css基础知识整理

1.css分类样式分为3类:内联.内嵌.外部 (1)内联:写在标签里面,样式为style="   " 举例说明: <div style=" width:100px; height: 110px; background-color: red;"> <p> 我是第一行h </p> 运行样图: style="宽度为100像素,高度为110像素,背景是绿色".给这一个div标签定css样式. (2)内嵌:在<he

前端CSS部分知识整理

1.如何清除图片下方出现几像素的空白间隙? /*方法1:*/ img{display:block;} 方法2: /*img{vertical-align:top;}*/ 2.如何让文本垂直对齐文本输入框? input{vertical-align:middle;} 3.如何让单行文本在容器内垂直居中? #test{height:25px;line-height:25px;} /* 只需设置文本的行高等于容器的高度即可 */ 4.如何让超链接访问后和访问前的颜色不同且访问后仍保留hover和act

DIV+CSS网页布局常用的一些基础知识整理

CSS命名规范一.文件命名规范 全局样式:global.css:框架布局:layout.css:字体样式:font.css:链接样式:link.css:打印样式:print.css: 二.常用类/ID命名规范页 眉:header内 容:content容 器:container页 脚:footer 版 权:copyright 导 航:menu主导航:mainMenu子导航:subMenu 标 志:logo标 语:banner标 题:title侧边栏:sidebar 图 标:Icon注 释:note

前端知识整理-DIV+CSS 之页面布局

终于收到了第一份面试邀请. 时间是下周一. 也是为了验证自己的修炼水平 进行一下知识整理 顺带 查漏补缺 也给后来的同学 提供一些参考 我们用实例来总结: 假设 进行三栏布局 左右300px 中间自适应 我们有几种解决方案呢? 第一种,我们用float 第二种,我们用绝对布局 以上两种过于简单 不解释了 第三种,就是flaxbox了 flexbox就是我心目中的最佳解决方案了,很多坑都是用flex来解决的 代码如下: <head> html *{ display:flax; } .left{

〖前端开发〗HTML/CSS基础知识学习笔记

经过一天的学习,把慕课网的HTML/CSS基础知识学完了,笔记整理: 1. 文件结构: HTML文件的固定结构: <html> <head>...</head> <body>...</body> </html> html是根标签 head定义文档头部,包含: title, script, style, link, meta body是网页主要内容,包含:h1,h2-h6, p, a, img 2. 认识head标签: <head

css基本知识

1.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets),是一种用来表现 HTML 文档样式的语言,样式定义如何显示 HTML 元素,是能够真正做到网页表现与结构分离的一种样式设计语言.样式通常存储在样式表中,外部样式表通常存储在 CSS 文件中,多个样式定义可层叠为一. HTML 标签被设计为用于定义文档内容,也就是文档结构,为了增强代码的可读性,实现网页结构与表现相分离的原则,万维网联盟(W3C),肩负起了 HTML 标准化的使命,并在 HTML4 之外创造出

requirejs入门知识整理

使用模块化开发处理的三大问题: 1.命名冲突:2.繁琐的文件依赖 3.实现异步非阻塞的文件加载,避免网页失去响应 模块化的设计使得JavaScript代码在需要访问“全局变量”的时候,都可以通过依赖关系,把这些“全局变量”作为参数传递到模块的实现体里,在实现中就避免了访问或者声明全局的变量或者函数,有效的避免大量而且复杂的命名空间管理. requirejs以一个相对于baseUrl的地址来加载所有的代码.如果用了data-main属性,则该路径就是baseUrl,baseUrl亦可通过requi

12个你未必知道的CSS小知识

虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过. 1.CSS的color属性并非只能用于文本显示 对于CSS的color属性,相信所有Web开发人员都使用过.如果你并不是一个特别有经验的程序员,我相信你未必知道color属性除了能用在文本显示,还可以用作其它地方. 请注意,上面的代码里只使用了一个color属性,就是在body元素上,设置成了yellow.但是,你也看到了,所有这个页面上的东西都变成了黄色