You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止CSS Grid布局中同行元素随目标元素展开而增高?

问题描述

我的代码整体运行正常,但存在一个小问题:当我切换展开某个球员的信息框时,同一行的其他球员信息框也会随之展开。请问有什么方法可以避免这种情况?

解决方法

问题根源是Grid布局的默认行为:同一行的所有网格单元格会被自动拉伸至相同高度。当某个球员卡片添加active类后高度增加,同行的其他卡片会被强制拉高,导致原本隐藏的.playerData区域被“拉出来”显示,并非真的触发了展开逻辑。

只需给.player类添加align-self: start属性,让每个网格单元格保持自身高度,不被同行元素影响:

.player {
  background-color: rgb(168, 21, 21);
  width: fit-content;
  box-shadow: 0px 2px 3px 4px rgba(255, 255, 255, .5);
  border-radius: 10px;
  margin: 20px;
  align-self: start; /* 新增这一行 */
}
修改后的完整代码

HTML

<h1>Hello World</h1>
<div class="container">
  <!--<div class="player">
        <img class="image" src="img/jesus.png">
        <div class="playerData">
            <h3 class="name">Gabriel Jesus</h3>
            <h3 class="age">25</h3>
            <h3 class="country">Brazil</h3>
        </div>
    </div>-->
</div>

CSS

* {
  margin: 0;
  padding: 0
}

body {
  background-color: rgb(203, 17, 17);
  font-family: arial;
}

.container {
  background-color: aquamarine transparent;
  width: fit-content;
  margin: auto;
  display: grid;
  grid-template-columns: auto auto auto;
}

.player {
  background-color: rgb(168, 21, 21);
  width: fit-content;
  box-shadow: 0px 2px 3px 4px rgba(255, 255, 255, .5);
  border-radius: 10px;
  margin: 20px;
  align-self: start; /* 新增属性 */
}

.player img {
  width: 200px;
  height: 200px;
  padding: 5px
}

.playerData {
  display: none;
  max-height: 0;
}

.player.active .playerData {
  background-color: rgb(118, 11, 11);
  padding: 5px;
  border-radius: 0px 0px 10px 10px;
  max-height: 200px;
  display: block;
}

h3 {
  color: white
}

JavaScript

const arsenal = {
    name: 'Arsenal',
    city: 'London',
    startingLineup: {
        gk: {name:'Aaron Ramsdale', age: 24, country:'England', img:'img/ramsdale.png'},
        lb: {name:'Oleksandr Zinchenko', age: 26, country:'Ukraine', img: 'img/zinchenko.jpg'},
        rb: {name:'Ben White', age: 25, country:'England', img: 'img/white.png'},
        lcb: {name:'Gabriel Magalhaes', age: 25, country:'Brazil',img: 'img/gabriel.png'},
        rcb: {name: 'William Saliba', age: 22, country:'France', img: 'img/saliba.png'},
        cdm: {name:'Thomas Partey',age: 29,country:'Ghana', img: 'img/partey.png'},
        cm: {name:'Granit Xhaka',age:30,country:'Switzerland',img: 'img/xhaka face.png'},
        cam: {name:'Martin Odegaard',age:23,country:'Norway',img: 'img/odegaard.png'},
        lw: {name:'Gabriel Martinelli',age:21, country:'Brazil',img: 'img/martinelli.png'},
        rw: {name:'Bukayo Saka',age:21,country:'England',img:'img/saka.png'},
        st: {name:'Gabriel Jesus',age:26,country:'Brazil', img: 'img/jesus.png'}
    }
}

let container = document.querySelector(".container")

Object.entries(arsenal.startingLineup).forEach(([key,value]) => {
    let player = document.createElement("div")
    let playerData = document.createElement("div")

    let image = document.createElement("img")
    let name = document.createElement("h3")
    let age = document.createElement("h3")
    let country = document.createElement("h3")

    image.src = value.img
    let nameNode = document.createTextNode(value.name)
    let ageNode = document.createTextNode(value.age)
    let countryNode = document.createTextNode(value.country)

    name.appendChild(nameNode)
    age.appendChild(ageNode)
    country.appendChild(countryNode)

    image.classList.add("image")
    name.classList.add("h3")
    age.classList.add("h3")
    country.classList.add("h3")

    playerData.append(name, age, country)
    player.append(image, playerData)

    playerData.classList.add("playerData")
    player.classList.add("player")

    container.appendChild(player)

    player.addEventListener("click",() => {
        player.classList.toggle("active")
    })
})

let title = document.querySelector("h1")
title.innerHTML = arsenal.name

内容的提问来源于stack exchange,提问作者TheComic2222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:55:41