Modal de inicialização do Twitter: Como remover o efeito Deslizar para baixo

Respostas:

359

Basta tirar o fade classe da div modal.

Altere especificamente:

<div class="modal fade hide">

para:

<div class="modal hide">

UPDATE: Para o bootstrap3, a hideclasse não é necessária.

Rose Perrone
fonte
9
Embora o OP tenha perguntado como fazê-lo desaparecer, algumas dessas respostas estão corretas para a formação alternativa da pergunta. Acho que é apenas uma pergunta ruim, porque na verdade são 2 perguntas em uma e ninguém respondeu às duas perguntas em uma resposta.
Umassthrower
1
Você não precisa modificar as fontes de inicialização. Você só precisa modificar seu html. Essa é a resposta correta.
mpccolorado
31
@umassthrower está correto. Apenas como não há transição é respondido. A questão de como desaparecer, mas não do menu suspenso, não é coberta por esta resposta.
Synesso 28/09/13
26
Eu não entendo como isso é a resposta correta ... faz o pop modal com nenhum fade e OP pediu para remover o slide, mas não o FADE ...
Shawn Taylor
2
Estou esperando para manter o desbotamento e remover o slide também, e esta resposta não é útil. É estranho que o bootstrap tenha usado sua classe fade para também lidar com o efeito slide do modal, pois o fade é totalmente separado em seu CSS.
Leeish
36

Os modais usados ​​pelo bootstrap usam CSS3 para fornecer os efeitos e podem ser removidos, eliminando as classes apropriadas dos modals container div:

<div class="modal hide fade in" id="myModal">
   ....
</div>

Como você pode ver, este modal tem uma classe de .fade, o que significa que ele está definido para desaparecer e .in, o que significa que ele deslizará. Portanto, basta remover a classe relacionada ao efeito que você deseja remover, que no seu caso é apenas a .inclasse.

Edit: Acabei de executar alguns testes e parece que esse não é o caso, a .inclasse é adicionada por javascript, embora você possa modificar o comportamento do slideDown com css da seguinte maneira:

.modal.fade {
    -webkit-transition: none;
    -moz-transition: none;
    -ms-transition: none;
    -o-transition: none;
    transition: none;
}

Demo

Andres Ilich
fonte
2
Você também deve adicioná-lo ao pano de fundo: modal.fade, .modal-backdrop.fadeetc ...
David Hellsing
provavelmente é melhor editar o arquivo component-animations.less, pelo motivo que David menciona.
27413 Peter Peterley
a classe de fade é opcional, há uma melhor (e preferido por documentação BS) resposta por Rose abaixo
umassthrower
@umassthrower, esta resposta é bastante antiga, no momento em que escrevi essa escolha não existia.
Andrés Ilich
Não tenho certeza se o comentário está correto, pois o BS 2.0 foi lançado 3 meses antes dessa resposta e removi o fade dos meus modais ao usar a v2.0 no verão passado. Talvez eles não tenham alterado a documentação até depois disso. Não sei.
Umassthrower:
30

Se você deseja que o modal desbote em vez de deslizar (por que é chamado .fadeassim mesmo?), Você pode sobrescrever a classe no seu arquivo CSS ou diretamente bootstrap.csscom isso:

.modal.fade{
    -webkit-transition: opacity .2s linear, none;
    -moz-transition: opacity .2s linear, none;
    -ms-transition: opacity .2s linear, none;
    -o-transition: opacity .2s linear, none;
    transition: opacity .2s linear, none;
    top: 50%;
}

Se você não deseja nenhum efeito, basta remover a fadeclasse das classes modais.

macaco lorem
fonte
1
A parte superior: 50% parece estar causando problemas quando a caixa de diálogo é fechada. O diálogo parece estar sendo aberto no mesmo local que antes; mas pouco antes de fechar, por uma fração de segundo, ele se move para o centro e depois fecha. Pelo menos no Chrome. Alguém mais notou isso também?
91313 mohitp
1
@lorem monkey - saúde, queria o desbotamento, mas não o slide. Se alguém quiser a versão SCSS / bússola ... .modal.fade {transição @include (.2s opacidade linear, nenhum);}
Simon
1
@mohitp Em vez de "top: 50%", estou usando "top: 25%". Eu também adicionei .modal.fade.in {top: 25%; } Parece ter feito o truque para mim. Não sei por que isso funciona, pois eu não tenho a classe "in" no meu modal.
Darren
2
@dkrape a inclasse é adicionada pelo Bootstrap.js
Dave Sag
Esta é a resposta certa, respondendo às duas partes da pergunta.
00
26

Acredito que a maioria dessas respostas seja para o bootstrap 2. Encontrei o mesmo problema no bootstrap 3 e queria compartilhar minha correção. Como minha resposta anterior para o bootstrap 2, isso ainda diminui a opacidade, mas NÃO faz a transição do slide.

Você pode alterar os arquivos modals.less ou theme.css, dependendo do seu fluxo de trabalho. Se você não passou um tempo de qualidade com menos, eu recomendo.

por menos, encontre o seguinte código em MODALS.less

&.fade .modal-dialog {
  .translate(0, -25%);
  .transition-transform(~"0.3s ease-out");
}
&.in .modal-dialog { .translate(0, 0)}

então mude o -25% para0%

Como alternativa, se você estiver usando apenas o css, encontre o seguinte em theme.css:

.modal.fade .modal-dialog {
  -webkit-transform: translate(0, -25%);
  -ms-transform: translate(0, -25%);
  transform: translate(0, -25%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
  -moz-transition: -moz-transform 0.3s ease-out;
  -o-transition: -o-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
}

e depois mude -25%para 0%.

vigilância
fonte
2
Eu substituiria esses estilos em uma folha de estilo personalizada em vez de editar a folha de estilo do Bootstrap / Menos.
Bassem
Esta é a ÚNICA solução CSS simples para obter o FADE sem slide. THX.
Davideghz
18

Resolvi isso substituindo os .modal.fadeestilos padrão na minha própria folha de estilo MENOS:

.modal {
  &.fade {
    .transition(e('opacity .3s linear'));
    top: 50%;
  }
  &.fade.in { top: 50%; }
}

Isso mantém a animação fade in / fade out, mas remove a animação deslizar para cima / deslizar para baixo.

Alex Bain
fonte
obrigado. Acabei usando 10% em vez de 50% e reduzi a transição de 0,3s para 0,25s, o que me parece um pouco mais suave.
isapir
Abrir e fechar um modal várias vezes move a página ao longo do tempo.
Leeish 14/11/14
12

Eu encontrei a melhor solução que remove o slide, mas deixa o fade , adicionando o seguinte css em um arquivo css da sua escolha que é chamado após o bootstrap.css

.modal.fade .modal-dialog 
{
    -moz-transition: none !important;
    -o-transition: none !important;
    -webkit-transition: none !important;
    transition: none !important;

    -moz-transform: none !important;
    -ms-transform: none !important;
    -o-transform: none !important;
    -webkit-transform: none !important;
    transform: none !important;
}
justinazz
fonte
1
Esta é a melhor resposta para Bootstrap 3, a fim de manter o fade mas remover o para baixo a corrediça
NickH
2
Esta solução também funciona bem para o Bootstrap 4. Obrigado!
aprovado
11

Também não gostei do efeito slide. Para corrigir isso, tudo o que você precisa fazer é tornar o topatributo o mesmo para .modal.fade e modal.fade.in. Você também pode tirar top 0.3s ease-outas transições, mas não é demais deixá-las. Gosto dessa abordagem porque o fade in / out funciona, apenas mata o slide .

.modal.fade {
  top: 20%;
  -webkit-transition: opacity 0.3s linear;
     -moz-transition: opacity 0.3s linear;
       -o-transition: opacity 0.3s linear;
          transition: opacity 0.3s linear;
}

.modal.fade.in {
  top: 20%;
}

Se você está procurando uma resposta de bootstrap 3, veja aqui

vigilância
fonte
1
Os dois principais exemplos não-MENOS acima negligenciam a declaração ".modal.fade.in", que faz com que o modal salte um pouco ao fechar. Este funciona muito bem. Aqui está na prática: jsfiddle.net/dkrape/4EwFq
Darren
Isso funciona principalmente, mas estou vendo uma linha horizontal azul brilhante (em todo o Safari, Firefox e Chrome) cerca de 32px acima do meu Modal quando ele aparece.
Dave Sag
2

você também pode sobrescrever o bootstrap.css simplesmente removendo "top: -25%;"

uma vez removido, o modal simplesmente desaparecerá sem a animação do slide.

Amr Morsy
fonte
2

Apenas remova a classe fade e se você quiser que mais animações sejam executadas no Modal, use as classes animate.css no seu Modal.

Kapil Kumar
fonte
1

Estou trabalhando com o bootstrap 3 e o plugin modal Durandal JS 2. Esta pergunta estava no topo dos resultados do Google e, como nenhuma das respostas acima está funcionando, pensei em compartilhar minha solução para futuros visitantes.

Eu substituo o código Less do Bootstrap padrão por este no meu próprio less:

.modal {
  &.fade .modal-dialog {
    .translate(0, 0);
    .transition-transform(~"none");
  }
  &.in .modal-dialog { .translate(0, 0)}
}

Dessa forma, fico apenas com o efeito fade e sem slideDown.

David
fonte
1
.modal.fade, .modal.fade .modal-dialog {
    -webkit-transition: none;
    -moz-transition: none;
    -ms-transition: none;
    -o-transition: none;
    transition: none;
}
SM Adnan
fonte
Isso removerá a animação da exibição e ocultação. Funciona bem para mim com a interface do usuário Angular-Bootstrap também.
SM Adnan
1

A pergunta era clara: remova apenas o slide: Veja como alterá-lo no Bootstrap v3

No modals.less, comente a declaração de conversão:

&.fade .modal-dialog {
  //   .translate(0, -25%);
Derry Birkett
fonte
0

Queria atualizar isso. A maioria de vocês não concluiu este problema. Estou usando o Bootstrap 3. Nenhuma das correções acima funcionou.

para remover o efeito do slide, mas mantenha o desbotamento. Entrei no bootstrap css e (observei os seguintes seletores) - isso resolveu o problema.

 .modal.fade .modal-dialog{/*-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out*/}

 .modal.in .modal-dialog{/*-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)*/}
tmarois
fonte
0

O seguinte CSS funciona para mim - Usando o Bootstrap 3. Você precisa adicionar este css após os estilos boostrap -

.modal.fade .modal-dialog{
    -webkit-transition-property: transform; 
    -webkit-transition-duration:0 ; 
    transition-property: transform; 
    transition-duration:0 ; 
}

.modal.fade {
   transition: none; 
}
Ignacio Vazquez
fonte
0

basta remover a classe 'fade' da classe modal

class="modal fade bs-example-modal-lg"

Como

class="modal bs-example-modal-lg"
Abeysinghe
fonte