Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Web Font Loader gives you added control when using linked fonts via@font-face.

License

NotificationsYou must be signed in to change notification settings

cheerz/webfontloader

 
 

Repository files navigation

Web Font Loader gives you added control when using linked fonts via@font-face. It provides a common interface to loading fonts regardless of the source, then adds a standard set of events you may use to control the loading experience. The Web Font Loader is able to load fonts fromGoogle Fonts,Typekit,Fonts.com, andFontdeck, as well as self-hosted web fonts. It is co-developed byGoogle andTypekit.

Build Status

Contents

Get Started

To use the Web Font Loader library, just include it in your page and tell it which fonts to load. For example, you could load fonts fromGoogle Fonts using the Web Font Loader hosted onGoogle Hosted Libraries using the following code.

<scriptsrc="//ajax.googleapis.com/ajax/libs/webfont/1.5.6/webfont.js"></script><script>WebFont.load({google:{families:['Droid Sans','Droid Serif']}});</script>

Alternatively, you can link to the latest1.x version of the Web Font Loader by using//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js as thescript source. Note that the version in this url is less specific. It will always load the latest1.x version, but it also has a shorter cache time to ensure that your page gets updates in a timely manner. For performance reasons, we recommend using an explicit version number (such as1.4.7) in urls when using the Web Font Loader in production. You can manually update the Web Font Loader version number in the url when you want to adopt a new version.

It is also possible to use the Web Font Loader asynchronously. For example, to loadTypekit fonts asynchronously, you could use the following code.

<script>WebFontConfig={typekit:{id:'xxxxxx'}};(function(){varwf=document.createElement('script');wf.src=('https:'==document.location.protocol ?'https' :'http')+'://ajax.googleapis.com/ajax/libs/webfont/1.5.6/webfont.js';wf.type='text/javascript';wf.async='true';vars=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(wf,s);})();</script>

Using the Web Font Loader asynchronously avoids blocking your page while loading the JavaScript. Be aware that if the script is used asynchronously, the rest of the page might render before the Web Font Loader is loaded and executed, which can cause aFlash of Unstyled Text (FOUT).

The FOUT can be more easily avoided when loading the Web Font Loader synchronously, as it will automatically set thewf-loading class on the HTML element as soon asWebfont.load has been called. The browser will wait for the script to load before continuing to load the rest of the content, FOUT is avoided.

Configuration

The Web Font Loader configuration is defined by a global variable namedWebFontConfig, or passed directly to theWebFont.load method. It defines which fonts to load from each web font provider and gives you the option to specify callbacks for certain events. When using the asynchronous approach, you must define the global variableWebFontConfig before the code that loads the Web Font Loader (as in the example above).

Events

Web Font Loader provides an event system that developers can hook into. It gives you notifications of the font loading sequence in both CSS and JavaScript.

  • loading - This event is triggered when all fonts have been requested.
  • active - This event is triggered when the fonts have rendered.
  • inactive - This event is triggered when the browser does not support linked fontsor if none of the fonts could be loaded.
  • fontloading - This event is triggered once for each font that's loaded.
  • fontactive - This event is triggered once for each font that renders.
  • fontinactive - This event is triggered if the font can't be loaded.

CSS events are implemented as classes on thehtml element. The following classes are set on thehtml element:

.wf-loading.wf-active.wf-inactive.wf-<familyname>-<fvd>-loading.wf-<familyname>-<fvd>-active.wf-<familyname>-<fvd>-inactive

The<familyname> placeholder will be replaced by a sanitized version of the name of each font family. Spaces and underscores are removed from the name, and all characters are converted to lower case. For example,Droid Sans becomesdroidsans. The<fvd> placeholder is aFont Variation Description. Put simply, it's a shorthand for describing the style and weight of a particular font. Here are a few examples:

/* n4 */@font-face {font-style: normal;font-weight: normal; }/* i7 */@font-face {font-style: italic;font-weight: bold; }

Keep in mind thatfont-weight: normal maps tofont-weight: 400 andfont-weight: bold maps tofont-weight: 700. If no style/weight is specified, the defaultn4 (font-style: normal; font-weight: normal;) will be used.

If fonts are loaded multiple times on a single page, the CSS classes continue to update to reflect the current state of the page. The globalwf-loading class is applied whenever fonts are being requested (even if other fonts are already active or inactive). Thewf-inactive class is applied only if none of the fonts on the page have rendered. Otherwise, thewf-active class is applied (even if some fonts are inactive).

JavaScript events are implemented as callback functions on theWebFontConfig configuration object.

WebFontConfig={loading:function(){},active:function(){},inactive:function(){},fontloading:function(familyName,fvd){},fontactive:function(familyName,fvd){},fontinactive:function(familyName,fvd){}};

Thefontloading,fontactive andfontinactive callbacks are passed the family name and font variation description of the font that concerns the event.

It is possible to disable setting classes on the HTML element by setting theclasses configuration parameter tofalse (defaults totrue).

WebFontConfig={classes:false};

You can also disable font events (callbacks) by setting theevents parameter tofalse (defaults totrue).

WebFontConfig={events:false};

If both events and classes are disabled, the Web Font Loader does not perform font watching and only acts as a way to insert @font-face rules in the document.

Timeouts

Since the Internet is not 100% reliable, it's possible that a font will fail to load. Thefontinactive event will be triggered after 5 seconds if the font fails to render. Ifat least one font succesfully renders, theactive event will be triggered, else theinactive event will be triggered.

You can change the default timeout by using thetimeout option on theWebFontConfig object.

WebFontConfig={google:{families:['Droid Sans']},timeout:2000// Set the timeout to two seconds};

The timeout value should be in milliseconds, and defaults to 3000 milliseconds (3 seconds) if not supplied.

Iframes

Usually, it's easiest to include a copy of Web Font Loader in every window where fonts are needed, so that each window manages its own fonts. However, if you need to have a single window manage fonts for multiple same-origin child windows or iframes that are built up using JavaScript, Web Font Loader supports that as well. Just use the optionalcontext configuration option and give it a reference to the target window for loading:

WebFontConfig={google:{families:['Droid Sans']},context:frames['my-child']};

This is an advanced configuration option that isn't needed for most use cases.

Modules

Web Font Loader provides a module system so that any web font provider can contribute code that allows their fonts to be loaded. This makes it possible to use multiple web font providers at the same time. The specifics of each provider currently supported by the library are documented here.

Custom

To load fonts from any external stylesheet, use thecustom module. Here you'llneed to specify the font family names you're trying to load, and optionally the url of the stylesheet that provides the@font-face declarations for those fonts.

You can specify a specific font variation or set of variations to load and watchby appending the variations separated by commas to the family name separated bya colon. Variations are specified usingFVD notation.

WebFontConfig={custom:{families:['My Font','My Other Font:n4,i4,n7'],urls:['/fonts.css']}};

In this example, thefonts.css file might look something like this:

@font-face {font-family:'My Font';  src: ...;}@font-face {font-family:'My Other Font';font-style: normal;font-weight: normal;/* or 400 */  src: ...;}@font-face {font-family:'My Other Font';font-style: italic;font-weight: normal;/* or 400 */  src: ...;}@font-face {font-family:'My Other Font';font-style: normal;font-weight: bold;/* or 700 */  src: ...;}

If your fonts are already included in another stylesheet you can also leave out theurls array and just specify font family names to start font loading. As long as the names match those that are declared in thefamilies array, the proper loading classes will be applied to the html element.

<scriptsrc="//ajax.googleapis.com/ajax/libs/webfont/1.5.6/webfont.js"></script><script>WebFont.load({custom:{families:['My Font']}});</script><styletype="text/css">@font-face {font-family:"My Font";src:url("assets/fonts/my_font.woff")format("woff");  }</style>

The custom module also supports customizing the test strings that are used to determine whether or not a font has loaded. This can be used to load fonts with custom subsets or glyphs in the private use unicode area.

WebFontConfig={custom:{families:['My Font'],testStrings:{'My Font':'\uE003\uE005'}}};

Tests strings should be specified on a per font basis and contain at least one character. If not specified the default test string (BESbswy) is used.

Fontdeck

To use theFontdeck module, specify the ID of your website. You can find this ID on the website page within your account settings.

WebFontConfig={fontdeck:{id:'xxxxx'}};

Fonts.com

When usingFonts.com web fonts specify your Project ID.

WebFontConfig={monotype:{projectId:'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',version:12345// (optional, flushes the CDN cache)}};

The Fonts.com module has an optionalversion option which acts as a cache-buster.

Google

UsingGoogle's Font API, name the font families you'd like to load. You can use the samesyntax as in the Font API to specify styles:

WebFontConfig={google:{families:['Droid Sans','Droid Serif:bold']}};

Sometimes the font you requested doesn't come in the default variation (e.g.n4) and you need to explicitly request the variation you want for font events to work (e.g.n3,n7, etc.). You can also supply thetext parameter to perform character subsetting:

WebFontConfig={google:{families:['Droid Sans','Droid Serif'],text:'abcdedfghijklmopqrstuvwxyz!'}};

Thetext subsetting functionality is only available for the Google module.

Typekit

When usingTypekit, specify the Kit to retrieve by its ID. You can find the Kit ID within Typekit's Kit Editor interface.

WebFontConfig={typekit:{id:'xxxxxx'}};

FYI: Typekit's own JavaScript is built using the Web Font Loader library and already provides all of the same font event functionality. If you're using Typekit, you should use their embed codes directly unless you also need to load web fonts from other providers on the same page.

Browser Support

Every web browser has varying levels of support for fonts linked via@font-face. Web Font Loader determines support for web fonts is using the browser's user agent string. The user agent string may claim to support a web font format when it in fact does not. This is especially noticeable on mobile browsers with a "Desktop" mode, which usually identify as Chrome on Linux. In this case a web font provider may decide to send WOFF fonts to the device because the real desktop Chrome supports it, while the mobile browser does not. The Web Font Loader is not designed to handle these cases and it defaults to believing what's in the user agent string. Web font providers can build on top of the basic Web Font Loader functionality to handle these special cases individually.

If Web Font Loader determines that the current browser does not support@font-face, theinactive event will be triggered.

When loading fonts from multiple providers, each provider may or may not support a given browser. If Web Font Loader determines that the current browser can support@font-face, andat least one provider is able to serve fonts, the fonts from that provider will be loaded. When finished, theactive event will be triggered.

For fonts loaded from supported providers, thefontactive event will be triggered. For fonts loaded from a provider thatdoes not support the current browser, thefontinactive event will be triggered.

For example:

WebFontConfig={providerA:'Family1',providerB:'Family2'};

IfproviderA can serve fonts to a browser, butproviderB cannot, Thefontinactive event will be triggered forFamily2. Thefontactive event will be triggered forFamily1 once it loads, as will theactive event.

Copyright and License

Web Font Loader Copyright (c) 2010 Adobe Systems Incorporated, Google Incorporated.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

Web Font Loader gives you added control when using linked fonts via@font-face.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript91.7%
  • Ruby8.0%
  • CSS0.3%

[8]ページ先頭

©2009-2025 Movatter.jp