CSS,Flexbox 大小问题。有人可以解释这是怎么回事吗?
CSS, Flexbox sizing issue. Can someone please explain what is going on?
您好,我正在尝试制作一个 netflix 克隆,并让一切都按照我想要的方式工作,但我遇到了布局问题。无论我如何设置包含图像的 div 的宽度,它们都不会改变。我使用过控制台,似乎没有任何规则可以阻止它们增长。我已将图像设置为其父容器宽度的 100%,但这会使它们变小。
我真的很难 CSS 因为没有控制台告诉你出了什么问题。如果有人可以看一下并帮助我理解,我将不胜感激。 (另外,有谁知道在与 CSS 打交道时需要多长时间才能停止感觉自己像个白痴?)
我在下面包含了代码。
row__imgLarge 仅应用于一个特定的行。这与其他人有同样的问题。
<div className="row__images">
{movies.map((movie) => (
<div
className={`row__imgContainer ${
isLargeRow ? "row__imgLarge" : ""
}`}
key={movie.id}
onClick={() => handleClick(movie)}
>
<img
className="row__image"
// {some movies don't have the a backdrop image, in these cases use poster instead}
src={`${base_url}/${
isLargeRow || !movie.backdrop_path
? movie.poster_path
: movie.backdrop_path
}`}
alt={movie?.title || movie?.name || movie?.original_name}
/>
</div>
))}
.row__images {
display: flex;
overflow-y: hidden;
overflow-x: scroll;
padding: 20px;
}
.row__imgContainer {
/* width: 15.8vw; */
max-height: 40vh;
width: 150vw;
margin-right: 0.6vw;
}
.row__image {
width: 100%;
transition: transfrom 440ms;
}
.row__imgLarge {
max-height: 40vh;
}
弹性项目(弹性容器的子项)的宽度由弹性容器决定。您需要使用 flex 属性来控制它们。查看项目上的 justify-content
on the container, and flex-grow
, flex-shrink
, and flex-basis
。
如果您希望项目具有特定的不变宽度,例如,您可以将增长和收缩设置为 0,并将基础设置为所需的宽度:
.row_imgContainer {
flex-grow: 0; /* don't grow */
flex-shrink: 0; /* don't shrink */
flex-basis: 200px; /* desired width */
}
.row_imgContainer {
flex: 0 0 200px; /* shorthand, same as above */
}
如果您只想要 horizontally-scrolling 行图像,请在 flex 容器上设置 overflow: auto
(或滚动)并且不要让项目收缩:
.container {
display: flex;
overflow-x: auto;
max-width: 500px;
}
.container>* {
flex: 0 0 200px;
}
<div class="container">
<img src="//placekitten.com/200" />
<img src="//placekitten.com/201" />
<img src="//placekitten.com/200" />
<img src="//placekitten.com/199" />
<img src="//placekitten.com/200" />
<img src="//placekitten.com/202" />
<img src="//placekitten.com/204" />
</div>
您好,我正在尝试制作一个 netflix 克隆,并让一切都按照我想要的方式工作,但我遇到了布局问题。无论我如何设置包含图像的 div 的宽度,它们都不会改变。我使用过控制台,似乎没有任何规则可以阻止它们增长。我已将图像设置为其父容器宽度的 100%,但这会使它们变小。
我真的很难 CSS 因为没有控制台告诉你出了什么问题。如果有人可以看一下并帮助我理解,我将不胜感激。 (另外,有谁知道在与 CSS 打交道时需要多长时间才能停止感觉自己像个白痴?)
我在下面包含了代码。 row__imgLarge 仅应用于一个特定的行。这与其他人有同样的问题。
<div className="row__images">
{movies.map((movie) => (
<div
className={`row__imgContainer ${
isLargeRow ? "row__imgLarge" : ""
}`}
key={movie.id}
onClick={() => handleClick(movie)}
>
<img
className="row__image"
// {some movies don't have the a backdrop image, in these cases use poster instead}
src={`${base_url}/${
isLargeRow || !movie.backdrop_path
? movie.poster_path
: movie.backdrop_path
}`}
alt={movie?.title || movie?.name || movie?.original_name}
/>
</div>
))}
.row__images {
display: flex;
overflow-y: hidden;
overflow-x: scroll;
padding: 20px;
}
.row__imgContainer {
/* width: 15.8vw; */
max-height: 40vh;
width: 150vw;
margin-right: 0.6vw;
}
.row__image {
width: 100%;
transition: transfrom 440ms;
}
.row__imgLarge {
max-height: 40vh;
}
弹性项目(弹性容器的子项)的宽度由弹性容器决定。您需要使用 flex 属性来控制它们。查看项目上的 justify-content
on the container, and flex-grow
, flex-shrink
, and flex-basis
。
如果您希望项目具有特定的不变宽度,例如,您可以将增长和收缩设置为 0,并将基础设置为所需的宽度:
.row_imgContainer {
flex-grow: 0; /* don't grow */
flex-shrink: 0; /* don't shrink */
flex-basis: 200px; /* desired width */
}
.row_imgContainer {
flex: 0 0 200px; /* shorthand, same as above */
}
如果您只想要 horizontally-scrolling 行图像,请在 flex 容器上设置 overflow: auto
(或滚动)并且不要让项目收缩:
.container {
display: flex;
overflow-x: auto;
max-width: 500px;
}
.container>* {
flex: 0 0 200px;
}
<div class="container">
<img src="//placekitten.com/200" />
<img src="//placekitten.com/201" />
<img src="//placekitten.com/200" />
<img src="//placekitten.com/199" />
<img src="//placekitten.com/200" />
<img src="//placekitten.com/202" />
<img src="//placekitten.com/204" />
</div>