CSS加载服务器上的字体太慢、能不能在字体加载未完成之前显示默认宋体

CSS加载服务器上的字体太慢了、这字体文件比较大,加载完需要十来秒,字体未加载完之前什么都不显示、这样给人的感觉好像是网站打不开、有没有什么方法可以让字体未加载完之前先显... CSS加载服务器上的字体太慢了、这字体文件比较大,加载完需要十来秒,字体未加载完之前什么都不显示、这样给人的感觉好像是网站打不开、有没有什么方法可以让字体未加载完之前先显示默认的宋体,等加载完之后再覆盖宋体? 展开
 我来答
百度网友faadf46
高粉答主

2020-04-30 · 说的都是干货,快来关注
知道答主
回答量:4556
采纳率:0%
帮助的人:65.2万
展开全部

CSS加载服务器上的字体太慢是设置错误造成的,解决方法为:

1、新建文件创建p标签,设置字体加粗。

2、设置字体大小。

3、设置使用什么字体。

4、设置下划线如下图所示。

5、附上代码<body><style>p{line-height:40px;}.p1{font-weight:bold;}.p2{font-size:36px;}.p3{ font-family:"微软雅黑"}.p4{font-style:italic;}.p5{text-decoration:underline;}</style><p class="p1">你好</p><p class="p2">你好</p><p class="p3">你好</p><p class="p4">你好</p><p class="p5">你好</p><p>你好</p></body>。

马后雷鼓下扬州5058
推荐于2017-11-25 · TA获得超过4321个赞
知道小有建树答主
回答量:693
采纳率:33%
帮助的人:787万
展开全部

除了使用 Javascript 没有什么其它好的办法。我写了个函数,你可以直接使用。


<style type="text/css">
/* 自定义字体 */
@font-face{
font-family:yy;
src:url(../vista/atlsp1.ttf);
src:url(../vista/atlsp2.eot)\9;
}

/*
不要将 yy 添加到这里,SimSun=宋体
这样页面加载的时候文字先以宋体显示
*/
.nav {font-family: SimSun;}
</style>


把下面的 Javascript 代码添加到 <head></head> 里面


<script type="text/javascript">
// font: 字体名称,ele: 要使用此字体的元素
function loadFont(font, ele) {
var span = document.createElement("span");
// 这几个字母和符号宽度比较容易变化
span.innerHTML = "gW@i#Q!T";
// 设置为不可见,但可以测量宽度
span.style.visibility = "hidden";
// 字体大小为 500px,如果宽度变化比较容易区分
span.style.fontSize = "500px";
// 设置字体
span.style.fontFamily = font;
// 添加到页面
document.body.appendChild(span);
// 获取宽度
var width_now = span.offsetWidth;
// 每 0.05 秒检查一次是否加载
var interval_check = setInterval(function() {
// 宽度变化,说明字体被加载
if(span.offsetWidth != width_now) {
clearInterval(interval_check);
// 设置字体为
ele.style.fontFamily = font;
// 移除 span
document.body.removeChild(span);
span = null;
}
}, 50);
}

window.onload = function() {
loadFont("yy", document.getElementsByClassName("nav")[0]);
};
</script>


代码中以 // 开头的行都是注释,可以删掉。


注意上面调用 loadFont 后只对 .nav 起作用,如果其它元素还使用自定义字体,那么你要先用 Javascript 找到此元素,然后调用函数,例如


loadFont("my_font", document.getElementById("main"));
更多追问追答
追问
有个小缺陷、在火狐上已经OK了、在谷哥跟360上第一次访问开始显示宋体、字体加载完成之后显示了自定义的字体、一切正常、但接着访问另一个页面时、由于浏览器已经加载了这个自定义的字体、就不再重复加载、这段Javascript无法判断出来、一直以宋体来显示、 IE也不兼容现在   哥们、能再改善下吗、解决了追加200分给你   这问题都折腾我几天了、一直没法解决
追答
不知道你的 eot 是如何转换的,我看你在字体中用了两文不同的文件名,atlsp1 和 atlsp2,你必须要保证这个 eot 字体是可用的。

代码我改了,在 IE 8/9, Firefox, Chrome, Safari, Opera 下都测试了,除了在字体转换期间 Chrome 和 Safari 可能会有那么半秒的空白(这个是没法避免的),其它都没问题。

我把这个写成一篇日志了,在空间(地址贴出来容易被蔽,点我用户名,进空间,找 font-face 那篇文章),你只需要替换 CSS 和 Javascript 函数部分。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
与你相伴sunny
2013-04-13 · TA获得超过101个赞
知道答主
回答量:93
采纳率:0%
帮助的人:127万
展开全部
你好!如果你要将特殊的字体加到CSS中,而且网站访问时也可以显示出来的话,那你必须将字体文件也一同上传上去,这样才能让字体加载进入网站,不过这样一来你网站加载速度就会慢掉。
通常情况下,如果是大容量的字体文件加载进入网站,好你必须加一段加载页面的JS代码,要不然你的网站加载速度会非常的慢,会影响网站的浏览效果。
所以我觉得没有必要的情况下,建议你还是不要加入字体文件好!
希望我的回答能令你满意!
追问
就是必须要使用这种特殊的字体啊、不然也不想搞这么辛苦、 这加载页面的JS代码怎么弄、不熟悉JS、有现成的吗? 给我一份 309841739  qq邮箱
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-04-13
展开全部
定义页面字体为宋体,样式写在加载服务器字体前面,当加载到前面的时候 显示为宋体,加载完后,则根据后面的样式覆盖前面的样式,加载服务器字体
追问
不行啊、我是宋做的
html{font-family:"宋体";}

@font-face{
font-family:yy;
src:url(../vista/atlsp1.ttf);
src:url(../vista/atlsp2.eot)\9;
}

然后在需要调用这种字体的地方使用
.nav{ font-family:yy;}
这样不可以,一样优化使用 .nav定义的字体、该部分显示空白、等待字体完全加载完后才显示出来
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b03015e
2019-07-26
知道答主
回答量:5
采纳率:0%
帮助的人:1.8万
展开全部

在定义字体是时候使用

font-display: swap;

有几种不同的font-display,效果上会带来微妙的差别

  • font-display: swap:浏览器会直接使用font-family中最先匹配到的已经能够使用的字体,然后当font-family中更靠前的字体成功载入时,切换到更靠前的字体,相当于是FOUT。

  • font-display: fallback: 浏览器会先等待最靠前的字体加载,如果没加载到就不显示任何东西,这个过程大约持续100ms,然后按照顺序显示已经成功载入的字体。在此之后有大约3s的时间来提供切换到加载完毕的更靠前的字体。

  • font-display: optional: 浏览器会先等待最靠前的字体加载,如果没加载到就不显示任何东西,这个过程大约持续100ms,然后字体就不会再更改了(一般第一次打开某页面的时候都会使用fallabck字体,字体被下载但是没被使用,之后打开时会使用缓存中的字体)。

  • 参考链接https://blog.csdn.net/weixin_3

@font-face {
font-family: Merriweather;
src: url(/path/to/fonts/Merriweather.woff) format('woff');
font-weight: 400;
font-style: normal;
font-display: swap;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式