suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Mit dem SVG-Bild kann kein reaktionsfähiger Rasterbereich erstellt werden

<p>Wenn ich versuche, einen responsiven Rasterbereich zu erstellen, der ein SVG-Bild enthält, stoße ich auf seltsames Verhalten, z. B. willkürliche Rasterbereichsbreiten und die Unfähigkeit, das Bild ohne Unterbrechung bis zu einem bestimmten Punkt zu vergrößern oder zu verkleinern. Am nächsten kam mir folgendes: </p> <p> <pre class="brush:css;toolbar:false;">* { Boxgröße: border-box; } Körper { Rand: 0; } Header { Anzeige: Raster; Rastervorlagenspalten: auto 1fr; Hintergrundfarbe: grün; Polsterung: 1rem; } img { Breite: 100 %; maximale Breite: 25 VW; Mindestbreite: 12rem; Hintergrundfarbe: rosa; } div { Hintergrundfarbe: rot; Textausrichtung: Mitte; } Navigation { Hintergrundfarbe: gelb; Gitterspalte: Spanne 2; }</pre> <pre class="brush:html;toolbar:false;"><header> <img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 324 413.28'%3E%3Crect class='655de5e2- 44d3-4b5a-ae63-e6e7ec799246' x='18' y='18.12' width='288' height='324' fill='blue'/%3E%3C/svg%3E"> <div> <h1>Überschrift</h1> <p>Textzeile 1</p> <p>Textzeile 2</p> <p>Textzeile 3</p> </div> <nav> <a href="#">Menüpunkt 1</a> <a href="#">Menüpunkt 2</a> <a href="#">Menüpunkt 3</a> <a href="#">Menüpunkt 4</a> <a href="#">Menüpunkt 5</a> <a href="#">Menüpunkt 6</a> </nav> </header></pre> </p> <p>Ich habe Höhe, Mindesthöhe, Höchsthöhe und sogar die Verwendung von Clips innerhalb der Breite ausprobiert, jedoch mit wenig Erfolg. Vielleicht fehlt mir einfach das Verständnis, wie einige der vorhandenen Antworten vermuten lassen, aber ich weiß nicht, wie ich das Problem beheben kann. </p>
P粉022140576P粉022140576455 Tage vor553

Antworte allen(1)Ich werde antworten

  • P粉294954447

    P粉2949544472023-08-31 11:33:30

    图像列的宽度不是任意的。

    网格容器首先布置结构。然后正在布置物品。

    这意味着当图像处于其自然宽度 (100%) 时,第一列的大小将会调整。

    当项目以宽度:50% 呈现时,浏览器不会返回并重新调整列的大小。

    所以列的大小不是任意的;这是图像的自然宽度。

    (这可以说是一个错误或 CSS 限制。)

    请注意,当图像为全宽时,此问题不存在:

    * {
      box-sizing: border-box;
    }
    
    body {
      margin: 0;
    }
    
    header {
      display: grid;
      grid-template-columns: auto 1fr;
      background-color: green;
      padding: 1rem;
    }
    
    img {
      width: 100%;
      background-color: pink;
    }
    
    div {
      background-color: red;
    }
    
    nav {
      background-color: yellow;
      grid-column: span 2;
    }
    <header>
      <div style="background-color: blue">
        <img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 324 413.28'%3E%3Crect class='655de5e2-44d3-4b5a-ae63-e6e7ec799246' x='18' y='18.12' width='288' height='324' fill='blue'/%3E%3C/svg%3E">
      </div>
      <div>
        <h1>Heading</h1>
        <p>Text Line 1</p>
        <p>Text Line 2</p>
        <p>Text Line 3</p>
      </div>
      <nav>
        <a href="#">Menu Item 1</a>
        <a href="#">Menu Item 2</a>
        <a href="#">Menu Item 3</a>
        <a href="#">Menu Item 4</a>
        <a href="#">Menu Item 5</a>
        <a href="#">Menu Item 6</a>
      </nav>
    </header>

    当你尝试 width: 150% 时它会回来:

    * {
      box-sizing: border-box;
    }
    
    body {
      margin: 0;
    }
    
    header {
      display: grid;
      grid-template-columns: auto 1fr;
      background-color: green;
      padding: 1rem;
    }
    
    img {
      width: 150%;
      background-color: pink;
    }
    
    div {
      background-color: red;
    }
    
    nav {
      background-color: yellow;
      grid-column: span 2;
    }
    <header>
      <div style="background-color: blue">
        <img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 324 413.28'%3E%3Crect class='655de5e2-44d3-4b5a-ae63-e6e7ec799246' x='18' y='18.12' width='288' height='324' fill='blue'/%3E%3C/svg%3E">
      </div>
      <div>
        <h1>Heading</h1>
        <p>Text Line 1</p>
        <p>Text Line 2</p>
        <p>Text Line 3</p>
      </div>
      <nav>
        <a href="#">Menu Item 1</a>
        <a href="#">Menu Item 2</a>
        <a href="#">Menu Item 3</a>
        <a href="#">Menu Item 4</a>
        <a href="#">Menu Item 5</a>
        <a href="#">Menu Item 6</a>
      </nav>
    </header>


    旁注

    一般来说,在使用 CSS Grid 和 Flexbox 时,将图像作为容器的子项并不是一个好主意。

    换句话说,通常最好避免将图像用作网格或弹性项目。

    不同浏览器之间存在太多错误和渲染差异。

    在许多情况下,只需将图像放入 div 中(使 div 成为网格项)即可解决问题。

    避免将图像作为网格或弹性项目:

    Antwort
    0
  • StornierenAntwort