Last update : June 27, 2014
Some HTML elements don’t work with responsive layouts. Among these are iFrames, which you may need to use when embedding content from external sources. Other elements are Image Maps which are lists of coordinates relating to a specific image, created in order to hyperlink areas of the image to different destinations.
Responsive iFrames
When you embed content from an external source with an iFrame, you must include width and height attributes. Wihtout these parameters, the iframe will disappear because it would have no dimensions. Unfortunaltely you can’t fix this in your css style sheet.
To make embedded content responsive, you need to add a containing wrapper around the iframe :
<div class="iframe_container">
<iframe src="http://www.yoursite.com/yourpage.html" width="640" height="480">
</iframe>
</div>
The containing wrapper is styled with the .iframe_container
class in the style sheet :
.iframe_container {
position: relative;
padding-bottom: 75%;
height: 0;
overflow: hidden;
}
Setting the position to relative lets us use absolute positioning for the iframe itself. The padding-bottom value is calculated out of the aspect ratio of the iFrame, which in this case is 480 / 640 = 75%. The height is set to 0 because padding-bottom gives the element the height it needs. The width will automatically resize with the responsive element included in the wrapping div. Setting overflow to hidden ensures that any content flowing outside of this element will be hidden from view.
The iFrame itself is styled with the following CSS code :
.iframe_container iframe {
position: absolute;
top:0;
left: 0;
width: 100%;
height: 100%;
}
Absolute positioning must be used because the containing element has a height of 0. The top and left properties position the iFrame correctly in the containing element. The width and height properties ensure that the iFrame takes up 100% of the space used by the containing element set with padding.
Responsive Image Maps
Image maps are a co-ordinate representations of images in sections mostly in rectangular, poly and circle format. According to the specs percent values can be used for coordinates, but no major browsers understand them correctly and all interpret coordinates as pixel coordinates. The result is that image maps applied to responsive images don’t work as expected when images are resized. It’s necessary to recalculate the area coordinates to match the actual image size.
There are different solutions available to make Image Maps responsive :
- Javascript magemap resizer, by David J. Bradshaw
- RWD Image Map jQuery plugin, by Matt Stow
- Image slicing
- Maphighlight 1.3, by David Lynch
- Imagemap with SVG, by Dudley Storey
- CSS only Responsive Image Map, by Stu Nicholls
The following demo shows a responsive Image Map embedded in a responsive iFrame :
[HTML2]
Links
The list below shows links to websites sharing additional informations about responsive iFrames and Image Maps :
- Making embedded content work in responsive design, by Rachel McCollin
- SUIT CSS components flex embed
- Responsive iFrame JSFiddle
- Responsive Imagemap, by Sven Wolfermann
- Creating an Image Map using CSS only, by Stu Nicholls
- Image mapping by CSS, by Neopets
- Clickable Background images in CSS, by Debbie Campbell