色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

在網格中整齊地對齊項目

張吉惟2年前8瀏覽0評論

我有一些div。測試用網格-模板-列:自動自動自動;因為我希望列寬像取決于元素寬度的flex效果一樣,并且還要justify-content:start;將列向左對齊,這也是我使用auto而不是1fr的原因,因為我不希望列被拉伸到盡可能長的寬度。

問題是我不知道如何像表格一樣整齊地對齊列,正如你在下面的例子中看到的,第二個div的p .target。測試比第一個更長,我試圖實現的是使所有其他列寬遵循最長的一個。

附:我不想用桌子。我也可以使用JavaScript找到最長的一個,并將所有其他的寬度設置為這個值。我只是想看看是否有一個簡單的只使用CSS的解決方案。

p {
  margin: 0;
}

.test {
    column-gap: 30px;
    display: grid;
    grid-template-columns: auto auto auto;
    justify-content: start;
}

p:nth-child(2) {
    position: relative;
    width: 120px;
}

.flex {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    position: absolute;
    left: 0;
    right: 0;
}

<div class="test">
  <p class="target">Hello</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
</div>
<div class="test">
    <p class="target">Hellooo</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
</div>

重構您的HTML,以便在單個網格中添加所有項目,并使用內聯網格:

<div class="test">
  <p class="target">Hello</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
  <p class="target">Hellooo</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
</div>

.test {
  display: inline-grid;
}

請注意,您必須將每行的第二個元素作為更復雜的第n個子元素的目標:

p:nth-child(3n + 2) {}

試試看:

.test {
  display: inline-grid;
}

p:nth-child(3n + 2) {
  position: relative;
  width: 120px;
}


/* Demo only */

p {
  margin: 0;
  background: #ddd;
}

.test {
  column-gap: 30px;
  grid-template-columns: auto auto auto;
  justify-content: start;
}

.flex {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  position: absolute;
  left: 0;
  right: 0;
}

<div class="test">
  <p class="target">Hello</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
  <p class="target">Hellooo</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
</div>

如果您希望網格列的行為像一個表,您需要將項目放在一個網格容器中,而不是兩個獨立的容器中:

<div class="test">
    <p class="target">Hello</p>
    <p><span class="flex">Helloooooooooooooo</span></p>
    <p>Hello</p>
    <p class="target">Hellooo</p>
    <p><span class="flex">Helloooooooooooooo</span></p>
    <p>Hello</p>
</div>

要設置每行第二個元素的寬度,只需在網格布局中指定寬度:

grid-template-columns: auto 120px auto;

但是如果我們現在去掉p:n-child(2)選擇器,我們就有了。flex元素完全靠著網格放置,而不是p元素,這會打亂布局。

但實際上,您可以完全擺脫絕對定位,而不會弄亂布局,并將溢出屬性應用于所有網格項目,如下所示:

.test > * {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

下面是生成的更簡潔的代碼:

p {
  margin: 0;
}

.test {
  column-gap: 30px;
  display: grid;
  grid-template-columns: auto 120px auto;
  justify-content: start;
}

.test > * {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

<div class="test">
  <p class="target">Hello</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
  <p class="target">Hellooo</p>
  <p><span class="flex">Helloooooooooooooo</span></p>
  <p>Hello</p>
</div>