Brève description de ce que nous essayons d'accomplir
Nous développons une application Angular . Nous l'avons développé pour le Web et le mobile en utilisant la même base de code. La version mobile contient de nombreuses fonctionnalités telles que les notifications push , les abonnements SMS , etc. Nous espérons publier la version mobile sur l'App Store et le Play Store. Nous utilisons une simple application Ionic 3 pour la créer sur Android et iOS.
L'application Ionic 3 ne contient qu'une seule page dans laquelle nous chargeons notre site Web angulaire dans un iframe
HTML de la page Ionic
.footer{ position: fixed; bottom: 0; width: 100%; background-color:#47454b; } h3 { color: white; padding:0px 50px; }
TS de la page Ionic
<footer class="footer"> <h3>This is footer</h3> </footer>
Rechercher Le référentiel Github de l'application Ionic 3 Ici a>.
J'ai créé StackBlitz un projet angulaire similaire à My Angular application. Trouvez-le ici .
Mon problème
Dans mon application,
app-header
etapp-footer
doivent être fixés sur ViewPort et les autres contenus devraient pouvoir défiler. J'ai réussi atteint cet objectif pour Android Mais sous iOS,app-header
etapp-footer
ne sont pas fixés à ViewPort et ceux-ci défilent avec d'autres contenus lorsque je charge mon application Angular dans uniframe
dans l'application Ionic.
header.component.html
.main { background-color: #46454A; color: rgba(255,255,255,.6); padding:5px 50px; } header{ position: fixed; z-index: 10; top: 0; width: 100%; }
header.component.css
<header> <div class="main"> <h3>Countries</h3> </div> </header>
footer.component.html
export class HomePage { iframeSrc: any; sanitizer: DomSanitizer; url: string = 'https://angular-load-ionic-iframe.stackblitz.io'; constructor( sanitizer: DomSanitizer ) { this.sanitizer = sanitizer; this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.url); } }
footer.component.css
<ion-content> <iframe class= 'webPage' [src]="iframeSrc" webkitAllowFullScreen mozallowfullscreen allowFullScreen> </iframe> </ion-content>
Je n'ai pas pu comprendre S'agit-il d'un problème de CSS
avec iOS ou Est-ce qu'il s'est produit pendant charger le site Web angulaire dans iframe
. Lutte pendant un jour mais toujours pas de succès. Si quelqu'un peut m'aider à résoudre ce problème, très apprécié et si quelqu'un a besoin de plus de détails à ce sujet, n'hésitez pas à commenter.
4 Réponses :
Avez-vous essayé de définir tout le mode d'application / style de plate-forme sur md
via la configuration de l'application? Si vous parvenez à résoudre ce problème sur Android, peut-être que l'adoption de styles Android globalement pour la version iOS le résoudra également pour cette plate-forme?
// app.module.ts import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { FormsModule } from '@angular/forms'; import { IonicModule } from '@ionic/angular'; import { AppComponent } from './app.component'; import { HeaderComponent } from './header/header.component'; import { FooterComponent } from './footer/footer.component'; import { HomeComponent } from './home/home.component'; @NgModule({ imports: [ BrowserModule, FormsModule, IonicModule.forRoot({ mode: 'md' }), ], declarations: [ AppComponent, HeaderComponent, FooterComponent, HomeComponent ], bootstrap: [ AppComponent ] }) export class AppModule { }
Merci pour votre réponse. J'ai essayé vos solutions. Mais cela n'a pas résolu mon problème. Je ne peux pas imaginer que ce problème se soit produit lorsque je charge le site Angular dans iframe
. Mais lorsque je débogue mon application iOS en safari, cela montre que tous les styles requis sont appliqués. De toute façon merci pour vos efforts.
Pas de problème, ça vaut le coup d'essayer, c'est une configuration assez inhabituelle, donc je pense que vous aurez du mal à obtenir de l'aide sur ce problème.
Oui, c'est en fait inhabituel. Je suis déjà passé un jour là-dessus. mais n’a pas encore pu trouver de solution. De toute façon merci pour votre réponse.
Je ne suis pas familier avec ionic et votre configuration angulaire mais: il y a un bogue de position similaire dans les navigateurs Safari.
Le problème est que vous ne pouvez pas positionner les éléments fixes qui sont directement les enfants de la balise body.
La solution est: envelopper le contenu dans un autre div. Et mettre tout à l'intérieur.
Vous pouvez peut-être essayer de placer votre élément Header et footer dans un div supplémentaire pour que le pied de page ne soit pas un enfant direct de la balise body.
Merci pour votre réponse. Mais ce n'est pas le cas. Le problème est avec iframe
. sans iframe
tous les styles sont appliqués dans l'iPhone selon mes besoins
mettez ce css dans votre style.css
body { margin: 0px; } h3 { color: white; padding:0px 50px; } my-app{ position: absolute; top: 0; bottom: 0; right: 0; left: 0; } app-header,app-home,app-footer{ position: absolute; left: 0; width: 100%; } app-header,app-footer{ text-align: center; color: white; height: 50px; background-color:#47454b; } app-header{ top:0; } app-footer{ bottom:0; } app-home { top: 50px; bottom: 50px; overflow-y: auto; -webkit-overflow-scrolling: touch; }
supprimez tous les css de header.component.css
et footer.component.css code >
voici le lien stackblitz https://stackblitz.com/edit/angular-load-ionic-iframe-knkgq4?file=src%2Fstyles.css
Merci pour votre réponse. Je vais essayer.
@Imon Merci beaucoup. votre réponse fonctionne comme un charme. tu me sauves la vie.
Pas essayé, mais ça vaut le coup d'essayer:
style.css
position: relative;
}
home.component.html
XXX
footer.component.css
.footer{ position: fixed; bottom: 0; width: 100%; background-color:#47454b; z-index:99; } h3 { color: white; padding:0px 50px; }
J'ai eu des problèmes similaires dans IE avec un pied de page et un en-tête collants, cela fait l'affaire pour moi. Vous avez dit que vous utilisiez des iframes, mais que vous ne pouviez pas en trouver dans votre fork, uniquement du contenu enveloppé de div ... si vous incluez l'iframe, vous pouvez essayer d'appliquer un positionnement relatif pour l'iframe comme
<div style="display: block;"> <div class="container" *ngFor="let country of countries"> <div class="code"><strong>Code:</strong> {{country.countryCode}}</div> <div class="name"><strong>Name:</strong> {{country.countryName}}</div> </div> </div>
pour éviter une collision avec l'en-tête et le pied de page. J'espère que cela vous aidera.