Holder uses the canvas
element and the data URI scheme to render image placeholders entirely in browser.
Bootstrap uses Holder for thumbnails.
Add the package declaration:
"holder" : {
"git": "https://github.com/Dsyko/meteor-holder.git"
}
To the packages object in the smart.json of your meteor app.
"packages": {
"holder" : {
"git": "https://github.com/Dsyko/meteor-holder.git"
}
}
Add to meteor using meteorite add command:
mrt add holder
Including the package should automatically include holder.js
in your HTML:
<script src="holder.js"></script>
Holder will then process all images with a specific src
attribute, like this one:
<img src="holder.js/200x300">
The above tag will render as a placeholder 200 pixels wide and 300 pixels tall.
If Holder isn't processing the imgs try calling Holder.run() in meteor's template.rendered callback:
Holder.run()
To avoid console 404 errors, you can use data-src
instead of src
.
Holder also includes support for themes, to help placeholders blend in with your layout. There are 3 default themes: gray
, industrial
, and social
. You can use them like this:
<img src="holder.js/200x300/industrial">
Themes have 4 properties: foreground
, background
, size
, and font
. The size
property specifies the minimum font size for the theme. You can create a sample theme like this:
Holder.add_theme("dark", {background:"#000", foreground:"#aaa", size:11, font: "Monaco"})
There are two ways to use custom themes with Holder:
- Include theme at runtime to render placeholders already using the theme name
- Include theme at any point and re-render placeholders that are using the theme name
The first approach is the easiest. After you include holder.js
, add a script
tag that adds the theme you want:
<script src="holder.js"></script>
<script> Holder.add_theme("bright", { background: "white", foreground: "gray", size: 12 })</script>
The second approach requires that you call run
after you add the theme, like this:
Holder.add_theme("bright", { background: "white", foreground: "gray", size: 12}).run()
You can use Holder in different areas on different images with custom themes:
<img data-src="example.com/100x100/simple" id="new">
Holder.run({
domain: "example.com",
themes: {
"simple":{
background:"#fff",
foreground:"#000",
size:12
}
},
images: "#new"
})
Custom colors on a specific image can be specified in the background:foreground
format using hex notation, like this:
<img data-src="holder.js/100x200/#000:#fff">
The above will render a placeholder with a black background and white text.
You can specify custom text using the text:
operator:
<img data-src="holder.js/200x200/text:hello world">
If you have a group of placeholders where you'd like to use particular text, you can do so by adding a text
property to the theme:
Holder.add_theme("thumbnail", { background: "#fff", text: "Thumbnail" })
Specifying a dimension in percentages creates a fluid placeholder that responds to media queries.
<img data-src="holder.js/100%x75/social">
By default, the fluid placeholder will show its current size in pixels.
If you'd like to avoid Holder enforcing an image size, use the auto
flag like so:
<img data-src="holder.js/200x200/auto">
The above will render a placeholder without any embedded CSS for height or width.
Holder can render placeholders as background images for elements with the holderjs
class, like this:
#sample {background:url(?holder.js/200x200/social) no-repeat}
<div id="sample" class="holderjs"></div>
The Holder URL in CSS should have a ?
in front. You can change the default class by specifying a selector as the bgnodes
property when calling Holder.run
.
Holder extends its default settings with the settings you provide, so you only have to include those settings you want changed. For example, you can run Holder on a specific domain like this:
Holder.run({domain:"example.com"})
You can prevent Holder from running its default configuration by executing Holder.run
with your custom settings right after including holder.js
. However, you'll have to execute Holder.run
again to render any placeholders that use the default configuration.
You can add a placeholder programmatically by chaining Holder calls:
Holder.add_theme("new",{foreground:"#ccc", background:"#000", size:10}).add_image("holder.js/200x100/new", "body").run()
The first argument in add_image
is the src
attribute, and the second is a CSS selector of the parent element.
Holder is compatible with lazyload.js
and works with both fluid and fixed-width images. For best results, run .lazyload({skip_invisible:false})
.
- Chrome 1+
- Firefox 3+
- Safari 4+
- Internet Explorer 9+, with fallback for IE6-8
- Android 1+
Holder is provided under the Apache 2.0 License. Commercial use requires attribution.
Holder is a project by Ivan Malopinsky.