Comment créer un écran modal de bootstrap sur Twitter

160
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-body">
    <%= image_tag "Background.jpg" %>
  </div>
</div>

Comment puis-je créer un pop-up modal de bootstrap en plein écran pour le code ci-dessus, j'ai essayé de jouer avec le CSS mais je n'ai pas pu l'obtenir comme je le voulais. Quelqu'un peut-il m'aider s'il vous plaît.

Hrishikesh Sardar
la source

Réponses:

280

J'ai réalisé cela dans Bootstrap 3 avec le code suivant:

.modal-dialog {
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
}

.modal-content {
  height: auto;
  min-height: 100%;
  border-radius: 0;
}

En général, lorsque vous avez des questions sur les problèmes d'espacement / de remplissage, essayez avec le bouton droit + clic (ou cmd + clic sur mac) sur l'élément et sélectionnez «inspecter l'élément» sur Chrome ou «inspecter l'élément avec Firebug» sur Firefox. Essayez de sélectionner différents éléments HTML dans le panneau "éléments" et de modifier le CSS à droite en temps réel jusqu'à ce que vous obteniez le remplissage / espacement souhaité.

Voici une démo en direct

Voici un lien vers le violon

Chris J
la source
12
J'ajouterais également margin: 0à .modal-dialog.
harrison4
10
BTW: .modal-contentla hauteur de rupture lorsque le contenu déborde en bas et défile vers le bas. Ça devrait êtremin-height: 100%; height: auto;
Yanick Rochon
3
Si vous concevez pour une application mobile, vous pouvez placer le CSS de Chris dans une requête multimédia pour avoir une largeur modale normale pour des écrans plus larges @media (max-width: 768px) {...}
Nicolas Connault
vous pouvez également ajouter .modal {padding: ... px} si vous avez besoin d'un modal "presque" plein écran
andrii
8
.modal-dialoga également besoin max-width: 100%;de bootstrap 4
Anand Rockzz
25

La solution choisie ne conserve pas le style des coins arrondis. Pour préserver les coins arrondis, vous devez réduire un peu la largeur et la hauteur et supprimer le rayon de la bordure 0. De plus, la barre de défilement verticale ne s'affiche pas ...

.modal-dialog {
  width: 98%;
  height: 92%;
  padding: 0;
}

.modal-content {
  height: 99%;
}
Esteban
la source
1
une réponse plus correcte qui conserve la sensation du modèle avec des coins arrondis, la réponse acceptée présente une couche de superposition au lieu de modal
Clain Dsilva
Si le modal occupe le plein écran, cela aurait l'air horrible (IMHO) si vous avez des coins arrondis autour de lui.
Dementic
16

Pour bootstrap 4, je dois ajouter une requête multimédia avec max-width: none

@media (min-width: 576px) {
  .modal-dialog { max-width: none; }
}

.modal-dialog {
  width: 98%;
  height: 92%;
  padding: 0;
}

.modal-content {
  height: 99%;
}
A. Morel
la source
16

J'ai mis au point une solution «réactive» pour les modaux plein écran:

Modaux plein écran qui ne peuvent être activés que sur certains points d'arrêt . De cette façon, le modal affichera "normal" sur des écrans plus larges (bureau) et en plein écran sur des écrans plus petits (tablette ou mobile) , lui donnant la sensation d'une application native.

Implémenté pour Bootstrap 3 et Bootstrap 4 .

Bootstrap v4

Le code générique suivant devrait fonctionner:

.modal {
  padding: 0 !important; // override inline padding-right added from js
}
.modal .modal-dialog {
  width: 100%;
  max-width: none;
  height: 100%;
  margin: 0;
}
.modal .modal-content {
  height: 100%;
  border: 0;
  border-radius: 0;
}
.modal .modal-body {
  overflow-y: auto;
}

En incluant le code scss ci-dessous, il génère les classes suivantes qui doivent être ajoutées à l' .modalélément:

+---------------+---------+---------+---------+---------+---------+
|               |   xs    |   sm    |   md    |   lg    |   xl    | 
|               | <576px  | 576px  | 768px  | 992px  | 1200px |
+---------------+---------+---------+---------+---------+---------+
|.fullscreen    |  100%   | default | default | default | default | 
+---------------+---------+---------+---------+---------+---------+
|.fullscreen-sm |  100%   |  100%   | default | default | default | 
+---------------+---------+---------+---------+---------+---------+
|.fullscreen-md |  100%   |  100%   |  100%   | default | default |
+---------------+---------+---------+---------+---------+---------+
|.fullscreen-lg |  100%   |  100%   |  100%   |  100%   | default |
+---------------+---------+---------+---------+---------+---------+
|.fullscreen-xl |  100%   |  100%   |  100%   |  100%   |  100%   |
+---------------+---------+---------+---------+---------+---------+

Le code scss est:

@mixin modal-fullscreen() {
  padding: 0 !important; // override inline padding-right added from js

  .modal-dialog {
    width: 100%;
    max-width: none;
    height: 100%;
    margin: 0;
  }

  .modal-content {
    height: 100%;
    border: 0;
    border-radius: 0;
  }

  .modal-body {
    overflow-y: auto;
  }

}

@each $breakpoint in map-keys($grid-breakpoints) {
  @include media-breakpoint-down($breakpoint) {
    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);

    .modal-fullscreen#{$infix} {
      @include modal-fullscreen();
    }
  }
}

Démo sur Codepen: https://codepen.io/andreivictor/full/MWYNPBV/


Bootstrap v3

Sur la base des réponses précédentes à ce sujet (@Chris J, @kkarli), le code générique suivant devrait fonctionner:

.modal {
  padding: 0 !important; // override inline padding-right added from js
}

.modal .modal-dialog {
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
}

.modal .modal-content {
  height: auto;
  min-height: 100%;
  border: 0 none;
  border-radius: 0;
  box-shadow: none;
}

Si vous souhaitez utiliser des modaux plein écran réactifs, utilisez les classes suivantes qui doivent être ajoutées à l' .modalélément:

  • .modal-fullscreen-md-down- le modal est plein écran pour les écrans plus petits que 1200px.
  • .modal-fullscreen-sm-down- le modal est plein écran pour les écrans plus petits que 922px.
  • .modal-fullscreen-xs-down- le modal est plein écran pour un écran plus petit que 768px.

Jetez un œil au code suivant:

/* Extra small devices (less than 768px) */
@media (max-width: 767px) {
  .modal-fullscreen-xs-down {
    padding: 0 !important;
  }
  .modal-fullscreen-xs-down .modal-dialog {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
  }
  .modal-fullscreen-xs-down .modal-content {
    height: auto;
    min-height: 100%;
    border: 0 none;
    border-radius: 0;
    box-shadow: none;
  } 
}

/* Small devices (less than 992px) */
@media (max-width: 991px) {
  .modal-fullscreen-sm-down {
    padding: 0 !important;
  }
  .modal-fullscreen-sm-down .modal-dialog {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
  }
  .modal-fullscreen-sm-down .modal-content {
    height: auto;
    min-height: 100%;
    border: 0 none;
    border-radius: 0;
    box-shadow: none;
  }
}

/* Medium devices (less than 1200px) */
@media (max-width: 1199px) {
  .modal-fullscreen-md-down {
    padding: 0 !important;
  }
  .modal-fullscreen-md-down .modal-dialog {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
  }
  .modal-fullscreen-md-down .modal-content {
    height: auto;
    min-height: 100%;
    border: 0 none;
    border-radius: 0;
    box-shadow: none;
  }
}

La démo est disponible sur Codepen: https://codepen.io/andreivictor/full/KXNdoO .


Ceux qui utilisent Sass comme préprocesseur peuvent profiter du mixin suivant:

@mixin modal-fullscreen() {
  padding: 0 !important; // override inline padding-right added from js

  .modal-dialog {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
  }

  .modal-content {
    height: auto;
    min-height: 100%;
    border: 0 none;
    border-radius: 0;
    box-shadow: none;
  }

}
andreivictor
la source
11

La classe suivante créera un modal plein écran dans Bootstrap:

.full-screen {
    width: 100%;
    height: 100%;
    margin: 0;
    top: 0;
    left: 0;
}

Je ne sais pas comment le contenu interne de votre modal est structuré, cela peut avoir un effet sur la hauteur totale en fonction du CSS qui lui est associé.

micro brouillage
la source
qu'est-ce que .fullscreen? J'ai inclus le css dans #myModal, cela fonctionnait pour la largeur mais pas pour la hauteur.
Hrishikesh Sardar
.fullscreenest une classe que j'ai créée pour résoudre le problème, elle n'est pas incluse dans Bootstrap. Pouvez-vous publier un échantillon de votre code sur JSFiddle ou CodePen ? Je ne peux pas vous aider sans voir votre code.
micjamking
pour ajouter de la hauteur, vous devez ajouter de la hauteur sur le corps du modèle et non sur #myModal.
QasimRamzan
9

pour bootstrap 4

ajouter des classes:

.full_modal-dialog {
  width: 98% !important;
  height: 92% !important;
  min-width: 98% !important;
  min-height: 92% !important;
  max-width: 98% !important;
  max-height: 92% !important;
  padding: 0 !important;
}

.full_modal-content {
  height: 99% !important;
  min-height: 99% !important;
  max-height: 99% !important;
}

et en HTML:

<div role="document" class="modal-dialog full_modal-dialog">
    <div class="modal-content full_modal-content">
Vlad
la source
7

L' extrait de @Chris J avait quelques problèmes de marges et de dépassement de capacité. Les modifications proposées par @YanickRochon et @Joana, basées sur le violon de @Chris J, peuvent être trouvées dans le jsfiddle suivant .

C'est le code CSS qui a fonctionné pour moi:

.modal-dialog {
    width: 100%;
    height: 100%;
    padding: 0;
    margin: 0;
}
.modal-content {
    height: 100%;
    min-height: 100%;
    height: auto;
    border-radius: 0;
}
kkarli
la source
2

Vous devez définir vos balises DIV comme ci-dessous.

Trouvez plus de détails> http://thedeveloperblog.com/bootstrap-modal-with-full-size-and-scrolling

</style>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal">
   More Details
</button>
</br>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-content">
        <div class="container">;
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <h3 class="modal-title" id="myModalLabel">Modal Title</h3>
          </div>
              <div class="modal-body" >
                Your modal text 
              </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
          </div>
        </div>
    </div>                                      
</div>
BenW
la source
-1

Ma variante de la solution: (scss)

  .modal {
        .modal-dialog.modal-fs {
            width: 100%;
            margin: 0;
            box-shadow: none;
            height: 100%;
            .modal-content {
                border: none;
                border-radius: 0;
                box-shadow: none;
                box-shadow: none;
                height: 100%;
            }
        }
    }

(css)

.modal .modal-dialog.modal-fs {
  width: 100%;
  margin: 0;
  box-shadow: none;
  height: 100%;
}
.modal .modal-dialog.modal-fs .modal-content {
  border: none;
  border-radius: 0;
  box-shadow: none;
  box-shadow: none;
  height: 100%;
}
Démence
la source
-1
.modal.in .modal-dialog {
 width:100% !important; 
 min-height: 100%;
 margin: 0 0 0 0 !important;
 bottom: 0px !important;
 top: 0px;
}


.modal-content {
    border:0px solid rgba(0,0,0,.2) !important;
    border-radius: 0px !important;
    -webkit-box-shadow: 0 0px 0px rgba(0,0,0,.5) !important;
    box-shadow: 0 3px 9px rgba(0,0,0,.5) !important;
    height: auto;
    min-height: 100%;
}

.modal-dialog {
 position: fixed !important;
 margin:0px !important;
}

.bootstrap-dialog .modal-header {
    border-top-left-radius: 0px !important; 
    border-top-right-radius: 0px !important;
}


@media (min-width: 768px)
.modal-dialog {
    width: 100% !important;
    margin: 0 !important;
}
Alireza Pars
la source
2
Essayez d'expliquer plus clairement pourquoi c'est une réponse à la question.
Jeroen Heier
-1

Utilisez ceci:

.modal-full {
    min-width: 100%;
    margin: 0;
}

.modal-full .modal-content {
    min-height: 100vh;
}

et donc:

<div id="myModal" class="modal" role="dialog">
    <div class="modal-dialog modal-full">
        <!-- Modal content-->
        <div class="modal-content ">
            <div class="modal-header ">                    
                <button type="button" class="close" data-dismiss="modal">&times; 
                </button>
                <h4 class="modal-title">hi</h4>
            </div>
            <div class="modal-body">
                <p>Some text in the modal.</p>
            </div>
        </div>

    </div>
</div>
hojjat.mi
la source