J'ai une page dans mon application ionique qui, en un clic, ouvre une page modale. Actuellement, j'ai substitué la variable.scss au code ci-dessous pour que le modèle couvre 100% de la page.
//for Modals
$modal-inset-height-large: 100%;
$modal-inset-height-small: $modal-inset-height-large;
$modal-inset-width: 100%;
Cependant, cela s'applique à tous mes modèles dans mon application. Je souhaite utiliser certains modèles dans d'autres pages qui utilisent 50% de la largeur et environ 80% de la hauteur. Comment puis-je personnaliser mes contrôles?
Vous ne pouvez pas modifier une hauteur ou une largeur de modal particulière ..__ Je vais maintenant décrire une solution que j'utilise pour redimensionner mon modal.
app.scss
.modal-wrapper {
position: absolute;
width: 100%;
height: 100%;
}
@media not all and (min-height: 600px) and (min-width: 768px) {
ion-modal ion-backdrop {
visibility: hidden;
}
}
@media only screen and (min-height: 0px) and (min-width: 0px) {
.modal-wrapper {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
main-view
css class). Maintenant, One div est utilisé pour l’arrière-plan du modal, il servira de toile de fond (voir overlay
css class). Un autre div doit être utilisé pour le contenu, nous allons redimensionner ce div (voir modal-content
css class). Par exemple, je redimensionne la hauteur à 50%. Un exemple de code html et css est donné ci-dessous,page-about {
.main-view{
background: transparent;
}
.overlay {
position: fixed;
top: 0;
width: 100%;
height: 100%;
z-index: 1;
opacity: .5;
background-color: #333;
}
.modal_content {
position: absolute;
top: calc(50% - (50%/2));
left: 0;
right: 0;
width: 100%;
height: 50%;
padding: 10px;
z-index: 100;
margin: 0 auto;
padding: 10px;
color: #333;
background: #e8e8e8;
background: -moz-linear-gradient(top, #fff 0%, #e8e8e8 100%);
background: -webkit-linear-gradient(top, #fff 0%, #e8e8e8 100%);
background: linear-gradient(to bottom, #fff 0%, #e8e8e8 100%);
border-radius: 5px;
box-shadow: 0 2px 3px rgba(51, 51, 51, .35);
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
overflow: hidden;
}
}
<ion-content class="main-view">
<div class="overlay" (click)="dismiss()"></div>
<div class="modal_content">
<h2>Welcome to Ionic!</h2>
<p>
This starter project comes with simple tabs-based layout for apps that are going to primarily use a Tabbed UI.
</p>
<p>
Take a look at the <code>src/pages/</code> directory to add or change tabs, update any existing page or create new
pages.
</p>
</div>
</ion-content>
Voici une capture d'écran du modal,
Si vous voulez que le contenu modal défile, remplacez <div class="modal_content">
par <ion-scroll class="modal_content" scrollY="true">
comme indiqué par Missak Boyajian dans commentaire
Pour Ionic3, vous devez this commenter de Alston Sahyun Kim .
this is an excellent answer, just one thing from ionic3, .main-view{ background: transparent; } should be .content{ background: transparent; }
Tout le code provient de ici . Je pense que ce projet } _ repo vous aidera.
J'ai déjà essayé mais je n'avais pas trouvé de moyen générique de faire en sorte que les modaux se comportent comme je le souhaitais.
Je me suis donc un peu débrouillé pour atteindre modaux réactifs et d'autres types de modaux avec le scss global suivant:
ion-modal {
&.my-modal-inner {
display: flex;
align-items: center;
justify-content: center;
ion-backdrop {
visibility: visible;
}
.modal-wrapper {
display: flex;
align-items: flex-start;
justify-content: center;
overflow: auto;
width: auto;
height: auto;
left: auto;
top: auto;
contain: content;
max-width: 70%;
max-height: 70%;
border-radius: 2px;
box-shadow: 0 28px 48px rgba(0, 0, 0, 0.4);
> .ion-page {
position: relative;
display: block;
width: auto;
height: auto;
contain: content;
box-shadow: 0 28px 48px rgba(0, 0, 0, 0.4);
}
}
&.my-stretch {
.modal-wrapper {
overflow: hidden;
width: 100%;
height: 100%;
> .ion-page {
width: 100%;
height: 100%;
}
}
}
}
&.my-fullscreen {
.modal-wrapper {
position: absolute;
display: block;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
}
Vous pouvez avoir modaux réactifs _ qui aura la taille du contenu interne à l'aide de cssClass: 'my-modal-inner'
:
Le modal occupera au maximum 70% de la largeur et de la hauteur (comme défini dans le css ci-dessus) lorsque le contenu dépasse la limite:
Si le contenu du modal est censé occuper tout l'élément conteneur} (comme une page ou un composant avec ion-content
), cela ne fonctionnera pas bien avec le cas ci-dessus car le modal suppose que le conteneur devrait avoir le la taille de ses enfants, provoquant éventuellement un comportement indésirable (le modal sera très petit, plus qu'il ne devrait):
Au lieu de cela, vous pouvez définir le modal pour occuper sa taille maximale} avec cssClass: 'my-modal-inner my-stretch'
:
Si vous voulez que le modal soit plein écran, même dans un navigateur de bureau volumineux, vous pouvez utiliser cssClass: 'my-fullscreen'
:
Remarques:
my-
avec tout autre préfixe de votre choix (ou sans préfixe).Mise à jour (2018-07-30)
À propos des codes HTML pour le modal:
(1) Modal réactif qui sera aussi grand ou aussi petit que le contenu intérieur (une seule variable div
ou une hiérarchie de divs
, spans
et d'autres éléments de bloc et en-ligne devraient suffire):
<div class="main">
<div class="img-container">
<img src="assets/img/main/icon.png" [alt]="APP_NAME">
</div>
<div class="info-container">
<div class="app-name">{{ APP_NAME }}</div>
<div class="app-version">Version {{ APP_VERSION }}</div>
<div class="app-year">@{{ INITIAL_YEAR }}-{{ CURRENT_YEAR }} {{ APP_NAME }}</div>
<div class="app-rights">All rights reserved</div>
</div>
</div>
2) Modal occupe sa taille maximale (utilisez la classe my-stretch
). Dans ce cas, toute page ionique fera:
<ion-header>
<ion-navbar>
<ion-title>My Title</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<p> My content </p>
</ion-content>