• Stars
    star
    263
  • Rank 155,624 (Top 4 %)
  • Language
    JavaScript
  • Created over 12 years ago
  • Updated almost 12 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

DEPRECATED, please use its successor: background-size polyfill

jquery.backgroundSize.js DEPRECATED

This plugin has been deprecated, please use its background-size polyfill successor.

A jQuery cssHook adding support for "cover" and "contain" to IE6-7-8, in 1.5K

Introduction

Demo

Progressive Enhancement is the mantra I live by. It means "Have fun with CSS3 and don't worry about IE6-7-8 users; they'll never notice they're missing out on your gorgeous text-shadows and gradients, anyway".

All was well until I discovered the elegance of background-size: cover; and background-size: contain;. The first one, for instance, allows an image to completely cover a background, without having to send a 1920x1080 background image down the pipes.

Unfortunately, they don't degrade gracefully: websites would likely appear broken to IE6-7-8 users :-( ...unless you use this cssHook!

How does it work?

Set the background-size just like any other style property with jQuery:

$(elem).css( "background-size", "cover" );

In browsers that don't implement it natively, an <img/> will be inserted in the background of elem and emulate the cover or contain value.

Limitations

Calculating the displayed position and size of the background-image of an element is quite complex and function of numerous parameters:

  • the size of the element itself
  • the size of the image
  • the values of background-[size/position/clip/origin/attachment/scroll]

It is thus impossible to emulate background-size completely and perfectly. But it's still possible to enjoy the main features:

  • correct position and size of the background image
  • updated position and size on browser resize
  • updated image, position and size when the background-image is modified using $(elem).css("background-image", "differentImage.jpg");

The following style properties, values or behavior aren't supported:

  • values other than cover or contain in background-size
  • multiple backgrounds (although the :after trick can still be used)
  • 4 values syntax of background-position
  • lengths (px, em, etc.) in background-position (only percentages and keywords such as center work)
  • any repeat value in background-repeat
  • non-default values of background-[clip/origin/attachment/scroll]
  • updated image size when the size of the element is modified

Removing any of these limitations is probably just one fork away...

Development vs. Production

The elements targeted by this plugin should be positionned (position: relative/absolute/fixed; but not static) and have a z-index. If not, they will be given a position: relative; and z-index: 0;.

In some cases this could potentially alter the layout of your page in IE6-7-8. To help you spot problems earlier, you can use a flag that will turn ON emulation of background-size in all browsers:

<!-- The flag should be inserted before loading the script -->
<script>$.debugBGS = true;</script>
<script src="/path/to/jquery.backgroundSize.js"></script>

Switch to the following snippet before deploying your code to a production environment:

<!--[if lt IE 9]> <script src="/path/to/jquery.backgroundSize.min.js"></script> <![endif]-->

Refreshing a background

There are several cases that can cause an element to be resized and require its background to be refreshed (e.g. modifying the size of its content or animating it). This plugin includes a helper for that purpose: $.refreshBackgroundDimensions( elem );. Here's how to use it during an animation:

$(elem).animate({ height: "+=100" }, {
	step: function() { $.refreshBackgroundDimensions( this ); }
});

License

MIT Licensed http://louisremi.mit-license.org/, by @louis_remi

More Repositories

1

background-size-polyfill

Adds support for background-size "cover" and "contain" to IE8
JavaScript
1,264
star
2

jquery-smartresize

Debounced and Throttled Resize Events for jQuery
JavaScript
787
star
3

jquery.transform.js

jQuery cssHooks adding a cross browser transform property to $.fn.css() and $.fn.animate()
JavaScript
620
star
4

jquery.transition.js

Upgrade jQuery's .animate() method to use CSS3 Transitions in modern browsers.
JavaScript
437
star
5

Activable

declarative UI components | 2K, 0 dependency, IE8 compat.
JavaScript
82
star
6

menu-effects

CSS3 menu effects
JavaScript
45
star
7

rotor.js

rotate3d manipulation library - lightweight and extensible
JavaScript
43
star
8

jquery.persival.js

Persival can persist the values users entered in forms, to make them resilient to "inadvertent tab closing" and crashes
JavaScript
35
star
9

node-DJs

Restart a server after each change in main script and dependencies
JavaScript
30
star
10

gulp-shelter

A cozy place for your shell tasks
JavaScript
22
star
11

borderimage

cross-browser implementation of border-image CSS3 property
JavaScript
21
star
12

mediaCache

Put image, audio and video resources in a dynamic cache for offline use
PHP
17
star
13

touch-devtool

Simulate touch events with a mouse, for fun and profit.
JavaScript
16
star
14

node.s3.js

A high level, file oriented javascript API to Amazon S3
JavaScript
10
star
15

jquery.browser

Browser and mobile platform sniffing scripts (plugin & standalone)
JavaScript
9
star
16

WordPress-Post-Relations

Lightweight relations between WordPress post types
PHP
8
star
17

jquery.backgroundXY.js

A jQuery cssHooks implementing background-position-X and background-position-Y in browsers lacking it.
JavaScript
8
star
18

orientation-devtool

Simulate orientation events, for fun and profit
JavaScript
8
star
19

victor

Convert your SVG files to lightweight, Raphael-compatible JSON
JavaScript
7
star
20

WordPress-Sortable-Posts

Reorder posts by drag-and-drop
JavaScript
7
star
21

geolocation.js

a polyfill providing a normalized W3C geolocation API across browsers.
JavaScript
7
star
22

store.space.js

a store.js plugin bringing namespaces to localStorage, in half a Kb
JavaScript
6
star
23

jquery.cookie

The ultimate library to write cookies with jQuery
6
star
24

node.pdf.js

Pdf generation for node using wkhtmltopdf
JavaScript
6
star
25

Math.uuid.js

Minimalistic version of Robert Kieffer's Math.uuid.js, primarily aimed at interacting with couchDB
JavaScript
5
star
26

froglet.js

sandboxed-Widget boilerplate for bookmarklet and extension
JavaScript
4
star
27

slack-app-in-tab

A Chrome + Firefox extension to open the Slack app with its multi-workspace sidebar in a simple browser tab
JavaScript
4
star
28

fxngn.js

A minimalist effects/game engine built to evaluate the influence of != parameters on performances
JavaScript
4
star
29

node.csv.js

Every language need its CSV parser, JavaScript needs a JSON style API
JavaScript
4
star
30

todoso

ToDoSo is a presentation authoring, playing and sharing Web application
JavaScript
4
star
31

ti

nothing interesting
JavaScript
3
star
32

jquery-interval-bookmarklet

Experimenting with visual performances of jQuery animations
JavaScript
3
star
33

jquery.delegate.js

Backport the delegate function introduced in jQuery 1.4, for jQuery 1.3
JavaScript
3
star
34

jquery.updateInterval

update $.fx.interval property dynamically and don't wait to see the effect
JavaScript
3
star
35

designer-tools

cross-browser plugin that makes it easy to style your pages in a cross-browser way
JavaScript
3
star
36

EventSound

audible jQuery events
JavaScript
2
star
37

CV

Take a wild guess
1
star
38

xentity

Declarative UI Component Factory
JavaScript
1
star
39

Slasher

slasher game for the GDPJAM
JavaScript
1
star
40

todosOverlay

The overlay plugin for jQuery that is used on the ToDoSo introduction page
1
star