IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mise en page CSS Discussion :

Placer des éléments et texts à des places voulues dans une card


Sujet :

Positionnement en CSS

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut Placer des éléments et texts à des places voulues dans une card
    Bonjour, je développe une petite application angular material. Mon objectif est d'obtenir le design suivant pour une card, qui s'applique à tous les média (desktop, mobile, tablette)

    Nom : mat-card.jpg
Affichages : 325
Taille : 49,1 Ko
    mon composant app.component.html est le suivant
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
        <mat-toolbar color="primary">
          <div style="width:100%;" class="md-toolbar-tools" >
            Liste des annonces
            <span flex></span>
          </div>
        </mat-toolbar>
        <div fxLayout="row">
          <div fxFlex="20%"></div>
          <div fxFlex="60%">
            <mat-card *ngFor="let annonce of annonces; let i = index" style="border:red">
                <mat-card-content style="border:blue">
                    <img src="./../assets/image/image{{i+1}}.jpg" alt="Avatar" style="position:absolute;top:0px;left:0px;width:40%;height:100%">
                    <div class="container" style="left: 45%; top:10px;">
                      <div style="left:70%;">{{annonce.dateConstruction | date:'dd MMMM yyyy'}}</div>
                      <div>
                        <span>{{annonce.type}}</span>
                        <span style="float:right">{{annonce.prix}}</span>
                      </div>
                      <h4>{{annonce.surface}}</h4>
                      <h4>{{annonce.adresse}}</h4>
                      <div style="left:45%;">
                        <p>{{annonce.description}}</p>
                      </div>
                    </div>
                </mat-card-content>
            </mat-card>
          </div>
          <div fxFlex="20%"></div>
        </div>
     
        <router-outlet></router-outlet>

    Je suis nul pour placer les éléments et texte (ou image) dans les pages html (jreaux62, (ou un autre membre de developpez.com suffisamment fort en html/css) si tu lis cette discussion, ça m'intéresserai de prendre des cours particulier avec toi, moyennant finance, bien sur) et dans ce cas dans une "card". J'obtiens la sortie suivante sur mon browser

    Nom : Capture d’écran 2019-10-21 à 22.13.46.png
Affichages : 312
Taille : 104,6 Ko
    De plus, quand je réduis mon browser, je ne peux pas voir les éléments et textes sur la droite de mon image placés correctement. j'ai essayé de reproduire la même chose sur stackblitz (https://stackblitz.com/edit/angular-...e=package.json), mais j'ai des soucis avec les tags angular material qui ne sont pas pris en compte.

    Donc, pouvez vous m'aider en me disant ce qui ne va pas, commenter le code correct à appliquer, de manière à ce que je puisse progresser. Merci beaucoup.

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Bonjour,

    Vu que Angular Material, ainsi que ton code, utilisent les flexbox, il est beaucoup plus simple que l'image soit dans une colonne et ton contenu dans une autre

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <mat-card class="card-annonce" *ngFor="let annonce of annonces; let i = index" style="border:red">
     
        <img src="./../assets/image/image{{i+1}}.jpg" alt="Avatar" style="position:absolute;top:0px;left:0px;width:40%;height:100%">
     
        <mat-card-content style="border:blue">
            <div class="container" style="left: 45%; top:10px;">
                <div style="left:70%;">{{annonce.dateConstruction | date:'dd MMMM yyyy'}}</div>
                <div>
                    <span>{{annonce.type}}</span>
                    <span style="float:right">{{annonce.prix}}</span>
                </div>
                <h4>{{annonce.surface}}</h4>
                <h4>{{annonce.adresse}}</h4>
                <div style="left:45%;">
                    <p>{{annonce.description}}</p>
                </div>
            </div>
        </mat-card-content>
    </mat-card>

    Par contre, pour le responsive, il va falloir ajouter un peu de CSS pour dire que la disposition change suivant la résolution de l'écran
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    .card-annonce {
         display: flex;
         flex-direction: column;
    }
     
    @media (min-width: 992px) {
         .card-annonce {
              flex-direction: row;
         }
    }

    ATTENTION : Un de ton plus gros problème est d'avoir mis ton image en position: absolute !!! Elle sort donc du flux et ne respecte plus la flexbox, uniquement son parent relatif (position: relative) le plus proche

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- SUPPRIME TOUS les attributs style="..." du code HTML !
    Écris plutôt le code CSS entre balises <style></style> (en phase de TEST, puis dans un fichier externe).

    2- voici une solution avec flexbox : https://codepen.io/jreaux62/pen/KKKWXxX

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    /* mobile first */
    mat-card { 
      display:block;
      border:1px solid red; 
      overflow:hidden;
    }
    mat-card-content > img { 
      display:block;
      width:100%; 
    }
    mat-card-content > div.container { 
      background:lightgrey;
      padding:10px;
    }
    /* tablet / desktop */
    @media screen and (min-width:769px) {
      mat-card-content { 
        display:flex; 
      }
      mat-card-content > img { 
        flex:1 1 40%; 
      }
      mat-card-content > div.container { 
        flex:1 1 60%; 
      }
    }
    Cela dit, je ne connais pas Angular (ni son CSS propre).

Discussions similaires

  1. Placer des chaises autour d'une table
    Par bibi9 dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 04/11/2008, 09h42
  2. Inserer des balise html dans une zone de text du rapport
    Par jacky2677 dans le forum iReport
    Réponses: 1
    Dernier message: 12/08/2008, 12h08
  3. Réponses: 4
    Dernier message: 04/03/2008, 12h17
  4. Placer des objets Uicontrol dans un subplot
    Par soeursourire dans le forum Interfaces Graphiques
    Réponses: 7
    Dernier message: 25/10/2007, 15h51
  5. Réponses: 5
    Dernier message: 21/02/2007, 16h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo