有很多关于如何使父元素的宽度与子元素相同的问题被建议为类似的问题,但这不是我想要的。
我正在为品牌目的设计软件主题,我不能控制软件,只能访问CSS修改,因此JavaScript或修改DOM是不可能的,否则这将是微不足道的。
仅使用CSS,是否可以实现以下效果。
我有一个包含两列、主内容区域和侧边栏的容器div。侧边栏包含多个包装不同侧边栏元素内容的divs。这些侧边栏元素的内容被设计为按其父元素的100%宽度缩放,当父元素具有固定宽度时,即默认情况下为容器的25%时,它们可以正常工作。
我们需要的是当侧栏内容隐藏时,侧栏消失。虽然可以将每个侧边栏元素中的内容设置为
为了隐藏侧边栏元素的内容,需将
编辑:为了澄清,当内容被隐藏后,侧边栏应消失,无论是通过
再次编辑:由于一些评论,我将尝试再次解释这个问题。
侧边栏具有最小和最大宽度,没有固定宽度,将根据其内部内容进行缩放。由于侧边栏没有固定宽度,基于父元素100%宽度的元素不会像您期望的那样运行,相反,从我所能看到的情况来看,侧边栏默认使用最小宽度,即适合内容所需的最小宽度。我不想要这个效果,我希望侧边栏扩展到容器宽度的25%,如果您将此代码复制到文件中(因为上面的片段可能在较小的窗格中运行,宽度可能超过25%,因此可能不具有代表性)。
最终,我有一个带有最小和最大宽度的 div,并且一个子元素使用百分比。百分比宽度(即
我正在为品牌目的设计软件主题,我不能控制软件,只能访问CSS修改,因此JavaScript或修改DOM是不可能的,否则这将是微不足道的。
仅使用CSS,是否可以实现以下效果。
我有一个包含两列、主内容区域和侧边栏的容器div。侧边栏包含多个包装不同侧边栏元素内容的divs。这些侧边栏元素的内容被设计为按其父元素的100%宽度缩放,当父元素具有固定宽度时,即默认情况下为容器的25%时,它们可以正常工作。
我们需要的是当侧栏内容隐藏时,侧栏消失。虽然可以将每个侧边栏元素中的内容设置为
display: none
,但当所有元素都隐藏时,侧边栏仍占用空白空间。以下示例使用了min-width: fit-content
和25%的max宽度,这是之前固定大小的尺寸,这对于隐藏侧边栏时效果很好,但是侧边栏中的内容不会增长。是否有一种方法使.sidebarElementWrapper
内的内容增长以适应#sidebarArea
的最大宽度?
* {
margin: 0;
box-sizing: border-box;
}
#container {
height: 100%;
display: flex;
flex-direction: row;
}
#contentArea {
width: 100%;
background: #A84652;
}
#sidebarArea {
max-width: 25%;
min-width: fit-content;
background: #4262C2;
}
.sidebarElement {
width: 100%;
padding: 12px;
background: #8b8b8b;
border-bottom: 1px solid #2c2c2c;
}
<div id="container">
<div id="contentArea">
</div>
<div id="sidebarArea">
<div class="sidebarElementWrapper">
<div class="sidebarElement">Sidebar Element 1</div>
</div>
<div class="sidebarElementWrapper">
<div class="sidebarElement">Sidebar Element 2</div>
</div>
</div>
</div>
.sidebarElement
设置为display: none
,而不是其包装器。需要注意的是,由于包装器仍然存在且内容未被删除,只是被隐藏,所以:empty
伪选择器也无法起作用。编辑:为了澄清,当内容被隐藏后,侧边栏应消失,无论是通过
display:none
、宽度或其他机制实现的。当有侧边栏内容时,应占容器宽度的25%。再次编辑:由于一些评论,我将尝试再次解释这个问题。
侧边栏具有最小和最大宽度,没有固定宽度,将根据其内部内容进行缩放。由于侧边栏没有固定宽度,基于父元素100%宽度的元素不会像您期望的那样运行,相反,从我所能看到的情况来看,侧边栏默认使用最小宽度,即适合内容所需的最小宽度。我不想要这个效果,我希望侧边栏扩展到容器宽度的25%,如果您将此代码复制到文件中(因为上面的片段可能在较小的窗格中运行,宽度可能超过25%,因此可能不具有代表性)。
* {
margin: 0;
box-sizing: border-box;
}
body {
width: 100%;
height: 100%;
}
#container {
height: 100%;
display: flex;
flex-direction: row;
}
#contentArea {
width: 100%;
background: #A84652;
}
#sidebarArea {
max-width: 25%;
min-width: fit-content;
background: #4262C2;
}
.sidebarElement {
width: 100%;
padding: 12px;
background: #8b8b8b;
border-bottom: 1px solid #2c2c2c;
}
<div id="container">
<div id="contentArea">
</div>
<div id="sidebarArea">
<div class="sidebarElementWrapper">
<div class="sidebarElement">Sidebar Element 1</div>
</div>
<div class="sidebarElementWrapper">
<div class="sidebarElement">Sidebar Element 2</div>
</div>
</div>
</div>
width:100%
)不会将子元素缩放到元素的最大宽度,而是相对于当前宽度的 100%,因此,上述代码不能实现我需要的效果。
div
元素的情况。您还希望如果包含块使用display:none
隐藏,则侧边栏也会隐藏,对吗?如果是这种情况,那么代码已经实现了这一点。我有遗漏什么吗? - Linek#sidebarArea
)将占据其父元素宽度的25%,这就是我在上面的片段中看到的。对我来说看起来很好!我很难理解您的问题...如果您想在侧边栏内容为空时隐藏它,请不要给它宽度或高度,并让它的子元素确定固定大小(使用百分比不起作用)。这样,如果侧边栏没有内容,它将消失。 - Alen Androsevic