Best Solution/framework To Responsive Design For Ie7
Solution 1:
Just looking into this. I was going to use adapt.js, but I found some JS that enables media query functionality on older browsers (including IE7).
That way newer browsers without JS will still work properly, the only situation where the responsive design will fall back to the smallest version is on
Here are two of the best JS media query fallbacks I have found:
Respond
https://github.com/scottjehl/Respond
Respond is around 3kb when compressed and supports the basic media queries that you would need for simple responsive design (min/max-width)
css3-mediaqueries-js
http://code.google.com/p/css3-mediaqueries-js/
A bit bigger at <16kb minified. Supports a wider range of media queries (not tested, but it is referenced on the Respond site)
Solution 2:
I don't know of any way to make a website responsive in IE6-8 without using Javascript. It is, however, possible to just serve a desktop version of your website to these browsers and make it responsive in all other browsers. I believe this is the best approach, since IE6-8 are (almost?) exclusively used on desktops anyway.
Cascade Framework is the only CSS framework I know with a grid system that implements this technique.
Solution 3:
I didn't like the idea of some of the alternatives to make old browsers work with media queries. Loading the CSS file via AJAX and parsing it doesn't sound too efficient to me.
Another option to make responsive websites for IE7 or even IE5/6 is to use JavaScript to apply classes based on screen width, similar to media queries. This works with all browsers as long as JavaScript is enabled. You can have a default resolution which is served if JavaScript is disabled.
This is described here.
Some sample JavaScript to accomplish this:
<scripttype="text/javascript">functionhasClass(el, cls) {
return el.className.match(newRegExp('(\\s|^)' + cls + '(\\s|$)'));
}
functionaddClass(el, cls) {
if (!this.hasClass(el, cls)) el.className += " " + cls;
}
functionremoveClass(el, cls) {
if (hasClass(el, cls)) {
var reg = newRegExp('(\\s|^)' + cls + '(\\s|$)');
el.className = el.className.replace(reg, ' ');
}
}
var addEvent = function (elem, type, eventHandle) {
if (elem == null || elem == undefined) return;
if (elem.addEventListener) {
elem.addEventListener(type, eventHandle, false);
} elseif (elem.attachEvent) {
elem.attachEvent("on" + type, eventHandle);
} else {
elem["on" + type] = eventHandle;
}
};
functionresponsive() {
var w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
for (var i = 0; i < breakpoints.length; i++) {
if (breakpoints[i][0] == "max-width") {
if (w <= breakpoints[i][1]) {
addClass(document.getElementById(id), breakpoints[i][2]);
}
else {
removeClass(document.getElementById(id), breakpoints[i][2]);
}
}
elseif (breakpoints[i][0] == "min-width") {
if (w >= breakpoints[i][1]) {
addClass(document.getElementById(id), breakpoints[i][2]);
}
else {
removeClass(document.getElementById(id), breakpoints[i][2]);
}
}
}
}
var resizeTimeoutId;
functionresized() {
window.clearTimeout(resizeTimeoutId);
resizeTimeoutId = window.setTimeout('responsive();', 10);
}
var id = "body";
var breakpoints = [["max-width", 630, "max630"], ["min-width", 1890, "min1890"]];
addEvent(window, "resize", resized);
responsive();
</script>
Post a Comment for "Best Solution/framework To Responsive Design For Ie7"