淡入淡出时无样式内容的闪烁
Flash of unstyled content when fading in text
我想不出一种方法来防止在本应使用 Google 字体中的字体设置样式的文本淡入淡出时出现无样式内容。
看起来 fonts.googleapis.com 在页面加载时加载,但直到文本应该淡入时 fonts.gstatic.com 才会加载,这会导致短暂且难看的闪烁Times New Roman 中的文本或任何默认字体,然后才正确设置样式。
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Quicksand&display=swap" rel="stylesheet">
<!-- Static CSS -->
<link rel='stylesheet' type='text/css' href="main.css"/>
</head>
<body>
<div>
<button id="startButton">Start</button>
</div>
<div id="textDiv">
<p id="textContents"></p>
</div>
<!-- jQuery -->
<script src="https://code.jquery.com/jquery-3.3.1.min.js" crossorigin="anonymous"></script>
<!-- Static JavaScript -->
<script src="main.js"></script>
</body>
CSS
#textDiv {
font-size: 40px;
font-family: 'Quicksand';
}
Javascript
var textDiv = $('#textDiv');
var text = $('#textContents');
var button = $('#startButton');
// handle click and add text
button.bind("click", function() {
textDiv.hide();
text.html("<p>Hello</p>");
textDiv.fadeIn();
})
https://jsfiddle.net/eshapiro42/xmf23uqw/15/
如果您能帮助我们解决如何防止这种情况,我们将不胜感激!
当您引用实际字体时,您可以 preload
字体。您在此处引用的是一个样式表,它使用 Quicksand
.
的不同变体将 @font-face
添加到您的文档中
解决方法是将样式表 link 粘贴到您的浏览器中并将直接 link 抓取到字体中,然后将其作为参考加载到您的 html 文档中有了这个:
<link rel="preload" href="ttps://fonts.gstatic.com/s/quicksand/v15/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58a-xDwxUD2GFw.woff" as="font" crossorigin>
在 CSS 中,您可以添加 display: none;
,在 JavaScript 中添加
$(function() {
$('#textDiv').css('display', 'block');
});
从 Google 引用字体时使用 display=block
请求参数。您的示例完整 URL:
https://fonts.googleapis.com/css?family=Quicksand&display=block
这又会导致 Google 样式表在其 @font-face 声明中使用 font-display: block
规则。此规则将指定您宁愿文本在加载字体之前保持未呈现状态,而不是以本地字体呈现文本并在网络字体准备就绪时重新呈现。
来源:
https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/webfont-optimization#customize_the_text_rendering_delay
https://css-tricks.com/google-fonts-and-font-display/
我想不出一种方法来防止在本应使用 Google 字体中的字体设置样式的文本淡入淡出时出现无样式内容。
看起来 fonts.googleapis.com 在页面加载时加载,但直到文本应该淡入时 fonts.gstatic.com 才会加载,这会导致短暂且难看的闪烁Times New Roman 中的文本或任何默认字体,然后才正确设置样式。
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Quicksand&display=swap" rel="stylesheet">
<!-- Static CSS -->
<link rel='stylesheet' type='text/css' href="main.css"/>
</head>
<body>
<div>
<button id="startButton">Start</button>
</div>
<div id="textDiv">
<p id="textContents"></p>
</div>
<!-- jQuery -->
<script src="https://code.jquery.com/jquery-3.3.1.min.js" crossorigin="anonymous"></script>
<!-- Static JavaScript -->
<script src="main.js"></script>
</body>
CSS
#textDiv {
font-size: 40px;
font-family: 'Quicksand';
}
Javascript
var textDiv = $('#textDiv');
var text = $('#textContents');
var button = $('#startButton');
// handle click and add text
button.bind("click", function() {
textDiv.hide();
text.html("<p>Hello</p>");
textDiv.fadeIn();
})
https://jsfiddle.net/eshapiro42/xmf23uqw/15/
如果您能帮助我们解决如何防止这种情况,我们将不胜感激!
当您引用实际字体时,您可以 preload
字体。您在此处引用的是一个样式表,它使用 Quicksand
.
@font-face
添加到您的文档中
解决方法是将样式表 link 粘贴到您的浏览器中并将直接 link 抓取到字体中,然后将其作为参考加载到您的 html 文档中有了这个:
<link rel="preload" href="ttps://fonts.gstatic.com/s/quicksand/v15/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o58a-xDwxUD2GFw.woff" as="font" crossorigin>
在 CSS 中,您可以添加 display: none;
,在 JavaScript 中添加
$(function() {
$('#textDiv').css('display', 'block');
});
从 Google 引用字体时使用 display=block
请求参数。您的示例完整 URL:
https://fonts.googleapis.com/css?family=Quicksand&display=block
这又会导致 Google 样式表在其 @font-face 声明中使用 font-display: block
规则。此规则将指定您宁愿文本在加载字体之前保持未呈现状态,而不是以本地字体呈现文本并在网络字体准备就绪时重新呈现。
来源:
https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/webfont-optimization#customize_the_text_rendering_delay https://css-tricks.com/google-fonts-and-font-display/