盒子模型

页面布局要学习三大核心,盒子模型、浮动和定位

看透网页布局的本质

网页布局的过程:

  1. 先准备好相关的网页元素,网页元素基本都是盒子 Box
  2. 利用 CSS 设置好盒子样式,然后摆放到相应位置
  3. 往盒子里面装内容

利用 CSS 摆盒子

盒子模型组成

盒子模型就是把 HTML 页面中的布局元素看作是一个矩形的盒子(容器)
CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、外边距、内边距和实际内容

边框

border可以设置元素的边框,边框有三部分组成:边框宽度、边框样式、边框颜色

语法格式如下:

1
2
3
4
5
border: border-width | border-style | border-color;

border: 1px solid pink; /* 没有顺序 */

border-top: 1px solid pink; /* 只设定上边框,其余同理 */
属性作用
border-width定义边框粗细,单位是 px
border-style边框的样式
border-color边框颜色

边框样式border-style可以设置如下值:

  • solid:实线
  • dotted:点线
  • dashed:虚线
  • none:没有边框

表格的细线边框

border-collapse属性控制浏览器绘制表格边框的方式,它控制相邻单元格的边框

语法格式如下:

1
border-collapse: collapse; /* 表示相邻边框合并在一起 */

边框会影响盒子实际大小

边框会额外增加盒子的实际大小,因此我们有两种方案解决:

  1. 测量盒子大小的时候,不量边框
  2. 如果测量的时候包含了边框,则需要 width/height 减去边框的宽度

内边距

padding属性用于设置内边距,即边框与内容之间的距离

语法格式如下:

1
2
3
4
5
6
7
8
9
padding: 1px; /* 代表上下左右都有1px内边距 */

padding: 1px 2px; /* 代表上下内边距是1px,左右内边距是2px */

padding: 1px 2px 3px; /* 代表上内边距1px,左右内边距2px,下内边距3px */

padding: 1px 2px 3px 4px; /* 顺序为:上 右 下 左,即顺时针*/

padding-top: 5px; /* 只设定上内边距,其余同理 */

如果盒子已经有了宽度和高度,此时再指定内边距,会撑大盒子,反之则不会

综合案例-新浪导航栏

外边距

margin属性用于设置外边距,即控制盒子和盒子之间的距离

margin 简写方式代表的意义跟 padding 完全一致

外边距可以让块级盒子水平居中,但是必须满足两个条件:

  1. 盒子必须指定了宽度
  2. 盒子左右的边距都设置为auto

常见的写法,以下三种都可以:

  • margin-left: auto; margin-right: auto;
  • margin: auto;
  • margin: 0 auto;

**注意:**以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中,可给其父级元素添加text-align: center;

外边距合并

使用margin定义块元素的垂直外边距时,可能会出现外边距的合并

1. 相邻块元素垂直外边距的合并
当上下相邻的两个块元素相遇时,如果上面的元素有下外边距margin-bottom,下面的元素有上外边距margin-top,则他们之间的垂直间距不是`两者之和,而是取两个值中的较大值,这种现象被称为相邻块元素垂直外边距的合并。

**解决方案:**尽量只给一个盒子添加margin

2. 嵌套块元素垂直外边距的塌陷
对于两个嵌套关系(父子关系)的块元素,父元素有上外边距,且子元素也有上外边距,此时父元素会塌陷较大的外边距值

解决方案:

  1. 可以为父元素定义上边框
  2. 可以为父元素定义上内边距
  3. 可以为父元素添加overflow: hidden

还有其他方法:比如浮动、固定、绝对定位的盒子不会有塌陷问题,后面咱们再总结

清除内外边距

网页元素大多带有默认的内外边距,而且不同浏览器默认的也不一致,因此我们在布局之前,首先要清除下网页元素的内外边距

1
2
3
4
* {
padding: 0;
margin: 0;
}

**注意:**行内元素为了照顾兼容性,尽量值设置左右内外边距

综合案例

案例一:产品模块

案例二:快报模块

圆角边框

border-radius属性用于设置元素的外边框圆角

语法:

1
border-radius: length;

radius 半径原理:(椭)圆与边框的交集形成圆角效果

  • 参数值可以为数值或百分比的形式
  • 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写 50%
  • 该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角
  • 分开写:border-top-left-radius、border-top-right-radius、border-bottom-left-radius、border-bottom-right-radius
  • 兼容性 ie9+ 浏览器支持,但不影响页面布局,可以放心使用

盒子阴影

box-shadow属性为盒子添加阴影

语法:

1
box-shadow: h-shadow v-shadow blur spread color inset;
描述
h-shadow必须,水平阴影的位置,允许负值
v-shadow必须,垂直阴影的位置,允许负值
blur可选,模糊距离
spread可选,阴影的尺寸
color可选,阴影的颜色
inset可选,将外部阴影(outset)改为内部阴影

注意:

  1. 默认的是外阴影(outset),但是不可以写这个单词,否则会造成阴影无效
  2. 盒子阴影不占用空间,不会影响其他盒子排列

文字阴影

text-shadow属性将阴影应用于文本

语法:

1
text-shadow: h-shadow v-shadow blur color;
描述
h-shadow必须,水平阴影的位置,允许负值
v-shadow必须,垂直阴影的位置,允许负值
blur可选,模糊距离
color可选,阴影的颜色

浮动

CSS 提供了三种传统布局方式:

  • 标准流(普通流)
  • 浮动
  • 定位

标准流(普通流、文档流)

所谓的标准流就是标签按照规定好默认方式排列

  1. 块级元素会独占一行,从上向下顺序排列:div、hr、p、h1~h6、ul、ol、dl、form、table 等
  2. 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行:span、a、i、em 等

以上都是标准流布局,我们前面学习的就是标准流,标准流是最基本的布局方式

为什么需要浮动 ?

有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局,因为浮动可以改变元素标签默认的排列方式。浮动最典型的应用:可以让多个块级元素一行排列显示。

多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动

什么是浮动 ?

float属性用于创建浮动框,将其移动到一遍,直到左边缘或右边缘触及包含块或另一个浮动框的边缘

语法:

1
2
3
选择器 {
float: 属性值;
}
属性值描述
none元素不浮动(默认值)
left元素向左浮动
right元素向右浮动

浮动特性

加了浮动之后的元素,会具有很多特性,需要我们掌握的

  1. 浮动元素会脱离标准流(脱标)
  2. 浮动的元素会一行内显示并且元素顶部对齐
  3. 浮动的元素会具有行内块元素的特性

设置了浮动的元素最重要特性:

1.脱离标准流的控制移动到指定位置(脱标:浮动的盒子不再保留原先的位置)

2.如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列

**注意:**浮动的元素是互相贴靠在一起的,不会有缝隙,如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐。

3.浮动元素会具有行内块元素特性

任何元素都可以浮动,不管原先是什么模式的元素,添加浮动之后具有行内块元素相似的特性

  • 如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定
  • 浮动的盒子中间是没有缝隙的,是紧挨着一起的
  • 行内元素同理

浮动元素经常和标准流父级搭配使用

为了约束浮动元素位置,我们网页布局一般采取的策略是:
先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置,复合网页布局第一准则

综合案例-小米布局

常见网页布局

浮动布局注意点

1.浮动和标准流的父盒子搭配
先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置

2.一个元素浮动了,理论上其余的兄弟元素也要浮动
一个盒子里面有多个子盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动,以防止引起问题(浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流)

清除浮动

为什么要清除浮动 ?

由于父级盒子很多情况下,不方便给高度,但是盒子浮动又不占有位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子

由于浮动元素不再占有原文档流的位置,所以它会对后面的元素排版产生影响

清除浮动本质

  • 清除浮动的本质是清除浮动元素造成的影响
  • 如果父盒子本身有高度,则不需要清除浮动
  • 清除浮动后,父级会根据浮动的子盒子自动检测高度,父级有了高度,就不会影响下面的标准流了

清除浮动

语法:

1
2
3
选择器 {
clear: 属性值;
}
属性值描述
left清除左侧浮动的影响
right清除右侧浮动的影响
both同时清除左右两侧浮动的影响

实际工作中,几乎只用clear: both

清除浮动的方法

  1. 额外标签法,也称为隔墙法,是 W3C 推荐的做法
  2. 父级添加overflow属性
  3. 父级添加after伪元素
  4. 父级添加双伪元素

额外标签法

额外标签法会在浮动元素末尾添加一个空的标签,例如 <div style="clear: both"></div>,或者<br>

  • 优点:通俗易懂,书写方便
  • 缺点:添加许多无意义的标签,结构化较差

**注意:**要求这个新的空标签必须是块级元素

父级添加overflow

可以给父级添加overflow属性,将其属性设置为hiddenautoscroll

  • 优点:代码简介
  • 缺点:无法显示溢出的部分

:after 伪元素法

:after方式是额外标签法的升级版,也是给父元素添加

1
2
3
4
5
6
7
8
9
10
.clearfix:after {
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix {
*zoom: 1; /* IE6、7专有*/
}
  • 优点:没有增加标签,结构简单
  • 缺点:照顾低版本浏览器
  • 代表网站:百度、淘宝网、网易等

双伪元素清除浮动

也是给父元素添加

1
2
3
4
5
6
7
8
9
10
11
.clearfix:before,
.clearfix:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
*zoom: 1;
}
  • 优点:代码更简洁
  • 缺点:照顾低版本浏览器
  • 代表网站:小米、腾讯等

小结

为什么要清除浮动 ?

  1. 父级没高度
  2. 子盒子浮动了
  3. 影响下面布局了,我们就应该清除浮动了
清除浮动的方式优点缺点
额外标签法(隔墙法)通俗易懂添加许多无意义的标签,结构化较差
父级overflow: hidden;书写简单溢出隐藏
父级after伪元素结构语义化正确由于 IE6-7 不支持:after,兼容性问题
父级双伪元素结构语义化正确由于 IE6-7 不支持:after,兼容性问题

学成在线案例

页面布局整体思路

为了提高网页制作的效率,布局时通常有以下的整体思路:

  1. 必须确定页面的版心(可视区),可以测量得到
  2. 分析页面中的行模块,以及每个行模块中的列模块,页面布局的第一准则
  3. 一行中的列模块经常浮动布局,先确定每个列的大小,之后确定列的位置,页面布局第二准则
  4. 制作 HTML 结构,我们还是遵循先有结构,后有样式的原则,结构永远最重要
  5. 所以,布局前先理清楚布局结构再写代码尤为重要,初次布局可能会愣住不知道从何下手,这需要我们多写多积累

CSS 属性书写顺序

规范书写标准,顺序,后期检查和改动更方便

建议遵循以下顺序:

  1. 布局定位属性:display / position / float / clear / visibility / overflow
  2. 自身属性:width / height / margin / padding / border / background
  3. 文本属性:color / font / text-decoration / text-align / vertical-align / white-space / break-word
  4. 其他属性(CSS3):content / cursor / border-radius / box-shadow / text-shadow / background: linear-gradient

定位

  1. 浮动可以让多个块级盒子一行没有缝隙排列显示,经常用于横向排列盒子
  2. 定位则是可以让盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置,并且可以压住其他盒子

定位 = 定位模式 + 边偏移

定位模式

定位模式决定元素的定位方式,它通过 CSS 的position属性来设置,其值可以分为四个:

语义
static静态定位
relative相对定位
absolute绝对定位
fixed固定定位

边偏移

边偏移就是定位的盒子移动到最终位置,有topbottomleftright四个属性

边偏移属性示例描述
toptop: 80px;顶部偏移量,定义元素相对于其父元素上边线的距离
bottombottom: 80px;底部偏移量,定义元素相对于其父元素下边线的距离
leftleft: 80px;左侧偏移量,定义元素相对于其父元素左边线的距离
rightright: 80px;右侧偏移量,定义元素相对于其父元素右边线的距离

静态定位

静态定位是元素的默认定位方式,无定位的意思

  • 静态定位按照标准流特性摆放位置,它没有边偏移
  • 静态定位在布局时很少用到

相对定位

相对定位是元素在移动位置的时候,是相对于它原来的位置来说的(自恋型)

相对定位的特点:

  1. 移动位置的时候参照点是自己原来的位置
  2. 原来在标准流的位置继续占有,后面的盒子任然以标准流的方式对待它

因此,相对定位并没有脱标,它最典型的应用就是给绝对定位当爹的~

绝对定位

绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的(拼爹型)

绝对定位的特点:

  1. 如果没有祖先元素或者祖先元素没有定位,则以浏览器为基准
  2. 如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素作为参考点
  3. 绝对定位不再占有原先的位置(脱标)

子绝父相的由来

顾名思义,子绝父相即子级是绝对定位的话, 父级要使用相对定位

  1. 子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子
  2. 父盒子需要加定位限制子盒子在父盒子内显示
  3. 父盒子布局时,需要占有位置,因此父亲只能是相对定位

总结:因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位

当然,子绝父相不是永远不变的,如果父元素不需要占有位置,子绝父绝也会遇到

固定定位

固定定位是元素固定与浏览器可视区的位置,主要使用场景:可以在浏览器页面滚动时元素的位置不会改变

固定定位的特点:

  1. 以浏览器的可视窗口作为参考点移动元素
  2. 跟父元素没有任何关系
  3. 不跟随滚动条滚动
  4. 固定定位不占有原先的位置(脱标)

固定定位也是脱标的,其实固定定位也可以看做是一种特殊的绝对定位

固定定位小技巧:固定在版心右侧位置

小算法:

  1. 让固定的盒子left: 50%;,走到浏览器可视区的一半位置
  2. 让固定定位的盒子margin-left: 版心一半宽度,多走版心宽度的一半,即让固定定位的盒子贴着版心右侧对齐

粘性定位

粘性定位可以被认为是相对定位和固定定位的混合

语法:

1
2
3
4
.nav {
position: sticky;
top: 0;
}

粘性定位的特点:

  1. 以浏览器的可视窗口作为参照点移动元素(固定定位的特点
  2. 粘性定位占有原先的位置(相对定位的特点)
  3. 必须添加 top、left、right、bottom 其中一个才有效

跟页面滚动搭配使用,兼容性较差,IE 不支持

小结

定位模式是否脱标移动位置是否常用
static 静态定位不能使用边偏移很少
relative 相对定位否(占位置)相对于自身位置移动常用
absolute 绝对定位是(不占位置)带有定位的父级常用
fixed 固定定位是(不占位置)浏览器可视区常用
sticky 粘性定位否(占位置)浏览器可视区当前阶段少
  1. 记住相对定位、固定定位、绝对定位两大特点:① 是否占位置 ② 以谁为参考点移动位置
  2. 学习定位重点学会子绝父相

定位叠放次序

在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用z-index来控制盒子的前后次序(z 轴)

  • 数值可以是正整数、负整数或 0,默认是 auto,数值越大,盒子越靠上
  • 如果属性值相同,则按照书写顺序,后来者居上
  • 数字后面不能加单位
  • 只有定位的盒子才有 z-index 属性

定位的拓展

1.绝对定位的盒子居中
加了绝对定位的盒子不能通过margin: 0 auto;实现水平居中,但是可以通过以下计算方法实现水平和垂直居中

  1. left: 50%;:让盒子的左侧移动到父级元素的水平中心位置
  2. margin-left: -100px;:让盒子向左移动自身宽度的一半

2.定位特殊特性
绝对定位和固定定位也和浮动类似

  1. 行内元素添加绝对或者固定定位,可以直接设置高度和宽度
  2. 块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小

3.脱标的盒子不会触发外边距塌陷
浮动元素、绝对定位、固定定位元素都不会触发外边距合并的问题

4.绝对定位、固定定位会完全压住盒子
浮动元素只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片),但是绝对定位和固定定位会压住下面标准流所有的内容,浮动最初产生的目的就是为了做文字环绕效果的。

元素的显示与隐藏

类似网站广告,当我们点击关闭就不见了,但是我们重新刷新页面,会重新出现!
本质:让一个元素在页面中隐藏或者显示出来

  1. display 显示隐藏
  2. visibility 显示隐藏
  3. overflow 溢出显示隐藏

display 属性

display 属性用于设置一个元素如何显示

  • display: none; 隐藏对象
  • display: block; 除了转换为块级元素之外,还有显示元素的意思

display 隐藏元素后,不再占有原来的位置,应用广泛,搭配 JS 可以做很多网页特效

visibility 可见性

visibility 属性用于指定一个元素可见还是隐藏

  • visibility: visible; 元素可视
  • visibility: hidden; 元素隐藏

visibility 隐藏元素后,继续占有原来的位置

overflow 溢出

overflow 属性指定了如果内容溢出一个元素的框时,会发生什么

属性值描述
visible不剪切内容也不添加滚动条
hidden不显示超出框框的内容,超出部分隐藏掉
scroll不管是否超出内容,总是显示滚动条
auto超出时自动显示滚动条,不超出时不显示滚动条

精灵图

**核心原理:**将网页中的一些小背景图像整合到一张大图中,这样服务器只需要请求一次就好了

精灵图的使用

使用精灵图核心:

  1. 精灵技术主要针对于背景图片使用,就是把多个小背景图片整合到一张大图片中
  2. 这个大图片也称为 sprites 精灵图或者雪碧图
  3. 移动背景图片位置,此时可以使用background-position
  4. 移动的距离就是这个目标图片的 x 和 y 坐标,注意网页中的坐标有所不同
  5. 因为一般情况下都是往上往左移动,所以数值是负值
  6. 使用精灵图的时候需要精确测量,每个小背景图片的大小和位置

字体图标

字体图标使用场景:主要用于显示网页中通用、常用的一些小图标

精灵图是有诸多优点的,但是缺点很明显:

  1. 图片文件还是比较大的
  2. 图片本身放大和缩小会失真
  3. 一旦图片制作完毕想要更换非常复杂

此时,有一种技术的出现很好的解决了以上问题,就是字体图片iconfont,展示的是图标,本质是字体

字体图标的优点

  • 轻量级:一个图标字体要比一系列的图像要小,一旦字体加载了,图标就会马上渲染出来,减少服务器请求
  • 灵活性:本质其实是文字,可以很随意的改变颜色、产生阴影、透明效果、旋转等
  • 兼容性:几乎支持所有的浏览器,请放心使用

注意:字体图标不能替代精灵技术,只是工作中图标部分技术的提升和优化

总结:

  1. 如果遇到一些结构和样式比较简单的小图标,就用字体图标
  2. 如果遇到一些结构和样式复杂一点的小图片,就用精灵图

字体图标的下载

推荐下载网站:

字体图标的引入

1
2
3
4
5
6
7
8
9
10
@font-face {
font-family: "icomoon";
src: url("fonts/icomoon.eot?tztdal");
src: url("fonts/icomoon.eot?tztdal#iefix") format("embedded-opentype"), url("fonts/icomoon.ttf?tztdal")
format("truetype"), url("fonts/icomoon.woff?tztdal") format("woff"), url("fonts/icomoon.svg?tztdal#icomoon")
format("svg");
font-weight: normal;
font-style: normal;
font-display: block;
}
1
2
3
4
5
span {
font-family: "icomoon";
}

<span></span>

引用字体图标的标签里的 font-family 需和 font-face 里的保持一致

CSS 三角

网页中常见一些三角形,使用 CSS 直接画出来就可以,不必做成图片或者字体图标

1
2
3
4
5
6
7
8
div {
width: 0;
height: 0;
line-height: 0;
font-size: 0;
border: 50px solid transparent;
border-left-color: pink;
}

CSS 用户界面样式

所谓的界面样式,就是更改一些用户操作样式,以便提高更好地用户体验

  • 更改用户的鼠标样式
  • 表单轮廓
  • 防止表单域拖拽

鼠标样式

1
2
3
li {
cursor: pointer;
}

设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状

属性值描述
default默认
pointer小手
move移动
text文本
not-allowed禁止

轮廓线

给表单添加outline: 0;,或者outline: none;样式之后,就可以去掉默认的边框了

1
2
3
input {
outline: none;
}

防止拖拽文本域

实际开发中,我们文本域右下角是不可以拖拽的

1
2
3
textarea {
resize: none;
}

vertical-align 属性应用

CSS 的vertical-align属性使用场景:经常用于设置图片或者表单和文字垂直对齐

用于设置一个元素的垂直对齐方式,但是它只针对于行内元素或者行内块元素有效

1
vertical-align: baseline | top | middle | bottom;
描述
baseline默认,元素放置在父元素的基线上
top把元素的顶端与行中最高元素的顶端对齐
middle把此元素放置在父元素的中部
bottom把元素的顶端与行中最低的元素顶端对齐

图片、表单和文字对齐

图片、表单都属于行内块元素,默认的vertical-align是基线对齐
此时可以给图片、表单这些行内块元素设置vertical-align: middle;,即可让文字和图片垂直居中对齐

解决图片底部默认空白间隙问题

bug:图片底部会有一个空白缝隙,原因是行内块元素会和文字的基线对齐(预留给如 p 下半部分)
主要解决办法有两种:

  1. 给图片添加vertical-align: middle | top | bottom;
  2. 把图片转换为块级元素 display: block;

溢出的文字省略号显示

1. 单行文本溢出显示省略号

1
2
3
white-space: nowrap; /* 1. 先强制一行内显示文本 (默认normal自动换行) */
overflow: hidden; /*2.超出的部分隐藏*/
text-overflow: ellipsis; /* 3. 文字用省略号替代超出的部分 */

2. 多行文本溢出显示省略号

有较大兼容性问题,适合于 webkit 内核浏览器或移动端,更推荐让后台人员来做这个效果

1
2
3
4
5
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box; /* 弹性伸缩盒子模型显示 */
-webkit-line-clamo: 2; /* 限制在一个块元素显示的文本行数 */
-webkit-box-orient: vertical; /* 设置或检索伸缩盒对象的子元素排列方式 */

常见布局技巧

margin 负值运用

  1. 让每个盒子 margin 往左侧移动-1px,正好压住相邻盒子边框
  2. 鼠标经过某个盒子的时候,提高当前盒子的层级即可(加相对定位(占位置),或者加 z-index)

文字围绕浮动元素

行内块巧妙运用

页码在页面中间显示:

  1. 把这些链接盒子转换为行内块,之后给父级指定text-align: center;
  2. 利用行内块元素中间有缝隙,并且给父级添加text-align: center;,行内亏啊元素会水平居中

CSS 三角强化


1
2
3
4
5
width: 0;
height: 0;
border-color: transparent red transparent transparent;
border-style: solid;
border-width: 22px 8px 0 0;

CSS 初始化

不同浏览器对有些标签的默认值是不同的,为了消除不同浏览器对 HTML 文本呈现的茶艺,照顾浏览器的兼容,我们需要对 CSS 初始化(也称为 CSS reset)

Unicode 编码字体:

把中文字体的名称用相应的 Unicode 编码来代替,这样可以有效地避免浏览器解释 CSS 代码时候出现乱码的问题

比如:
黑体:\9ED1\4F53
宋体:\5B8B\4F53
微软雅黑:\5FAE\8F6F\96C5\9ED1