To jest dwuczęściowe pytanie:
Jak ustawić modal pionowo w środku, gdy nie znasz dokładnej wysokości modalu?
Czy możliwe jest wyśrodkowanie modalu i przepełnienie: auto w ciele modalnym, ale tylko wtedy, gdy modal przekroczy wysokość ekranu?
Próbowałem użyć tego:
.modal-dialog {
height: 80% !important;
padding-top:10%;
}
.modal-content {
height: 100% !important;
overflow:visible;
}
.modal-body {
height: 80%;
overflow: auto;
}
Daje mi to wynik, którego potrzebuję, gdy zawartość jest znacznie większa niż pionowy rozmiar ekranu, ale w przypadku małych treści modalnych jest to praktycznie bezużyteczne.
css
twitter-bootstrap
modal-dialog
center
hulajnoga
źródło
źródło
Odpowiedzi:
I dostosuj trochę klasę .fade, aby upewnić się, że pojawia się poza górną ramką okna, a nie na środku
źródło
1. Jak ustawić modal pionowo w środku, gdy nie znasz dokładnej wysokości modalu?
Aby absolutnie wyśrodkować moduł Bootstrap 3 Modal bez deklarowania wysokości, najpierw musisz zastąpić CSS programu Bootstrap, dodając go do arkusza stylów:Spowoduje to umieszczenie modalnego okna dialogowego w lewym górnym rogu na środku okna.
Musimy dodać tę kwerendę medialną, w przeciwnym razie margines modalny-lewy jest nieprawidłowy na małych urządzeniach:
Teraz będziemy musieli dostosować jego pozycję za pomocą JavaScript. W tym celu dajemy elementowi ujemny górny i lewy margines równy połowie jego wysokości i szerokości. W tym przykładzie użyjemy jQuery, ponieważ jest on dostępny z Bootstrap.
Aktualizacja (01/10/2015):
Dodanie do odpowiedzi Finika . Kredyty na centrowanie w nieznanym .
Zwróć uwagę na ujemny margines, prawda? Usuwa to przestrzeń dodaną przez blok wbudowany. Ta przestrzeń powoduje, że modal przeskakuje na dół strony @media szerokość <768px.
2. Czy możliwe jest wyśrodkowanie modalu i przepełnienie: auto w ciele modalnym, ale tylko wtedy, gdy modal przekroczy wysokość ekranu?
Jest to możliwe poprzez nadanie modułowi modalnemu przelewu-y: auto i maksymalnej wysokości. To wymaga nieco więcej pracy, aby działało poprawnie. Zacznij od dodania tego do swojego arkusza stylów:Użyjemy jQuery ponownie, aby uzyskać wysokość okna i najpierw ustawić maksymalną wysokość zawartości modalnej. Następnie musimy ustawić maksymalną wysokość ciała modalnego, odejmując zawartość modalną za pomocą nagłówka modalnego i stopki modalnej:
Możesz znaleźć działające demo tutaj z Bootstrap 3.0.3: http://cdpn.io/GwvrJEDYCJA: Zalecam użycie zamiast tego zaktualizowanej wersji dla bardziej responsywnego rozwiązania: http://cdpn.io/mKfCcAktualizacja (30.11.2015):
(Zaktualizowano 30.11.2015 http://cdpn.io/mKfCc z powyższą edycją)
źródło
Moje rozwiązanie
źródło
Można to po prostu naprawić
display: flex
Z prefiksem
źródło
Wymyśliłem czyste rozwiązanie css! Jest to jednak css3, co oznacza, że ie8 lub niższy nie jest obsługiwany, ale poza tym jest testowany i działa na iOS, Android, tj. 9 +, Chrome, Firefox, Safari na pulpicie ..
Korzystam z następującego css:
Oto skrzypce. http://codepen.io/anon/pen/Hiskj
.. wybierając to jako poprawną odpowiedź, ponieważ nie ma dodatkowego ciężkiego javascript, który rzuca przeglądarkę na kolana w przypadku więcej niż jednego modalu.
źródło
Jeśli nie masz nic przeciwko korzystaniu z Flexboksa, powinno to pomóc w jego rozwiązaniu.
źródło
pointer-events: none
do.modal-dialog
ipointer-events: auto
do.modal-content
. Becausu.modal-dialog {height: 100%}
obejmuje całą kolumnę powyżej i poniżej modalu i uniemożliwia użytkownikom klikanie tła w tym obszarze.Moje rozwiązanie:
źródło
Wszystko, co zrobiłem w moim przypadku, to ustawić Top w moim css, znając wysokość modalu
<div id="myModal" class="modal fade"> ... </div>
w moim css ustawiłem
źródło
Dodanie tego prostego css również działa.
źródło
Jest to najprostszy sposób, aby to zrobić za pomocą css:
Otóż to. Zauważ, że należy go zastosować tylko do
.modal-dialog
div kontenera.Demo: https://jsfiddle.net/darioferrer/0ueu4dmy/
źródło
Rozszerzając doskonałą odpowiedź @ Finik, ta poprawka jest stosowana tylko do urządzeń innych niż mobilne. Testowałem w IE8, Chrome i Firefox 22 - działa z bardzo długą lub krótką zawartością.
źródło
Najbardziej uniwersalne rozwiązanie, które napisałem. Dynamicznie oblicza z wysokością okna dialogowego. (Kolejnym krokiem może być ponowne obliczenie wysokości okien dialogowych przy zmianie rozmiaru okna).
JSfiddle: http://jsfiddle.net/8Fvg9/3/
źródło
Znajdź idealne rozwiązanie stąd
źródło
źródło
@$modal = $('.fade.in'); modalBox = @$modal.find('.modal-content'); initModalHeight = modalBox.outerHeight(); userScreenHeight = @$modal.outerHeight()
Oto jeszcze jedna metoda, która działa całkiem dobrze i jest oparta na tym: http://zerosixthree.se/vertical-align-anything-with-just-3-lines-of-css/
sass:
źródło
transform
rozwiązań, problem pojawia się, gdy modal ma przewijalną zawartość (więcej treści niż mieści się w oknie)pobrałem bootstrap3-dialog z poniższego linku i zmodyfikowałem funkcję open w bootstrap-dialog.js
https://github.com/nakupanda/bootstrap3-dialog
Kod
Css
źródło
To działa dla mnie:
źródło
Wypróbuj coś takiego:
źródło
Możesz sprawdzić tę kolekcję metod absolutnego centrowania div: http://codepen.io/shshaw/full/gEiDt
źródło
Prosty sposób. Pracuj dla mnie. Thks rensdenobel :) http://jsfiddle.net/rensdenobel/sRmLV/13/
źródło
jeszcze inne rozwiązanie, które ustawi prawidłową pozycję dla każdego widocznego modalu na
window.resize
zdarzenie i nashow.bs.modal
:źródło
źródło
Wiem, że jest trochę za późno, ale dodaję nową odpowiedź, aby nie zgubić się w tłumie. Jest to przeglądarka na wiele urządzeń mobilnych, która działa wszędzie tak, jak powinna.
Po prostu musi
modal-dialog
być zapakowany wmodal-dialog-wrap
klasę i musi mieć następujące dodatki kodu:Okno dialogowe zaczyna się na środku, aw przypadku dużej zawartości rośnie po prostu pionowo, aż pojawi się pasek przewijania.
Oto działające skrzypce dla twojej przyjemności!
https://jsfiddle.net/v6u82mvu/1/
źródło
Jest to dość stary i konkretnie prosi o rozwiązanie za pomocą Bootstrap 3, ale dla każdego, kto się zastanawia: od Bootstrap 4 jest wbudowane rozwiązanie o nazwie
.modal-dialog-centered
. Oto problem: https://github.com/twbs/bootstrap/issues/23638Więc za pomocą v4 wystarczy dodać
.modal-dialog-centered
do.modal-dialog
pionowo wyśrodkować modalne:źródło
Rozważ użycie wtyczki bootstrap-modal tutaj - https://github.com/jschr/bootstrap-modal
Wtyczka wyśrodkuje wszystkie twoje moduły
źródło
Do centrowania nie rozumiem zbyt skomplikowanych rozwiązań. bootstrap już wyśrodkowuje go dla Ciebie poziomo, więc nie musisz z tym bałaganu. Moje rozwiązanie ma właśnie ustawić górny margines tylko przy użyciu jQuery.
Użyłem zdarzenia load.bs.modal, ponieważ ładuję zawartość zdalnie, a użycie zdarzenia pokazanego na stronie.ba.modal powoduje nieprawidłowe obliczenie wysokości. Możesz oczywiście dodać zdarzenie do zmiany rozmiaru okna, jeśli potrzebujesz, aby było tak responsywne.
źródło
Bardzo, bardzo łatwy sposób na osiągnięcie tego pomysłu, a modalny będzie zawsze dostępny w moddle ekranu przez css jako fllow: http://jsfiddle.net/jy0zc2jc/1/
musisz po prostu
modal
wyświetlić klasę jako tabelę, wykonując następujące polecenie css:i
modal-dialog
jakdisplay:table-cell
patrz pełny przykład roboczy w danym skrzypcach
źródło
to nie jest takie skomplikowane.
spróbuj tego:
źródło
Użyj tego prostego skryptu, który wyśrodkuje modale.
Jeśli chcesz, możesz ustawić niestandardową klasę (np. .Modal.modal-vcenter zamiast .modal), aby ograniczyć funkcjonalność tylko do niektórych modów.
Dodaj również tę poprawkę CSS dla poziomych odstępów modalu; pokazujemy zwój na modach, przewijanie ciała jest automatycznie ukryte przez Bootstrap:
źródło
W mobilnej formie może wyglądać trochę inaczej, oto mój kod.
źródło