Wie lege ich eine <div>
in der Mitte des Bildschirms mit jQuery?
Antworten
Zu viele Anzeigen?Ich mag es, Funktionen zu jQuery hinzuzufügen, daher würde diese Funktion helfen:
jQuery.fn.center = function () {
this.css("position","absolute");
this.css("top", Math.max(0, (($(window).height() - $(this).outerHeight()) / 2) +
$(window).scrollTop()) + "px");
this.css("left", Math.max(0, (($(window).width() - $(this).outerWidth()) / 2) +
$(window).scrollLeft()) + "px");
return this;
}
Jetzt können wir einfach schreiben:
$(element).center();
Demo: Fiddle (mit hinzugefügtem Parameter)
Ich habe eine Jquery-Plugin aquí
SEHR KURZE VERSION
$('#myDiv').css({top:'50%',left:'50%',margin:'-'+($('#myDiv').height() / 2)+'px 0 0 -'+($('#myDiv').width() / 2)+'px'});
KURZFASSUNG
(function($){
$.fn.extend({
center: function () {
return this.each(function() {
var top = ($(window).height() - $(this).outerHeight()) / 2;
var left = ($(window).width() - $(this).outerWidth()) / 2;
$(this).css({position:'absolute', margin:0, top: (top > 0 ? top : 0)+'px', left: (left > 0 ? left : 0)+'px'});
});
}
});
})(jQuery);
Aktiviert durch diesen Code:
$('#mainDiv').center();
PLUGIN VERSION
(function($){
$.fn.extend({
center: function (options) {
var options = $.extend({ // Default values
inside:window, // element, center into window
transition: 0, // millisecond, transition time
minX:0, // pixel, minimum left element value
minY:0, // pixel, minimum top element value
withScrolling:true, // booleen, take care of the scrollbar (scrollTop)
vertical:true, // booleen, center vertical
horizontal:true // booleen, center horizontal
}, options);
return this.each(function() {
var props = {position:'absolute'};
if (options.vertical) {
var top = ($(options.inside).height() - $(this).outerHeight()) / 2;
if (options.withScrolling) top += $(options.inside).scrollTop() || 0;
top = (top > options.minY ? top : options.minY);
$.extend(props, {top: top+'px'});
}
if (options.horizontal) {
var left = ($(options.inside).width() - $(this).outerWidth()) / 2;
if (options.withScrolling) left += $(options.inside).scrollLeft() || 0;
left = (left > options.minX ? left : options.minX);
$.extend(props, {left: left+'px'});
}
if (options.transition > 0) $(this).animate(props, options.transition);
else $(this).css(props);
return $(this);
});
}
});
})(jQuery);
Aktiviert durch diesen Code:
$(document).ready(function(){
$('#mainDiv').center();
$(window).bind('resize', function() {
$('#mainDiv').center({transition:300});
});
);
Ist das richtig?
UPDATE :
Von CSS-Tricks
.center {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%); /* Yep! */
width: 48%;
height: 59%;
}
Ich würde empfehlen jQueryUI Position Dienstprogramm
$('your-selector').position({
of: $(window)
});
was Ihnen viel mehr Möglichkeiten gibt als nur das Zentrieren ...
Hier ist mein Versuch dazu. Ich habe es schließlich für meinen Lightbox-Klon verwendet. Der Hauptvorteil dieser Lösung ist, dass das Element automatisch zentriert bleibt, auch wenn die Größe des Fensters geändert wird, wodurch es ideal für diese Art der Nutzung ist.
$.fn.center = function() {
this.css({
'position': 'fixed',
'left': '50%',
'top': '50%'
});
this.css({
'margin-left': -this.outerWidth() / 2 + 'px',
'margin-top': -this.outerHeight() / 2 + 'px'
});
return this;
}
Sie können CSS allein zum Zentrieren verwenden, etwa so:
.center{
position: absolute;
height: 50px;
width: 50px;
background:red;
top:calc(50% - 50px/2); /* height divided by 2*/
left:calc(50% - 50px/2); /* width divided by 2*/
}
<div class="center"></div>
calc()
können Sie grundlegende Berechnungen in CSS durchführen.
MDN-Dokumentation für calc()
Tabelle zur Browserunterstützung
- See previous answers
- Weitere Antworten anzeigen
21 Stimmen
Dies ist eher eine CSS-Frage als eine jQuery-Frage. Sie können jQuery-Methoden verwenden, um die browserübergreifende Positionierung zu finden und die richtigen CSS-Stile auf ein Element anzuwenden, aber der Kern der Frage ist, wie man ein div auf dem Bildschirm mit CSS zentriert.
0 Stimmen
Hier ist ein weiteres Plugin. alexandremagno.net/jquery/plugins/center
2 Stimmen
Wenn Sie ein Div auf dem Bildschirm zentrieren, verwenden Sie möglicherweise eine FIXED-Positionierung. Warum nicht einfach dies tun: stackoverflow.com/questions/2005954/ . Die Lösung ist rein CSS, erfordert kein Javascript.
0 Stimmen
Ich stimme zu, die JavaScript-Methode ist nicht besonders freundlich. Vor allem browserübergreifend.