Issues and challenges with aligning images in Flexbox
P粉068510991
P粉068510991 2024-02-26 00:26:26
0
2
382

I've been working on a homepage I've developed recently, and I'm having some difficulty aligning my items in a flexbox. The first flexbox should contain three (3) images, and all images should be on a vertical line below each other.

This is also important for my second flexbox.

This is my code:

.flexcontainer-1 {
  display: flex;
  justify-content: flex-start;
  align-items: left;
  height: auto;
  width: auto;
}

.flexcontainer-2 {
  display: flex;
  justify-content: flex-end;
  align-items: right;
  height: auto;
  width: auto;
}
<div class="flexcontainer-1">
  <!-- Übersicht über alle Immobilien mit entsprechenden Bildern -->
  <h4>Unsere Immobilien</h4>
  <!-- Weiterleitung über Anchor innerhalb des Images zu Einzelbeschreibung, -->
  <!-- Übergabe der ID aus Datenbank in den Anchor -->
  <p>
    <a href="db_immobilien_desc_b.php?id=2">
      <img src="../images/haus2.jpg" alt="Beschreibung Haus2"></a>
  </p>
  <p>
    <a href="db_immobilien_desc_b.php?id=3">
      <img src="../images/haus3.jpg" alt="Beschreibung Haus3"></a>
  </p>
  <p>
    <a href="db_immobilien_desc_b.php?id=4">
      <img src="../images/haus4.jpg" alt="Beschreibung Haus4"></a>
  </p>
</div>
<div class="flexcontainer-2">
  <p>
    <a href="db_immobilien_desc_b.php?id=5">
      <img src="../images/haus5.jpg" alt="Beschreibung Haus5"></a>
  </p>
  <p>
    <a href="db_immobilien_desc_b.php?id=6">
      <img src="../images/haus6.jpg" alt="Beschreibung Haus6"></a>
  </p>
  <p>
    <a href="db_immobilien_desc_b.php?id=7">
      <img src="../images/haus7.jpg" alt="Beschreibung Haus6"></a>
  </p>
</div>

It always creates a gap in the second alignment of the image, unfortunately I haven't found a solution to this problem yet.

I would really appreciate tips or suggestions and how to improve my coding.

Thank you very much in advance.

kind regards,

Luke

I've tried using the attributes justifiy-content and align-items but that doesn't work for me.

P粉068510991
P粉068510991

reply all(2)
P粉795311321

There are multiple ways to implement this layout, CSS grid, Flexbox and multi-column layout all work (in different ways).

The first thing I recommend, though, is to modify the HTML. Semantically, you appear to be showing a list of properties, which immediately suggests that a list should be used (either ordered or unordered); I would suggest that there should be descriptive text and images, which in turn suggests that <figure> element.

With this revision, once wrapped in a <main> tag (or <section>, <article>...), The above HTML may look like this:

Unsere Immobilien

  • Beschreibung Haus2
    PlaceKitten image: 1
  • Beschreibung Haus3
    PlaceKitten image: 2
  • Beschreibung Haus4
    PlaceKitten image: 3
  • Beschreibung Haus5
    PlaceKitten image: 4
  • Beschreibung Haus6
    PlaceKitten image: 5
  • Beschreibung Haus6
    PlaceKitten image: 6

Use it with a multi-column layout and add explanatory comments in the CSS:

/* CSS custom properties used to provide common theming
   to multiple elements: */
:root {
  --commonSpacing: 1em;
}

/* a simple CSS reset to remove default margins,
   and padding; ensuring all browsers use the
   same sizing algorithm for content, and also
   applying the same font-size and font-family: */
*,
 ::before,
 ::after {
  box-sizing: border-box;
  font-family: system-ui;
  font-size: 16px;
  margin: 0;
  padding: 0;
}

/* to emphasise the heading: */
h4 {
  font-size: 1.8em;
  margin-block: calc(0.5 * var(--commonSpacing));
  text-align: center;
}

main {
  /* setting the size of the inline axis (width, in English and
     Latin languages) to 80 viewport width units, with a minimum
     size of 30 root-em units, and a maximum size of 1300 pixels: */
  inline-size: clamp(30rem, 80vw, 1300px);
  /* centering the element on the inline axis: */
  margin-inline: auto;
}

ul {
  /* using multi-column layout,
     ensuring two columns: */
  column-count: 2;
  /* removing default list-markers: */
  list-style-type: none;
  /* centering the 
elements within the
  • : */ text-align: center; } li { /* ensuring that the
  • doesn't have its contents spread over columns, leaving unsightly orphans at the end, or beginning, of a column: */ break-inside: avoid; /* spacing the elements out: */ margin-block-end: var(--commonSpacing); }
  • Unsere Immobilien

    • Beschreibung Haus2
      PlaceKitten image: 1
    • Beschreibung Haus3
      PlaceKitten image: 2
    • Beschreibung Haus4
      PlaceKitten image: 3
    • Beschreibung Haus5
      PlaceKitten image: 4
    • Beschreibung Haus6
      PlaceKitten image: 5
    • Beschreibung Haus6
      PlaceKitten image: 6

    JS Fiddle 演示

    也可以使用 CSS 网格来做到这一点,尽管带有网格的数字将从左到右然后从上到下流动:

    /* CSS custom properties used to provide common theming
       to multiple elements: */
    :root {
      --commonSpacing: 1em;
    }
    
    
    /* a simple CSS reset to remove default margins,
       and padding; ensuring all browsers use the
       same sizing algorithm for content, and also
       applying the same font-size and font-family: */
    *,
    ::before,
    ::after {
      box-sizing: border-box;
      font-family: system-ui;
      font-size: 16px;
      margin: 0;
      padding: 0;
    }
    
    main {
      /* setting the size of the inline axis (width, in English and
         Latin languages) to 80 viewport width units, with a minimum
         size of 30 root-em units, and a maximum size of 1300 pixels: */
      inline-size: clamp(30rem, 80vw, 1300px);
      /* centering the element on the inline axis: */
      margin-inline: auto;
    }
    
    
    /* to emphasise the heading: */
    h4 {
      font-size: 1.8em;
      margin-block: calc(0.5 * var(--commonSpacing));
      text-align: center;
    }
    
    ul {
      /* using grid layout: */
      display: grid;
      /* spacing adjacent elements: */
      gap: var(--commonSpacing);
      /* defining two columns, each taking one fraction of
         the available space:*/
      grid-template-columns: repeat(2, 1fr);
      list-style-type: none;
      text-align: center;
    }

    Unsere Immobilien

    • Beschreibung Haus2
      PlaceKitten image: 1
    • Beschreibung Haus3
      PlaceKitten image: 2
    • Beschreibung Haus4
      PlaceKitten image: 3
    • Beschreibung Haus5
      PlaceKitten image: 4
    • Beschreibung Haus6
      PlaceKitten image: 5
    • Beschreibung Haus6
      PlaceKitten image: 6

    JS Fiddle 演示

    并且,使用弹性布局:

    /* CSS custom properties used to provide common theming
       to multiple elements: */
    :root {
      --commonSpacing: 1em;
    }
    
    
    /* a simple CSS reset to remove default margins,
       and padding; ensuring all browsers use the
       same sizing algorithm for content, and also
       applying the same font-size and font-family: */
    *,
    ::before,
    ::after {
      box-sizing: border-box;
      font-family: system-ui;
      font-size: 16px;
      margin: 0;
      padding: 0;
    }
    
    main {
      /* setting the size of the inline axis (width, in English and
         Latin languages) to 80 viewport width units, with a minimum
         size of 30 root-em units, and a maximum size of 1300 pixels: */
      inline-size: clamp(30rem, 80vw, 1300px);
      /* centering the element on the inline axis: */
      margin-inline: auto;
    }
    
    
    /* to emphasise the heading: */
    h4 {
      font-size: 1.8em;
      margin-block: calc(0.5 * var(--commonSpacing));
      text-align: center;
    }
    
    ul {
      /* using flexbox layout:  */
      display: flex;
      /* shorthand for:
        flex-direction: row;
        flex-wrap: wrap; */
      flex-flow: row wrap;
      /* setting a gap between adjacent elements: */
      gap: var(--commonSpacing);
      /* removing default list-markers: */
      list-style-type: none;
    }
    
    li {
      /* allowomg the 
  • to expand to take up more room: */ flex-grow: 1; /* setting the size of the element to be 45% of that of the parent; flex-basis always refers to the inline-axis of flex-items, which can be modified by updating the flex-direction of the parent: */ flex-basis: 45%; /* centering the content within the
  • : */ text-align: center; }
  • Unsere Immobilien

    • Beschreibung Haus2
      PlaceKitten image: 1
    • Beschreibung Haus3
      PlaceKitten image: 2
    • Beschreibung Haus4
      PlaceKitten image: 3
    • Beschreibung Haus5
      PlaceKitten image: 4
    • Beschreibung Haus6
      PlaceKitten image: 5
    • Beschreibung Haus6
      PlaceKitten image: 6

    JS Fiddle 演示

    参考文献:

    P粉347804896

    You appear to be using h4 in the first container.

    Get this element from flexcontainer-1.

    To achieve the desired results, you should do this

    .container {
      display: flex;
      gap:10px;
    }
    
    .item {
      height: 50px;
      width: 100px;
      background-color: blue
    }
    
    .box {
      display: flex;
      flex-direction: column;
      gap: 10px
    }
    House 1
    House 2
    House 3
    House 4
    House 5
    House 6
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template
    About us Disclaimer Sitemap
    php.cn:Public welfare online PHP training,Help PHP learners grow quickly!