英文:
Filling space horizontally inside container
问题
我有一个容器,里面包含两个元素:一个搜索栏和下面的一个表格。在表格内部,我有一个位于左侧的侧边栏和右侧的一些内容。容器的高度是固定的,我希望侧边栏和内容在垂直方向上填充空间。
我可以让表格填充空间,但无法让侧边栏和内容填充。以下是我能够实现的最接近的效果:
<div class="projects-table">
<div class="search">
<h3>搜索...</h3>
</div>
<div class="projects-content">
<div class="sidebar">
<p>侧边栏</p>
<p>侧边栏</p>
</div>
<p class="content">内容</p>
</div>
</div>
* {
font-family: "Poppins", sans-serif;
}
body {
background-size: 100%;
background-color: black;
background-repeat: "no-repeat";
background-position: 0 0;
color: aliceblue;
margin: 0;
padding: 0;
}
.projects-table {
border-style: solid;
border-radius: 1rem;
border-width: 0.25rem;
border-color: slategrey;
margin-top: 5rem;
padding: 1rem;
height: 20rem;
display: flex;
flex-direction: column;
}
.projects-table .search {
opacity: 0.25;
color: white;
display: flex;
flex-direction: row;
justify-content: start;
align-items: center;
border-bottom: solid;
border-width: 0.1rem;
}
.projects-table .search img {
width: 1.25rem;
height: 1.25rem;
margin-right: 0.25rem;
}
.projects-table .projects-content {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: flex-start;
margin-top: 1rem;
flex-grow: 1;
border-style: solid;
}
.projects-table .projects-content .sidebar {
width: 10%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
border-style: solid;
margin: 0.5rem;
}
.projects-table .projects-content .sidebar p {
border-style: solid;
border-width: 0.1rem;
border-radius: 0.5rem;
margin-top: 0;
margin-bottom: 0.5rem;
padding: 1rem;
}
.projects-table .projects-content .content {
width: 100%;
height: 100%;
margin: 0.5rem 1rem 0.5rem 1rem;
border-style: solid;
border-width: 0.1rem;
border-radius: 0.5rem;
padding: 1rem;
}
英文:
I have a container that contains two elements: a search bar, and a table under it. Inside the table, I have a sidebar to the left and some content to the right. The container has fixed height, and I want the sidebar and content to fill the space vertically.
I can get the table to fill the space, but not the sidebar and the content. This is the closest I can get:
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-css -->
* {
font-family: "Poppins", sans-serif;
}
body {
background-size: 100%;
/*background-image: url('./images/diego-ph-5LOhydOtTKU-unsplash.jpg');*/
background-color: black;
background-repeat: "no-repeat";
background-position: 0 0;
color: aliceblue;
margin: 0;
padding: 0;
}
.projects-table {
border-style: solid;
border-radius: 1rem;
border-width: 0.25rem;
border-color: slategrey;
margin-top: 5rem;
padding: 1rem;
height: 20rem;
display: flex;
flex-direction: column;
}
.projects-table .search {
opacity: 0.25;
color: white;
display: flex;
flex-direction: row;
justify-content: start;
align-items: center;
border-bottom: solid;
border-width: 0.1rem;
}
.projects-table .search img {
width: 1.25rem;
height: 1.25rem;
margin-right: 0.25rem;
}
.projects-table .projects-content {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: flex-start;
margin-top: 1rem;
flex-grow: 1;
border-style: solid;
}
.projects-table .projects-content .sidebar {
width: 10%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
border-style: solid;
margin: 0.5rem;
}
.projects-table .projects-content .sidebar p {
border-style: solid;
border-width: 0.1rem;
border-radius: 0.5rem;
margin-top: 0;
margin-bottom: 0.5rem;
padding: 1rem;
}
.projects-table .projects-content .content {
width: 100%;
height: 100%;
margin: 0.5rem 1rem 0.5rem 1rem;
border-style: solid;
border-width: 0.1rem;
border-radius: 0.5rem;
padding: 1rem;
}
<!-- language: lang-html -->
<div class="projects-table">
<div class="search">
<h3>Search...</h3>
</div>
<div class="projects-content">
<div class="sidebar">
<p>Sidebar</p>
<p>Sidebar</p>
</div>
<p class="content">content</p>
</div>
</div>
<!-- end snippet -->
答案1
得分: 1
你可以尝试设置 flexbox 的 align-items: stretch
和 flex-grow: 1
属性:
.projects-table .projects-content {
align-items: stretch;
}
.projects-table .projects-content .content {
flex-grow: 1;
}
英文:
You can try to set flexbox align-items:stretch
and flex-grow:1
properties:
.projects-table .projects-content {
align-items: stretch;
}
.projects-table .projects-content .content {
flex-grow: 1;
}
答案2
得分: 0
以下是翻译好的部分:
"All you need to do is to give the content items a flex-grow: 1
" 翻译为 "你只需要给内容项添加 flex-grow: 1
"。
剩下的是代码部分,不需要翻译。
英文:
All you need to do is to give the content items a flex-grow: 1
.projects-table .projects-content .sidebar p {
flex-grow: 1;
...
}
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-css -->
* {
font-family: "Poppins", sans-serif;
}
body {
background-size: 100%;
/*background-image: url('./images/diego-ph-5LOhydOtTKU-unsplash.jpg');*/
background-color: black;
background-repeat: "no-repeat";
background-position: 0 0;
color: aliceblue;
margin: 0;
padding: 0;
}
.projects-table {
border-style: solid;
border-radius: 1rem;
border-width: 0.25rem;
border-color: slategrey;
margin-top: 5rem;
padding: 1rem;
height: 20rem;
display: flex;
flex-direction: column;
}
.projects-table .search {
opacity: 0.25;
color: white;
display: flex;
flex-direction: row;
justify-content: start;
align-items: center;
border-bottom: solid;
border-width: 0.1rem;
}
.projects-table .search img {
width: 1.25rem;
height: 1.25rem;
margin-right: 0.25rem;
}
.projects-table .projects-content {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: flex-start;
margin-top: 1rem;
flex-grow: 1;
border-style: solid;
}
.projects-table .projects-content .sidebar {
width: 10%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
border-style: solid;
margin: 0.5rem;
}
.projects-table .projects-content .sidebar p {
flex-grow: 1;
border-style: solid;
border-width: 0.1rem;
border-radius: 0.5rem;
margin-top: 0;
margin-bottom: 0.5rem;
padding: 1rem;
}
.projects-table .projects-content .content {
width: 100%;
height: 100%;
margin: 0.5rem 1rem 0.5rem 1rem;
border-style: solid;
border-width: 0.1rem;
border-radius: 0.5rem;
padding: 1rem;
}
<!-- language: lang-html -->
<div class="projects-table">
<div class="search">
<h3>Search...</h3>
</div>
<div class="projects-content">
<div class="sidebar">
<p>Sidebar</p>
<p>Sidebar</p>
</div>
<p class="content">content</p>
</div>
</div>
<!-- end snippet -->
答案3
得分: 0
这里是一种替代方法,用于执行你正在做的事情。我发现使用这样的方式可以使长期维护更容易,并且可以更容易理解复杂的定位而不需要复杂的样式设置。
我发现在一个网格中使用嵌套网格可以使复杂布局更容易。请注意,我在这里使用了一些网格区域的名称,只是为了清晰地表示每个区域的位置;还使用了一些丑陋的样式,以显示各个元素的位置等。
- 使用一个网格作为“页面”,以解决先前的大5em边距可能用于某些内容的情况,这样可以避免一些奇怪的固定位置和大小调整的挑战。
- 添加一些
包装器作为“容器”。
- 使用“container”来帮助描述每个容器块的布局与视觉样式。
<div class="page-container">
<div class="projects-table project-container">
<div class="search search-container">
<div class="image-container">
<img src="" alt="IMG">
</div>
<div class="search-search">
<h3>搜索...</h3>
</div>
</div>
<div class="projects-content content-container">
<div class="sidebar">
<p>侧边栏</p>
<p>侧边栏</p>
</div>
<p class="content">内容</p>
</div>
</div>
</div>
* {
font-family: "Poppins", sans-serif;
}
body {
background-color: #000000;
color: aliceblue;
margin: 0;
padding: 0;
font-size: 16px;
box-sizing: border-box;
}
.page-container {
background-color: #404040;
display: grid;
grid-template-columns: 1fr;
/* 先前的5em边距,但如果需要内容,允许内容在该行中 */
grid-template-rows: 5em auto;
grid-template-areas:
"nothingyet"
"projectthings";
}
.project-container {
grid-area: projectthings;
background-color: #004020;
/* 告诉此容器成为自动行 */
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 5em auto;
grid-template-areas:
"searchc"
"contentc";
height: 20rem;
}
/* 其余的CSS样式请参考你的原始代码 */
注意:这只是你代码的一部分,其中包含HTML和CSS。如果需要完整的翻译或其他信息,请继续提问。
英文:
Here is a bit of an alternate way to do what you are doing. I find using something like this makes long-term maintenance easier and individual "block" styling easier to understand without complex positioning.
I find that using a grid with grids IN it makes complex layout easier. Note here I used some grid-areas names just to make things clear what was where; some ugly styling just to show what is where etc.
- using a grid for the "page" to account for that prior large 5em margin that MGIHT be for some content? avoids some weird fix positioning and sizing challenges if so
- adding some div wrappers for "containers"
- used "container" to help describe layout vs visual styles for each container block
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-css -->
* {
font-family: "Poppins", sans-serif;
}
body {
background-color: #000000;
color: aliceblue;
margin: 0;
padding: 0;
font-size: 16px;
box-sizing: border-box;
}
.page-container {
background-color: #404040;
display: grid;
grid-template-columns: 1fr;
/* the 5em nothingyet is the prior 5em margin but allows content to be in that row if needed */
grid-template-rows: 5em auto;
grid-template-areas:
"nothingyet"
"projectthings";
}
.project-container {
grid-area: projectthings;
background-color: #004020;
/* tell the this container to be that auto row */
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 5em auto;
grid-template-areas:
"searchc"
"contentc";
height: 20rem;
}
.search-container {
grid-area: searchc;
display: grid;
grid-template-rows: afr;
grid-template-columns: 1.25em auto;
/* this 0.25em was padding before but really is a "gap" between image and h1 */
grid-gap: 0.25em;
grid-template-areas: "imgc searchy";
align-items: center;
border-bottom: solid;
border-width: 0.1rem;
border-color: #7FFF00;
opacity: 0.25;
color: white;
}
.content-contaIner {
grid-area: contentc;
background-color: #FF0080;
display: grid;
grid-template-columns: 10% auto;
grid-template-rows: 20em;
grid-template-areas: "sidebar content";
}
.sidebar {
grid-area: sidebar;
}
.content {
grid-area: content;
}
.image-container {
grid-area: imgc;
height: 1.25em;
}
.search-search {
grid-area: searchy;
}
/* below here is just the styling from before mostly - see inline comments */
.projects-table {
border-style: solid;
border-radius: 1rem;
border-width: 0.25rem;
border-color: slategrey;
}
/* moved to the search-container grid definition
.projects-table .search img {
width: 1.25rem;
height: 1.25rem;
margin-right: 0.25rem;
}
*/
.projects-table .search .image-container img {
/* depends on image and use intent really */
height: 100%;
width: 100%;
border: solid yellow 3px;
}
.projects-table .projects-content {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: flex-start;
margin-top: 1rem;
flex-grow: 1;
border-style: solid;
}
.projects-table .projects-content .sidebar {
/* moved to content-container css
width: 10%;
height: 100%;
*/
display: flex;
flex-direction: column;
align-items: center;
border-style: solid;
margin: 0.5rem;
}
.projects-table .projects-content .sidebar p {
border-style: solid;
border-width: 0.1rem;
border-radius: 0.5rem;
margin-top: 0;
margin-bottom: 0.5rem;
padding: 1rem;
}
.projects-table .projects-content .content {
/* moved to content-container css as auto
width: 100%;
height: 100%;
*/
margin: 0.5rem 1rem 0.5rem 1rem;
border-style: solid;
border-width: 0.1rem;
border-radius: 0.5rem;
padding: 1rem;
}
/* can be whatever but just to show it is contained in the container block allocated to it */
.content{width:100%;}
<!-- language: lang-html -->
<div class="page-container">
<div class="projects-table project-container">
<div class="search search-container">
<div class="image-container">
<!-- might not seem to line up but the alt text IMG is bigger than the 1.25em -->
<img src="" alt="IMG">
</div>
<div class="search-search">
<h3>Search...</h3>
</div>
</div>
<div class="projects-content content-container">
<div class="sidebar">
<p>Sidebar</p>
<p>Sidebar</p>
</div>
<p class="content">content</p>
</div>
</div>
</div>
<!-- end snippet -->
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论