Używam frameworka bootstrap i parse, aby zbudować małą aplikację internetową. Ale te modały Bootstrap dodają wyściółkę do ciała po zamknięciu. Jak to rozwiązać?
Próbowałem umieścić ten kod w moim javascript:
$('.modal').on('hide.bs.modal', function (e) {
$("element.style").css("padding-right","0");
});
Ale to nie działa. Czy ktoś wie, jak to naprawić?
Mój kod:
<button type="button" class="btn btn-lg btn-default" data-toggle="modal" data-target="#loginModal">Admin panel</button>
<div id="loginModal" class="modal fade" role="dialog">
<div class="modal-dialog modal-sm">
<!-- Modal content -->
<div class="modal-content">
<!-- header -->
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Login</h4>
</div>
<!-- body -->
<div class="modal-body text-center" >
<input class='form-control' type="text" id="userName" placeholder="Username" ng-model='username'>
<input class='form-control' type="password" id="password" placeholder="Password" ng-model='password'>
<div class="modal-footer">
<button type="button" class="btn btn-default" id="loginButton" ng-click="goToAdminPanel()">Login</button>
<button type="button" class="btn btn-default" data-dismiss="modal" id="closeButton">Close</button>
</div>
</div>
</div>
</div>
</div>
<div id="adminPanel" class="modal fade" role="dialog">
<div class="modal-dialog modal-lg">
<!-- Modal content -->
<div class="modal-content">
<!-- header -->
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Admin Panel</h4>
</div>
<!-- body -->
<div class="modal-body" >
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" id="saveButton">Save</button>
<button type="button" class="btn btn-default" data-dismiss="modal" id="closeButton">Close</button>
</div>
</div>
</div>
</div>
$scope.goToAdminPanel = function(){
Parse.User.logIn($scope.username,$scope.password,{
success: function(user){
$('#loginModal').modal('hide');
$('#adminPanel').modal();
},
error: function(user, error) {
alert('Wrong username and/or password');
}
});
}
Używam frameworka bootstrap i parse, aby zbudować małą aplikację internetową. Ale te modały Bootstrap dodają wyściółkę do ciała po zamknięciu. Jak to rozwiązać?
javascript
jquery
html
css
twitter-bootstrap
phuwin
źródło
źródło
padding-right
, ale również dodać klasę jakmodal-open
dlaoverflow: hidden
jej tylko za ukrywanie zwój-bar .modal-open
zpadding-right:0 !important;
ale to nie działa, wiesz dlaczego?padding-right
aktualizacji właściwości CSS na prawidłowe imprezy, ale jesteś wypalania go na niewłaściwym elementu. Należy go odpalić nabody
elemencie. Proszę sprawdzić moją odpowiedź poniżej.Odpowiedzi:
To może być usterka modalu Bootstrap. Z moich testów wynika, że problem polega na tym, że
#adminPanel
jest inicjowany,#loginModal
ale nie został jeszcze całkowicie zamknięty. Rozwiązaniem może być usunięcie animacji przez usunięciefade
klasy#adminPanel
i#loginModal
ustawienie limitu czasu (~ 500 ms) przed wywołaniem$('#adminPanel').modal();
. Mam nadzieję że to pomoże.źródło
.fade
z#loginModal
i działa.Właśnie skorzystałem z poniższej poprawki css i działa ona dla mnie
źródło
hide.bs.modal
uruchomiona w zdarzeniu bootstrap. Proszę sprawdzić moją odpowiedź poniżej.Właśnie zmieniono na
źródło
modal
panel, jak ibody.modal-open
wyściółka. Ale to naprawiło to po prostu ładnieCzyste rozwiązanie CSS, które zachowuje funkcjonalność ładowania początkowego tak, jak powinna.
Problem jest spowodowany funkcją w bootstrap jQuery, która dodaje trochę dopełnienia - w prawo, gdy otwiera się okno modalne, jeśli na stronie znajduje się pasek przewijania. To zapobiega przesuwaniu się zawartości ciała, gdy otwiera się modal, i jest to fajna funkcja. Ale to powoduje ten błąd.
Wiele innych podanych tutaj rozwiązań przerywa tę funkcję i sprawia, że zawartość nieznacznie się zmienia w momencie otwarcia modalu. To rozwiązanie zachowa funkcję modalu bootstrap bez przesuwania zawartości, ale naprawi błąd.
źródło
Jeśli bardziej martwisz się
padding-right
powiązaną rzeczą, możesz to zrobićjQuery :
to będzie
addClass
do ciebie,body
a następnie używając tegoCSS :
a to pomoże ci się pozbyć
padding-right
.Ale jeśli obawiasz się również ukrywania,
scroll
musisz też dodać to:CSS :
Oto JSFiddle
Proszę spojrzeć, to załatwi sprawę.
źródło
padding-right
siębody
i zwiększa ilośćpadding-right
przez 15px każdym razem, kiedy zamknąć panel administratora.$(document).ready(function(){
próby umieszczenia w nim twojego kodu .Po prostu otwórz bootstrap.min.css
Znajdź tę linię (domyślnie)
i zmień go jako
Będzie działać dla każdego modalu witryny. Możesz zrobić przepełnienie: auto; jeśli chcesz zachować pasek przewijania bez zmian podczas otwierania okna modalnego.
źródło
Miałem ten sam problem przez BARDZO długi czas. Żadna z odpowiedzi tutaj nie zadziałała! Ale następujące rozwiązania to naprawiły!
Są dwa zdarzenia, które uruchamiają się po zamknięciu modalu, najpierw to
hide.bs.modal
, a potem tohidden.bs.modal
. Powinieneś móc użyć tylko jednego.źródło
hide.bs.modal
ihidden.bs.modal
. Ale działało idealnie, gdy odsunąłem sięhide.bs.modal
od słuchacza. :)łatwa naprawa
dodaj tę klasę
To przesłonięcie, ale działa
źródło
Właśnie usunąłem
fade
klasę i zmieniłem efekt zanikania klasy za pomocąanimation.css
. Mam nadzieję, że to pomoże.źródło
removeAttr nie zadziała, będziesz musiał usunąć właściwość CSS w następujący sposób:
Bez wartości właściwości właściwość jest usuwana.
źródło
Ładuję domyślny plik CSS bootstrap 3.3.0 i miałem podobny problem. Rozwiązany przez dodanie tego CSS:
body.modal-open { overflow:inherit; padding-right:inherit !important;
}Jest to ważne, ponieważ modalny javascript bootstrap dodaje 15 pikseli dopełnienia po prawej stronie programowo. Domyślam się, że ma to na celu skompensowanie paska przewijania, ale tego nie chcę.
źródło
Z Bootstrap 4 to zadziałało dla mnie:
źródło
Mam ten sam problem z Bootstrapem 3.3.7 i moim rozwiązaniem dla stałego paska nawigacyjnego: Dodanie tego stylu do niestandardowego css.
sprawi, że twój modal zostanie pokazany, podczas gdy okno przewijania nadal działa. dzięki, mam nadzieję, że to też ci pomoże
źródło
Wiem, że to stare pytanie, ale żadna z odpowiedzi z tego miejsca nie usunęła problemu w podobnych sytuacjach i pomyślałem, że niektórzy deweloperzy również powinni przeczytać moje rozwiązanie.
Używam, aby dodać CSS do ciała, gdy modal jest otwarty, na stronach internetowych, gdzie nadal jest używany bootstrap 3.
źródło
Moje rozwiązanie nie wymaga dodatkowego CSS.
Jak wskazał @Orland, jedno wydarzenie nadal ma miejsce, gdy zaczyna się drugie. Moje rozwiązanie polega na rozpoczęciu drugiego zdarzenia (pokazanie
adminPanel
modalu) dopiero po zakończeniu pierwszego (ukrycieloginModal
modalu).Możesz to osiągnąć, dołączając odbiornik do
hidden.bs.modal
zdarzenia swojegologinModal
modalu, jak poniżej:W razie potrzeby po prostu ukryj
loginModal
modal.Oczywiście możesz zaimplementować własną logikę wewnątrz słuchacza, aby zdecydować, czy pokazać
adminPanel
modalne, czy nie .Więcej informacji o zdarzeniach modalnych Bootstrap można znaleźć tutaj .
Powodzenia.
źródło
Modele Bootstrap dodają to wypełnienie - bezpośrednio do ciała, jeśli ciało jest przepełnione.
W bootstrap 3.3.6 (wersja, której używam) jest to funkcja odpowiedzialna za dodanie tego dopełnienia w prawo do elementu body: https://github.com/twbs/bootstrap/blob/v3.3.6/dist/js /bootstrap.js#L1180
Szybkim obejściem jest po prostu nadpisanie tej funkcji po wywołaniu pliku bootstrap.js:
To rozwiązało problem.
źródło
źródło
Oto, co zadziałało dla mnie:
źródło
Po prostu usuń przycisk
data-target
z przycisku i załaduj modal za pomocą jQuery.jQuery:
źródło
Zagłębiłem się w javascript bootstrap i odkryłem, że kod modalny ustawia właściwe wypełnienie w wywołanej funkcji,
adjustDialog()
która jest zdefiniowana w prototypie Modal i ujawniona w jQuery. Umieszczenie poniższego kodu gdzieś w celu przesłonięcia tej funkcji, aby nic nie zrobiło, załatwiło mi sprawę (chociaż nie wiem, jakie są konsekwencje niepodjęcia tego ustawienia !!)$.fn.modal.Constructor.prototype.adjustDialog = function () { };
źródło
To może rozwiązać problem
źródło
Jest to błąd ładowania początkowego i naprawiony w wersji v4-dev: https://github.com/twbs/bootstrap/pull/18441 do tego czasu powinno pomóc dodanie poniższej klasy CSS.
źródło
Miałem ten sam problem przy użyciu modali i ajax. Było tak, ponieważ plik JS był odwoływany dwukrotnie, zarówno na pierwszej stronie, jak i na stronie wywoływanej przez ajax, więc kiedy modal został zamknięty, wywołał zdarzenie JS dwukrotnie, co domyślnie dodaje dopełnienie o 17 pikseli.
źródło
Pracował dla mnie. Zwróć uwagę, że pasek przewijania jest wymuszony w treści - ale jeśli i tak masz stronę „przewijaną”, nie ma to znaczenia (?)
źródło
Spróbuj tego
Doda wypełnienie po prawej stronie 0px do ciała po zamknięciu modalnym.
źródło
Występuje, gdy otwierasz modal, że poprzedni modal nie jest jeszcze całkowicie zamknięty. Aby to naprawić, po prostu otwórz nowy modal w momencie, gdy wszystkie modalne są całkowicie zamknięte, sprawdź kody poniżej:
źródło
Teraz to jest stare i wszystkie oferowane tutaj rozwiązania mogą działać. Po prostu dodaję coś nowego na wypadek, gdyby ktoś mógł pomóc: miałem ten sam problem i zauważyłem, że otwarcie modalu było dodaniem prawa do marginesu do mojego sidenav (prawdopodobnie rodzaj dziedziczenia z wypełnienia dodanego do ciała). Dodanie {margin-right: 0! Important;} do mojego sidenava załatwiło sprawę.
źródło
(Bootstrap v3.3.7) Z inspektora mojej przeglądarki zauważyłem, że jest to bezpośrednio ustawione we właściwości stylu elementu , co zastępuje właściwości klasy.
Próbowałem `` zresetować '' wartość paddig-right, gdy modal jest wyświetlany z:
Ale wraca, gdy tylko zmieni się rozmiar okna :( (prawdopodobnie ze skryptu pluggin).
To rozwiązanie zadziałało dla mnie:
źródło
Jak mówi @Orland, jeśli używasz jakiegoś efektu, takiego jak zanikanie, musimy poczekać przed wyświetleniem modalu, jest to trochę hacky, ale załatwi sprawę.
źródło
Mam nadzieję, że nadal jest ktoś, kto potrzebuje tej odpowiedzi. W bootstrap.js znajduje się funkcja o nazwie resetScrollbar (), z jakiegoś głupiego powodu programiści zdecydowali się dodać wymiary paska przewijania do prawego dopełnienia ciała. więc technicznie rzecz biorąc, jeśli po prostu ustawisz dopełnienie w prawo na pusty ciąg, rozwiąże to problem
źródło