Mise à jour 5 : .css(propriété) fixe Des plugins comme fancyBox utiliser .css('margin-right')
pour récupérer la marge droite d'un élément et .css('margin-right', '12px')
pour définir la marge droite d'un élément. Ceci était cassé, car il n'y avait pas de vérification si props
est une chaîne de caractères et s'il y a plusieurs arguments donnés. Je l'ai corrigé en vérifiant si props
est une chaîne de caractères. Si c'est le cas et qu'il y a plusieurs arguments, arguments est réécrit en un objet, sinon parseProps( $.extend( {}, props ) )
n'est pas utilisé.
Mise à jour 4 : Plugin pour les mises en page réactives https://github.com/elclanrs/jquery.columns (en cours de réalisation)
J'ai fait un (long) essai. Tout d'abord, voici l'exemple CSS : http://jsbin.com/orajac/1/edit#css . (redimensionner le panneau de sortie). Notez que le font-size
ne fonctionne pas avec les unités d'affichage, du moins sur la dernière version de Chrome.
Et voici ma tentative de faire cela avec jQuery. La démo de jQuery qui fonctionne aussi avec la police est à http://jsbin.com/izosuy/1/edit#javascript . Je ne l'ai pas testé de manière approfondie mais cela semble fonctionner avec la plupart des propriétés puisqu'il s'agit simplement de convertir les valeurs en pixel et ensuite d'appeler le plugin sur window.resize
il ne cesse de se mettre à jour.
Mise à jour : Code mis à jour pour fonctionner avec de nombreux navigateurs. Testez localement si vous utilisez autre chose que Chrome car jsBin se comporte un peu bizarrement avec window.resize
.
Mise à jour 2 : Élargir le champ d'application de la norme css
méthode.
Mise à jour 3 : Gestion de l'événement window.resize à l'intérieur du plugin, de sorte que l'intégration est maintenant transparente.
L'essentiel (à tester localement) : https://gist.github.com/4341016
/*
* CSS viewport units with jQuery
* http://www.w3.org/TR/css3-values/#viewport-relative-lengths
*/
;(function( $, window ){
var $win = $(window)
, _css = $.fn.css;
function viewportToPixel( val ) {
var percent = val.match(/[\d.]+/)[0] / 100
, unit = val.match(/[vwh]+/)[0];
return (unit == 'vh' ? $win.height() : $win.width()) * percent +'px';
}
function parseProps( props ) {
var p, prop;
for ( p in props ) {
prop = props[ p ];
if ( /[vwh]$/.test( prop ) ) {
props[ p ] = viewportToPixel( prop );
}
}
return props;
}
$.fn.css = function( props ) {
var self = this
, originalArguments = arguments
, update = function() {
if ( typeof props === 'string' || props instanceof String ) {
if (originalArguments.length > 1) {
var argumentsObject = {};
argumentsObject[originalArguments[0]] = originalArguments[1];
return _css.call(self, parseProps($.extend({}, argumentsObject)));
} else {
return _css.call( self, props );
}
} else {
return _css.call( self, parseProps( $.extend( {}, props ) ) );
}
};
$win.resize( update ).resize();
return update();
};
}( jQuery, window ));
// Usage:
$('div').css({
height: '50vh',
width: '50vw',
marginTop: '25vh',
marginLeft: '25vw',
fontSize: '10vw'
});
0 votes
Ce qui s'en rapproche le plus, c'est un polyfill pour l'interface utilisateur de l'UE.
rem
unités -- github.com/chuckcarpenter/REM-unit-polyfill . Je n'ai pas pu en trouver un pourvh
/vw
mais étant donné que lerem
il en existe un, j'imagine que c'est possible.0 votes
Et celui-là pourrait être utile à regarder aussi -- github.com/heygrady/Units -- Je vois qu'il mentionne
vh
/vw
dans la documentation. Je ne pense pas que ce soit le polyfill direct que vous voulez cependant.3 votes
Voici une question de 10.9k éditée par une de 19.2k, répondue par une de 15.4k aaaaah
3 votes
@Ben Battle of the giants ( :
0 votes
Vous pouvez utiliser l'une ou l'autre de ces unités de manière interchangeable, mais il s'agit respectivement d'un pourcentage de la hauteur et de la largeur de la fenêtre d'affichage, il faut donc faire attention.
1 votes
Il m'a fallu un certain temps, j'ai été accroché à cette question, un grand défi.
2 votes
@Ben : Retagged par un 140k. Désolé, j'étais extrêmement gêné par les tags :)
0 votes
J'ai fait quelques mises à jour de ma réponse, elle fonctionne maintenant de manière transparente puisqu'elle étend le système natif de l'entreprise.
css
et gère le redimensionnement à l'intérieur du plugin.1 votes
Si quelqu'un est toujours intéressé, j'ai créé un plugin de grille qui fonctionne déjà très bien. Si vous voulez l'essayer, c'est ici. github.com/elclanrs/jquery.columns