To bardziej pytanie CSS niż pytanie jQuery. Możesz użyć metod jQuery, które pomogą Ci znaleźć pozycjonowanie w różnych przeglądarkach i zastosować odpowiednie style CSS do elementu, ale istotą pytania jest, jak wyśrodkować div na ekranie za pomocą CSS.
Jeśli centrujesz div na ekranie, być może korzystasz z pozycjonowania FIXED. Dlaczego nie po prostu to zrobić: stackoverflow.com/questions/2005954/... . Rozwiązaniem jest czysty CSS, nie wymaga javascript.
Ardee Aram
Zgadzam się, metoda JavaScript wcale nie jest tak przyjazna. Szczególnie w różnych przeglądarkach.
Simon Hayter
Odpowiedzi:
1070
Lubię dodawać funkcje do jQuery, aby ta funkcja pomogła:
Jedną zmianę zasugerowałem: Powinieneś użyć this.outerHeight () i this.outerWidth () zamiast tylko this.height () i this.width (). W przeciwnym razie, jeśli obiekt ma obramowanie lub wypełnienie, skończy się to nieco poza środkiem.
Trevor Burnham,
82
Dlaczego nie jest to natywna część funkcjonalności jQuery?
Seth Carnegie,
14
Co zrobić, jeśli nie chcę wyśrodkowywać w zawierającym <div>zamiast <body>? Może należy zmienić window, aby this.parent()lub dodać parametr dla niego.
Derek 朕 會 功夫
13
Kod w odpowiedzi powinien używać „position: fixed”, ponieważ „bezwzględny” jest obliczany od pierwszego względnego rodzica, a kod używa okna do obliczenia środka.
Diego
2
Sugerowałbym również dodanie obsługi, aby po zmianie rozmiaru okna dopasowywał element na stronie. Obecnie zachowuje oryginalne wymiary.
(function($){
$.fn.extend({
center:function(){returnthis.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);
Aktywowane przez ten kod:
$('#mainDiv').center();
WERSJA WTYCZKI
(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);returnthis.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);
Twoja funkcja działała idealnie w przypadku centrum pionowego. Wygląda na to, że nie działa w przypadku poziomego środka.
Halsafar
CSS zakłada, że znasz rozmiar (przynajmniej wartości procentowe) wyśrodkowanego div, podczas gdy jQuery działa cokolwiek.
Dunc
Mój głos to CSS - o wiele prostszy i nie wymaga żadnego wymyślnego skryptu Java. Jeśli użyjesz stałej zamiast absolutnej, pozostanie ona na środku strony, nawet gdy użytkownik przewinie okno przeglądarki
@Timwi - Czy na pewno koncentrujesz się na oknie zamiast dokumentu?
keithhackbarth
1
TypeError: $ (...). Pozycja nie jest funkcją
Michał Anioł
3
@Michelangelo: Potrzebujesz biblioteki jqueryUI, aby użyć funkcji .position () jako funkcji. Sprawdź: api.jqueryui.com/position/
jake
Ten fragment jest najlepszy: D. Ale ostrzegaj, że element musi być „widoczny”.
Cԃ ա ԃ
39
Oto mój wybór. Skończyło się to na moim klonie Lightbox. Główną zaletą tego rozwiązania jest to, że element pozostanie automatycznie wyśrodkowany nawet po zmianie rozmiaru okna, co czyni go idealnym do tego rodzaju użytkowania.
Myślę, że to działa dobrze ... w moim przypadku poszło nie tak z powodu responsywnego projektu: szerokość mojego div zmienia się wraz ze zmianą szerokości ekranu. To, co działa idealnie, to odpowiedź Tony'ego L, a następnie dodanie tego: $(window).resize(function(){$('#mydiv').center()}); (mydiv to modalne okno dialogowe, więc kiedy jest zamknięte, usuwam moduł obsługi zdarzenia zmiany rozmiaru).
Darren Cook
1
Czasami możesz chcieć użyć outerWidth()i outerHeight()rozważyć wypełnienie i szerokość obramowania.
Philippe Gerber
Działa to idealnie dla mnie w starszym projekcie z dokumentem typu 5, gdzie $(window).height()daje 0. Ale zmieniłem pozycję na „absolutną”.
.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*/}
Pamiętaj, że calc () nie jest obsługiwany w IE8, jeśli potrzebujesz obsługiwać przeglądarkę korzystającą ze strategii centrum jquery.
mbokil
14
Rozwijam świetną odpowiedź udzieloną przez @TonyL. Dodaję Math.abs (), aby zawinąć wartości, a także biorę pod uwagę, że jQuery może być w trybie „bez konfliktu”, jak na przykład w WordPress.
Zalecam zawijanie górnych i lewych wartości Math.abs (), jak to zrobiłem poniżej. Jeśli okno jest zbyt małe, a okno modalne ma zamknięte okno u góry, zapobiegnie to problemowi, że okno nie jest widoczne. Funkcja Tony'ego miałaby potencjalnie wartości ujemne. Dobrym przykładem tego, jak skończysz z wartościami ujemnymi, jest posiadanie dużego, wyśrodkowanego okna dialogowego, ale użytkownik końcowy zainstalował kilka pasków narzędzi i / lub zwiększył domyślną czcionkę - w takim przypadku zamknij okno w oknie dialogowym modalnym (jeśli u góry) może nie być widoczny i można go kliknąć.
Inną rzeczą, którą robię, jest nieco przyspieszając, buforując obiekt $ (window), aby ograniczyć dodatkowe przejścia DOM i używać CSS klastra.
jQuery.fn.center =function($){var w = $(window);this.css({'position':'absolute','top':Math.abs(((w.height()-this.outerHeight())/2)+ w.scrollTop()),'left':Math.abs(((w.width()-this.outerWidth())/2)+ w.scrollLeft())});returnthis;}
Lubię twoje ulepszenia; Jednak nadal istnieje jeden problem, który zależy od dokładnie tego, czego szukasz. Brzuch będzie działał świetnie tylko wtedy, gdy użytkownik zostanie całkowicie przewinięty w górę i w lewo, w przeciwnym razie użytkownik będzie musiał przewinąć okno przeglądarki, aby przejść do paska tytułu. Aby rozwiązać ten problem, zdecydowałem się wykonać prostą instrukcję if, taką jak ta: if (top < w.scrollTop()) top = w.scrollTop();wraz z odpowiednikiem dla left. Ponownie zapewnia to inne zachowanie, które może być pożądane lub nie.
<div id="test" style="position:absolute;background-color:blue;color:white">
test div to center in window
</div>
Jeśli mam div z identyfikatorem „test” do wyśrodkowania, poniższy skrypt wyśrodkuje div w oknie na gotowym dokumencie. (wartości domyślne „my” i „at” w opcjach pozycji to „środek”)
Powyższy kod nie będzie działał w przypadkach, gdy this.height(załóżmy, że użytkownik zmienia rozmiar ekranu, a treść jest dynamiczna) i na scrollTop() = 0przykład:
Nie sądzę, aby pozycja absolutna była najlepsza, jeśli chcesz, aby element zawsze był wyśrodkowany na środku strony. Prawdopodobnie potrzebujesz stałego elementu. Znalazłem inną wtyczkę centrowania jquery, która używała stałego pozycjonowania. Nazywa się to stałym centrum .
Element przejściowy tej funkcji działał dla mnie bardzo źle w Chrome (nie testowałem gdzie indziej). Zmieniłem rozmiar okna o kilka, a mój element trochę jakby się przesuwał, próbując go dogonić.
Więc następująca funkcja komentuje to. Ponadto dodałem parametry przekazywania opcjonalnych boolanów x&y, jeśli chcesz wyśrodkować w pionie, ale nie w poziomie, na przykład:
// Center an element on the screen(function($){
$.fn.extend({
center:function(x,y){// var options = $.extend({transition:300, minX:0, minY:0}, options);returnthis.each(function(){if(x ==undefined){
x =true;}if(y ==undefined){
y =true;}var $this = $(this);var $window = $(window);
$this.css({
position:"absolute",});if(x){var left =($window.width()- $this.outerWidth())/2+$window.scrollLeft();
$this.css('left',left)}if(!y ==false){var top =($window.height()- $this.outerHeight())/2+$window.scrollTop();
$this.css('top',top);}// $(this).animate({// top: (top > options.minY ? top : options.minY)+'px',// left: (left > options.minX ? left : options.minX)+'px'// }, options.transition);return $(this);});}});})(jQuery);
Aby wyśrodkować element względem okienka przeglądarki (okna), nie używaj position: absolute, poprawna wartość pozycji powinna wynosićfixed (absolutnie oznacza: „Element jest pozycjonowany względem pierwszego pozycjonowanego (niestatycznego) elementu przodka”).
Ta alternatywna wersja proponowanej wtyczki środkowej używa „%” zamiast „px”, więc po zmianie rozmiaru okna zawartość jest wyśrodkowana:
Musisz umieścić, margin: 0aby wykluczyć marginesy zawartości z szerokości / wysokości (ponieważ używamy pozycji ustalonej, marginesy nie mają sensu). Zgodnie z dokumentacją jQuery przy użyciu.outerWidth(true) powinno zawierać marginesy, ale nie działało zgodnie z oczekiwaniami, gdy próbowałem w Chrome.
50*(1-ratio)Pochodzi z:
Szerokość okna: W = 100%
Szerokość elementu (w%): w = 100 * elementWidthInPixels/windowWidthInPixels
Obliczyć lewy środek:
left = W/2- w/2=50-50* elementWidthInPixels/windowWidthInPixels ==50*(1-elementWidthInPixels/windowWidthInPixels)
if(options.transition >0){
$(this).animate(props, options.transition, callback);}else{
$(this).css(props);if(typeof callback =='function'){// make sure the callback is a function
callback.call(this);// brings the scope to the callback}}
Uruchomiłem to za pomocą przeglądarek i wydaje się, że jest w porządku; jeśli nic więcej, zachowam oryginał poniżej, aby obsłużyć procent marży zgodnie z wymaganiami CSS ujrzał światło dzienne.
Oryginalny:
Wygląda na to, że jestem spóźniony na przyjęcie!
Niektóre komentarze powyżej sugerują, że jest to pytanie CSS - oddzielenie obaw od wszystkich. Pozwolę sobie powiedzieć, że CSS naprawdę postrzelił się w tę stopę. Mam na myśli, jak łatwo byłoby to zrobić:
Dobrze? Lewy górny róg kontenera znalazłby się na środku ekranu, a przy ujemnych marginesach zawartość magicznie pojawi się ponownie w absolutnym środku strony! http://jsfiddle.net/rJPPc/
Źle! Poziome ustawienie jest w porządku, ale w pionie ... Och, rozumiem. Najwyraźniej w css, przy ustawianiu górnych marginesów w%, wartość jest obliczana jako procent zawsze w stosunku do szerokości zawierającego bloku . Jak jabłka i pomarańcze! Jeśli nie ufasz mi ani Mozilli doco, zagraj przy skrzypcach powyżej, dostosowując szerokość treści i daj się zaskoczyć.
Teraz, gdy CSS był moim chlebem i masłem, nie zamierzałem się poddawać. Jednocześnie wolę rzeczy łatwe, więc pożyczyłem ustalenia czeskiego guru CSS i sprawiłem, że stał się sprawnym skrzypkiem. Krótko mówiąc, tworzymy tabelę, w której wyrównanie pionowe jest ustawione na środku:
<tableclass="super-centered"><tr><td><divclass="content"><p>I am centered like a boss!</p></div></td></tr></table>
I wtedy pozycja treści jest dostrajana z dobrym starym marginesem: 0 auto; :
@GlitchMr: Chciałbym podwójnej kontroli na polu pracy jutro, ale drugie skrzypce pracował dobrze w Chrome / Safari Mac
ov
Tak, sprawdziłem w Chrome, Firefox i Internet Explorer 8+ (IE7 nie działa) i działa. Ale to nie działa w Operze ... i to jest bardzo dziwne, biorąc pod uwagę, że jest to prosty CSS i działa w innych przeglądarkach.
Konrad Borowski,
@GlitchMr: dzięki za pilnowanie tak starego pytania. Mam zaktualizowany skrzypcach powyższy link, aby pokazać „prawidłową” odpowiedź - daj mi znać, jeśli działa dla Ciebie (lub downvote w zapomnienie Miałem swoje szanse :).!
ov
Heh, wszystko, co zrobię, to nie poprawiać głosu, chyba że pokaże się poprawna odpowiedź (obecnie nadal nie działa w Operze, ale myślę, że to błąd przeglądarki) ... oh czekaj ... to działa, jeśli zmienię rozmiar okna, a nie jeśli zmienię rozmiar okien w samym JSFiddle. Więc to działa :). Przepraszam za to. Ale nadal powinieneś ostrzec, że to nie działa w IE7. +1. Aha, i myślę, że to działa w IE6 ...
Konrad Borowski
3
Mam tutaj metodę „centrowania”, która zapewnia, że element, który próbujesz wyśrodkować, ma nie tylko „ustalone” lub „absolutne” pozycjonowanie, ale także zapewnia, że element, którego centrujesz, jest mniejszy niż jego element nadrzędny, to centruje a element względny jest nadrzędny, jeśli element nadrzędny jest mniejszy niż sam element, splądruje DOM do następnego elementu nadrzędnego i wyśrodkuje go względem tego.
$.fn.center =function(){/// <summary>Centers a Fixed or Absolute positioned element relative to its parent</summary>var element = $(this),
elementPos = element.css('position'),
elementParent = $(element.parent()),
elementWidth = element.outerWidth(),
parentWidth = elementParent.width();if(parentWidth <= elementWidth){
elementParent = $(elementParent.parent());
parentWidth = elementParent.width();}if(elementPos ==="absolute"|| elementPos ==="fixed"){
element.css('right',(parentWidth /2)- elementWidth /2+'px');}};
$(window).resize(function(){
$('.className').css({
position:'absolute',
left:($(window).width()- $('.className').outerWidth())/2,
top:($(window).height()- $('.className').outerHeight())/2});});// To initially run the function:
$(window).resize();
masz słabe przejście, ponieważ dostosowujesz położenie elementu za każdym razem, gdy dokument jest przewijany. To, czego chcesz, to zastosować ustalone pozycjonowanie. Próbowałem tej centralnej wtyczki wymienionej powyżej i wydaje się, że to dobrze rozwiązuje problem. Stałe pozycjonowanie pozwala wyśrodkować element raz, a właściwość CSS zadba o utrzymanie tej pozycji za każdym razem, gdy przewijasz.
Czy zapomniałeś dołączyć HTML do swojej odpowiedzi?
Ben
0
MOJA AKTUALIZACJA ODPOWIEDZI TONY'A
To jest zmodyfikowana wersja jego odpowiedzi, której używam teraz religijnie. Pomyślałem, że podzielę się tym, ponieważ dodaje on nieco więcej funkcjonalności dla różnych sytuacji, na przykład różnych typówposition lub tylko chcących centrowania w poziomie / w pionie, a nie w obu przypadkach.
center.js:
// We add a pos parameter so we can specify which position type we want// Center it both horizontally and vertically (dead center)
jQuery.fn.center =function(pos){this.css("position", pos);this.css("top",($(window).height()/2)-(this.outerHeight()/2));this.css("left",($(window).width()/2)-(this.outerWidth()/2));returnthis;}// Center it horizontally only
jQuery.fn.centerHor =function(pos){this.css("position", pos);this.css("left",($(window).width()/2)-(this.outerWidth()/2));returnthis;}// Center it vertically only
jQuery.fn.centerVer =function(pos){this.css("position", pos);this.css("top",($(window).height()/2)-(this.outerHeight()/2));returnthis;}
Działa z każdym rodzajem pozycjonowania i można go łatwo używać w całej witrynie, a także łatwo przenosić na dowolną inną utworzoną witrynę. Nigdy więcej irytujących obejść dla prawidłowego centrowania czegoś.
Mam nadzieję, że jest to przydatne dla kogoś tam! Cieszyć się.
Jest na to wiele sposobów. Mój obiekt jest ukryty z wyświetlaczem: żaden tylko wewnątrz znacznika BODY, więc pozycjonowanie jest względne względem BODY. Po użyciu $ („# object_id”). Show () wywołuję $ ( "# object_id"). Centrum ()
Używam pozycji: absolutna, ponieważ możliwe jest, szczególnie na małym urządzeniu mobilnym, że okno modalne jest większe niż okno urządzenia, w którym to przypadku część zawartości modalnej może być niedostępna, jeśli pozycjonowanie zostanie naprawione.
Oto mój gust oparty na odpowiedziach innych i moich konkretnych potrzebach:
$.fn.center =function(){this.css("position","absolute");//use % so that modal window will adjust with browser resizingthis.css("top","50%");this.css("left","50%");//use negative margin to centerthis.css("margin-left",(-1*this.outerWidth()/2)+($(window).scrollLeft())+"px");this.css("margin-top",(-1*this.outerHeight()/2)+($(window).scrollTop())+"px");//catch cases where object would be offscreenif(this.offset().top<0)this.css({"top":"5px","margin-top":"0"});if(this.offset().left<0)this.css({"left":"5px","margin-left":"0"});returnthis;};
W przypadku czegoś takiego chcesz ustawić swój, left: 50%a top: 50%następnie możesz użyć translacji przekształcenia, aby poprawnie przesunąć jego punkt środkowy. Jednak dzięki tej metodzie przeglądarki takie jak Chrome później zniekształcają / rozmazują tekst, co zwykle nie jest pożądane. Lepiej jest uchwycić szerokość / wysokość okna, a następnie ustawić lewy / górny w oparciu o to, zamiast mieszać się z transformacją. Zapobiega zniekształceniom i działa w każdej przeglądarce, na której testowałem.
Fata1Err0r
0
Normalnie zrobiłbym to tylko z CSS ... ale skoro poprosiłeś cię, jak to zrobić za pomocą jQuery ...
Poniższy kod centruje div zarówno w poziomie, jak i w pionie wewnątrz kontenera:
Odpowiedzi:
Lubię dodawać funkcje do jQuery, aby ta funkcja pomogła:
Teraz możemy po prostu napisać:
Demo: skrzypce (z dodanym parametrem)
źródło
<div>
zamiast<body>
? Może należy zmienićwindow
, abythis.parent()
lub dodać parametr dla niego.Umieszczam tutaj wtyczkę jquery
BARDZO KRÓTKA WERSJA
KRÓTKA WERSJA
Aktywowane przez ten kod:
WERSJA WTYCZKI
Aktywowane przez ten kod:
czy to prawda?
AKTUALIZACJA :
Od sztuczek CSS
źródło
Polecam narzędzie jQueryUI Position
co daje znacznie więcej możliwości niż tylko centrowanie ...
źródło
Oto mój wybór. Skończyło się to na moim klonie Lightbox. Główną zaletą tego rozwiązania jest to, że element pozostanie automatycznie wyśrodkowany nawet po zmianie rozmiaru okna, co czyni go idealnym do tego rodzaju użytkowania.
źródło
$(window).resize(function(){$('#mydiv').center()});
(mydiv to modalne okno dialogowe, więc kiedy jest zamknięte, usuwam moduł obsługi zdarzenia zmiany rozmiaru).outerWidth()
iouterHeight()
rozważyć wypełnienie i szerokość obramowania.$(window).height()
daje 0. Ale zmieniłem pozycję na „absolutną”.Możesz użyć CSS samodzielnie, aby wyśrodkować:
Przykład roboczy
calc()
pozwala na wykonywanie podstawowych obliczeń w css.Dokumentacja MDN dla
calc()
tabeli obsługi przeglądarki
źródło
Rozwijam świetną odpowiedź udzieloną przez @TonyL. Dodaję Math.abs (), aby zawinąć wartości, a także biorę pod uwagę, że jQuery może być w trybie „bez konfliktu”, jak na przykład w WordPress.
Zalecam zawijanie górnych i lewych wartości Math.abs (), jak to zrobiłem poniżej. Jeśli okno jest zbyt małe, a okno modalne ma zamknięte okno u góry, zapobiegnie to problemowi, że okno nie jest widoczne. Funkcja Tony'ego miałaby potencjalnie wartości ujemne. Dobrym przykładem tego, jak skończysz z wartościami ujemnymi, jest posiadanie dużego, wyśrodkowanego okna dialogowego, ale użytkownik końcowy zainstalował kilka pasków narzędzi i / lub zwiększył domyślną czcionkę - w takim przypadku zamknij okno w oknie dialogowym modalnym (jeśli u góry) może nie być widoczny i można go kliknąć.
Inną rzeczą, którą robię, jest nieco przyspieszając, buforując obiekt $ (window), aby ograniczyć dodatkowe przejścia DOM i używać CSS klastra.
Aby użyć, zrobiłbyś coś takiego:
źródło
if (top < w.scrollTop()) top = w.scrollTop();
wraz z odpowiednikiem dla left. Ponownie zapewnia to inne zachowanie, które może być pożądane lub nie.Chciałbym użyć funkcji interfejsu użytkownika jQuery
position
.Zobacz działające demo .
Jeśli mam div z identyfikatorem „test” do wyśrodkowania, poniższy skrypt wyśrodkuje div w oknie na gotowym dokumencie. (wartości domyślne „my” i „at” w opcjach pozycji to „środek”)
źródło
Chciałbym naprawić jeden problem.
Powyższy kod nie będzie działał w przypadkach, gdy
this.height
(załóżmy, że użytkownik zmienia rozmiar ekranu, a treść jest dynamiczna) i nascrollTop() = 0
przykład:window.height
jest600
this.height
jest650
Teraz pole jest wyśrodkowane
-25
poza ekranem.źródło
To nie zostało przetestowane, ale coś takiego powinno działać.
źródło
Nie sądzę, aby pozycja absolutna była najlepsza, jeśli chcesz, aby element zawsze był wyśrodkowany na środku strony. Prawdopodobnie potrzebujesz stałego elementu. Znalazłem inną wtyczkę centrowania jquery, która używała stałego pozycjonowania. Nazywa się to stałym centrum .
źródło
Element przejściowy tej funkcji działał dla mnie bardzo źle w Chrome (nie testowałem gdzie indziej). Zmieniłem rozmiar okna o kilka, a mój element trochę jakby się przesuwał, próbując go dogonić.
Więc następująca funkcja komentuje to. Ponadto dodałem parametry przekazywania opcjonalnych boolanów x&y, jeśli chcesz wyśrodkować w pionie, ale nie w poziomie, na przykład:
źródło
Aby wyśrodkować element względem okienka przeglądarki (okna), nie używaj
position: absolute
, poprawna wartość pozycji powinna wynosićfixed
(absolutnie oznacza: „Element jest pozycjonowany względem pierwszego pozycjonowanego (niestatycznego) elementu przodka”).Ta alternatywna wersja proponowanej wtyczki środkowej używa „%” zamiast „px”, więc po zmianie rozmiaru okna zawartość jest wyśrodkowana:
Musisz umieścić,
margin: 0
aby wykluczyć marginesy zawartości z szerokości / wysokości (ponieważ używamy pozycji ustalonej, marginesy nie mają sensu). Zgodnie z dokumentacją jQuery przy użyciu.outerWidth(true)
powinno zawierać marginesy, ale nie działało zgodnie z oczekiwaniami, gdy próbowałem w Chrome.50*(1-ratio)
Pochodzi z:Szerokość okna:
W = 100%
Szerokość elementu (w%):
w = 100 * elementWidthInPixels/windowWidthInPixels
Obliczyć lewy środek:
źródło
To jest świetne. Dodałem funkcję oddzwaniania
źródło
Edytować:
Jeśli pytanie mnie czegoś nauczyło, to tak: nie zmieniaj czegoś, co już działa :)
Dostarczam (prawie) dosłownie kopię tego, jak to było obsługiwane na http://www.jakpsatweb.cz/css/css-vertical-center-solution.html - jest mocno zhakowany dla IE, ale zapewnia czysty sposób CSS odpowiadając na pytanie:
Fiddle: http://jsfiddle.net/S9upd/4/
Uruchomiłem to za pomocą przeglądarek i wydaje się, że jest w porządku; jeśli nic więcej, zachowam oryginał poniżej, aby obsłużyć procent marży zgodnie z wymaganiami CSS ujrzał światło dzienne.
Oryginalny:
Wygląda na to, że jestem spóźniony na przyjęcie!
Niektóre komentarze powyżej sugerują, że jest to pytanie CSS - oddzielenie obaw od wszystkich. Pozwolę sobie powiedzieć, że CSS naprawdę postrzelił się w tę stopę. Mam na myśli, jak łatwo byłoby to zrobić:
Dobrze? Lewy górny róg kontenera znalazłby się na środku ekranu, a przy ujemnych marginesach zawartość magicznie pojawi się ponownie w absolutnym środku strony! http://jsfiddle.net/rJPPc/
Źle! Poziome ustawienie jest w porządku, ale w pionie ... Och, rozumiem. Najwyraźniej w css, przy ustawianiu górnych marginesów w%, wartość jest obliczana jako procent zawsze w stosunku do szerokości zawierającego bloku . Jak jabłka i pomarańcze! Jeśli nie ufasz mi ani Mozilli doco, zagraj przy skrzypcach powyżej, dostosowując szerokość treści i daj się zaskoczyć.
Teraz, gdy CSS był moim chlebem i masłem, nie zamierzałem się poddawać. Jednocześnie wolę rzeczy łatwe, więc pożyczyłem ustalenia czeskiego guru CSS i sprawiłem, że stał się sprawnym skrzypkiem. Krótko mówiąc, tworzymy tabelę, w której wyrównanie pionowe jest ustawione na środku:
I wtedy pozycja treści jest dostrajana z dobrym starym marginesem: 0 auto; :
Działające skrzypce zgodnie z obietnicą: http://jsfiddle.net/teDQ2/
źródło
Mam tutaj metodę „centrowania”, która zapewnia, że element, który próbujesz wyśrodkować, ma nie tylko „ustalone” lub „absolutne” pozycjonowanie, ale także zapewnia, że element, którego centrujesz, jest mniejszy niż jego element nadrzędny, to centruje a element względny jest nadrzędny, jeśli element nadrzędny jest mniejszy niż sam element, splądruje DOM do następnego elementu nadrzędnego i wyśrodkuje go względem tego.
źródło
używam tego:
źródło
Proszę użyć tego:
źródło
masz słabe przejście, ponieważ dostosowujesz położenie elementu za każdym razem, gdy dokument jest przewijany. To, czego chcesz, to zastosować ustalone pozycjonowanie. Próbowałem tej centralnej wtyczki wymienionej powyżej i wydaje się, że to dobrze rozwiązuje problem. Stałe pozycjonowanie pozwala wyśrodkować element raz, a właściwość CSS zadba o utrzymanie tej pozycji za każdym razem, gdy przewijasz.
źródło
Oto moja wersja. Mogę to zmienić po przejrzeniu tych przykładów.
źródło
Nie potrzeba do tego jquery
Użyłem tego do wyśrodkowania elementu Div. Styl CSS,
Otwarty element
źródło
MOJA AKTUALIZACJA ODPOWIEDZI TONY'A To jest zmodyfikowana wersja jego odpowiedzi, której używam teraz religijnie. Pomyślałem, że podzielę się tym, ponieważ dodaje on nieco więcej funkcjonalności dla różnych sytuacji, na przykład różnych typów
position
lub tylko chcących centrowania w poziomie / w pionie, a nie w obu przypadkach.center.js:
W moim
<head>
:Przykłady użycia:
Działa z każdym rodzajem pozycjonowania i można go łatwo używać w całej witrynie, a także łatwo przenosić na dowolną inną utworzoną witrynę. Nigdy więcej irytujących obejść dla prawidłowego centrowania czegoś.
Mam nadzieję, że jest to przydatne dla kogoś tam! Cieszyć się.
źródło
Jest na to wiele sposobów. Mój obiekt jest ukryty z wyświetlaczem: żaden tylko wewnątrz znacznika BODY, więc pozycjonowanie jest względne względem BODY. Po użyciu $ („# object_id”). Show () wywołuję $ ( "# object_id"). Centrum ()
Używam pozycji: absolutna, ponieważ możliwe jest, szczególnie na małym urządzeniu mobilnym, że okno modalne jest większe niż okno urządzenia, w którym to przypadku część zawartości modalnej może być niedostępna, jeśli pozycjonowanie zostanie naprawione.
Oto mój gust oparty na odpowiedziach innych i moich konkretnych potrzebach:
źródło
Możesz użyć
translate
właściwości CSS :Przeczytaj ten post, aby uzyskać więcej informacji.
źródło
left: 50%
atop: 50%
następnie możesz użyć translacji przekształcenia, aby poprawnie przesunąć jego punkt środkowy. Jednak dzięki tej metodzie przeglądarki takie jak Chrome później zniekształcają / rozmazują tekst, co zwykle nie jest pożądane. Lepiej jest uchwycić szerokość / wysokość okna, a następnie ustawić lewy / górny w oparciu o to, zamiast mieszać się z transformacją. Zapobiega zniekształceniom i działa w każdej przeglądarce, na której testowałem.Normalnie zrobiłbym to tylko z CSS ... ale skoro poprosiłeś cię, jak to zrobić za pomocą jQuery ...
Poniższy kod centruje div zarówno w poziomie, jak i w pionie wewnątrz kontenera:
(zobacz także to skrzypce )
źródło
Rozwiązanie CSS Tylko w dwóch liniach
Centralizuje ona twoją wewnętrzną działkę poziomo i pionowo.
}
tylko dla wyrównania w poziomie zmień
i dla pionu, zmień
źródło
Po prostu powiedz: $ („# divID”). Html ($ (''). Html ($ („# divID”). Html ()));
źródło
Dlaczego nie używasz CSS do centrowania div?
źródło