简体   繁体   English

如何对齐我的 flexbox 元素并使它们大小相同?

[英]How can I align my flexbox elements and make them the same size?

I'm just starting out using Flexbox and having a little bit of trouble figuring out how to do what I'd like.我刚开始使用 Flexbox,在弄清楚如何做我想做的事情时遇到了一些麻烦。 Ultimately I'm trying to build a nice looking "control panel" / HUD.最终,我正在尝试构建一个漂亮的“控制面板”/ HUD。 Here's what I have so far https://jsfiddle.net/1req8u25/ .这是我到目前为止所拥有的https://jsfiddle.net/1req8u25/

And reproduced here并转载在这里

 #sliders-container { position: absolute; top: 0; right: 0; margin: 20px; padding: 5px; background-color: #333333; display: flex; flex-flow: column wrap; justify-content: space-around; align-items: flex-start; } .slider-container { margin: 2px; padding: 2px; flex: 0 0 100%; display: flex; flex-direction: row; align-items: center; justify-content: center; } .slider-label { margin: 2px; padding: 2px; font-family: "Trebuchet MS", Verdana, sans-serif; font-size: small; color: white; flex: 0 0 40%; } .slider { margin: 2px; padding: 2px; flex: 0 0 50%; } .slider-value { margin: 2px; padding: 2px; font-family: "Trebuchet MS", Verdana, sans-serif; font-size: small; color: white; flex: 0 0 10%; }
 <div id="sliders-container"> <div class="slider-container"> <p class="slider-label">foo</p> <input class="slider" min="0" max="100" type="range"> <p class="slider-value">10</p> </div> <div class="slider-container"> <p class="slider-label">foo-bar-baz</p> <input class="slider" min="0" max="100" type="range"> <p class="slider-value">0</p> </div> <div class="slider-container"> <p class="slider-label">quuuuuuuuuuuuux</p> <input class="slider" min="0" max="100" type="range"> <p class="slider-value">0.0000001</p> </div> </div>

This produces这产生

在此处输入图片说明

Which obviously looks bad.这显然看起来很糟糕。 What I'd like is for each row to take up all necessary space in order to fit everything inside of it, for each left label to be the same size, for each slider to be the same width, and for each right label to be the same size.我想要的是每一行都占用所有必要的空间以适应其中的所有内容,每个左标签的大小相同,每个滑块的宽度相同,每个右标签相同的大小。

Is that possible?那可能吗?

You can use css grid for that. 您可以为此使用CSS网格。

    .slider-container {
  margin: 2px;
  padding: 2px;
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  /* flex: 0 0 100%;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center; */
}

replacing the flex content for 替换弹性内容

  display: grid;
  grid-template-columns: 1fr 1fr 1fr;

grid-template-columns says the size of each column, in this case 1fr means 1 part of the current space. grid-template-columns表示每列的大小,在这种情况下,1fr表示当前空间的1部分。

for align the last labels on the right, you can use the same tags from flexbox, inside .slider-value put: 为了使右边的最后一个标签对齐,您可以在.slider-value put中使用来自flexbox的相同标签:

justify-self: end;

it will align the text on the right side. 它将使文本在右侧对齐。

https://jsfiddle.net/6pz7sjxq/3/ https://jsfiddle.net/6pz7sjxq/3/

First, your total container width is too small. 首先,您的总容器宽度太小。 Same goes for each section (10% might not be enough for the slider-value . 每个部分都一样( slider-value 10%可能还不够。

I'd also replace the p with div since it's not a paragraph you're wrapping with the tag and you don't need it to have vertical space. 我还更换pdiv因为它不是你用标签包装一个段落,你不需要它有垂直空间。

 #sliders-container { position: absolute; top: 0; right: 0; margin: 20px; padding: 5px; background-color: #333333; display: flex; flex-wrap: wrap; justify-content: space-around; align-items: flex-start; box-sizing: border-box; width: 400px; } .slider-container { margin: 2px; padding: 2px; width: 100%; display: flex; flex-direction: row; align-items: center; justify-content: center; } .slider-label { margin: 2px; padding: 2px; font-family: "Trebuchet MS", Verdana, sans-serif; font-size: small; color: white; flex: 0 0 30%; } .slider { margin: 2px; padding: 2px; flex: 0 0 50%; } .slider-value { margin: 2px; padding: 2px; font-family: "Trebuchet MS", Verdana, sans-serif; font-size: small; color: white; flex: 0 0 20%; } 
 <div id="sliders-container"> <div class="slider-container"> <div class="slider-label">foo</div> <input class="slider" min="0" max="100" type="range"> <div class="slider-value">10</div> </div> <div class="slider-container"> <div class="slider-label">foo-bar-baz</div> <input class="slider" min="0" max="100" type="range"> <p class="slider-value">0</p> </div> <div class="slider-container"> <div class="slider-label">quuuuuuuuuuuuux</div> <input class="slider" min="0" max="100" type="range"> <div class="slider-value">0.0000001</div> </div> </div> 

It looks like perfect case for CSS table layout. 对于CSS表格布局来说,这似乎是完美的案例。 Note, wrapped each input with a p tag. 注意,用p标记包装每个input

 .sliders-container { display: table; } .slider-container { display: table-row; } .slider-container p { display: table-cell; vertical-align: middle; margin: 0; } 
 <div id="sliders-container"> <div class="slider-container"> <p class="slider-label">foo</p> <p><input class="slider" min="0" max="100" type="range"></p> <p class="slider-value">10</p> </div> <div class="slider-container"> <p class="slider-label">foo-bar-baz</p> <p><input class="slider" min="0" max="100" type="range"></p> <p class="slider-value">0</p> </div> <div class="slider-container"> <p class="slider-label">quuuuuuuuuuuuux</p> <p><input class="slider" min="0" max="100" type="range"></p> <p class="slider-value">0.0000001</p> </div> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM