我有一个网格,里面有框,每个框的大小和标记都相同。
我想做的是让这些盒子填满页面的整个宽度,它们之间有一个均匀的间隙。其想法是,如果浏览器窗口移动,框中的项目将重新堆叠。
我研究了各种方法,包括使用bootstrap 3中的网格系统,以及HERE
我也考虑过使用JS插件来实现这一点,比如Masonry,尽管它会起作用,但似乎有点过头了,因为所有的瓷砖尺寸都是一样的。
现在我几乎在这里工作了:http://jsfiddle.net/3xshcn7p/
这种当前方法的唯一问题是,如果浏览器窗口<719px,但>481,它将只显示其中的2个框,并在右手边留下一个大空格。
当屏幕不够大,无法容纳每行的下一个框数时,所有框之间都会出现相同的问题。
如果这完全可以使用css
实现,或者必须使用js
,有什么想法吗?
您可以对解决方案使用flexbox
方法。
如果布局的所有元素周围需要偶数空间,则使用justify-content: space-around
。
布局的元素之间的偶数空间需要justify-content: space-between
。
body {
box-sizing: border-box;
height: 100%;
background: #336633;
}
.wrapper {
display: flex;
flex-flow: row wrap;
justify-content: space-around;
}
.box {
width: 200px;
height: 250px;
background: white;
float: left;
margin: 20px;
}
<div class="wrapper">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<!--wrapper-->
尝试将text-align: center;
添加到body
元素,然后将float: left;
更改为display: inline-block;
。
例如
body {
box-sizing: border-box;
height:100%;
background: #336633;
text-align: center;
}
.box {
width: 200px;
height: 250px;
background: white;
display: inline-block;
margin: 20px;
}
这是JsFiddle链接
更新:我也回答了类似的问题。使用CSS/JQUERY/HTML 的中心多反应潜水
希望能有所帮助。
Flexbox可以做到这一点,
Jsfidle演示
body {
box-sizing: border-box;
height:100%;
background: #336633;
}
.wrapper {
display:flex;
flex-direction:row;
justify-content:space-around;
flex-wrap: wrap;
}
.box {
width: 200px;
height: 250px;
background: white;
margin: 20px;
}
如果要填充整个宽度,则为1。你把.box的宽度固定在200像素,然后你就可以居中,或者2。你给它们一个灵活的宽度。这里还有一个解决方案,具有灵活的宽度和灵活的边距,使用媒体查询。
body {
box-sizing: border-box;
height:100%;
background: #336633;
}
.box {
height: 250px;
background: white;
float: left;
/*margin: 20px;*/
margin: 2%;
width: 100%;
}
/* 50% - ( 2 * 2% margins ), etc */
@media (min-width: 240px) { .box { width: 46%; } }
@media (min-width: 480px) { .box { width: 29%; } }
@media (min-width: 720px) { .box { width: 21%; } }
@media (min-width: 960px) {
/* Now we set margin to 1%, so .box width is 20% - (2 * 1% margins) */
.box { width: 18%; }
.box { margin: 1%; }
}
@media (min-width: 1200px) { .box { width: 14.666%; } }
@media (min-width: 1440px) { .box { width: 12.285%; } }
@media (min-width: 1680px) { .box { width: 10.5%; } }
@media (min-width: 1920px) {
.box { width: 10.111%; }
.box { margin: 0.5%; }
}
@media (min-width: 2160px) { .box { width: 9%; } }
/* and just go further if you want more columns */
/* media queries if you want fixed margin of 20px on each side
@media (min-width: 240px) { .box { width: calc(50% - 40px); } }
@media (min-width: 480px) { .box { width: calc(33% - 40px); } }
@media (min-width: 720px) { .box { width: calc(25% - 40px); } }
and so on
*/
您可以使用这些框的宽度和边距的相对值。例如width: 30%
/width: 30vw;
。
.box {
width: 30vw;
margin: 1vw;
height: 250px;
background: white;
float: left;
}
http://jsfiddle.net/3xshcn7p/3/
我会使用css列。像这样:
article {
columns: 2 200px;
column-gap: 4em;
column-rule: 1px dotted #ddd;
}
如果窗口变小,列数就会减少。这是css-tricks.com的CodePen
http://codepen.io/katydecorah/pen/0cef950304c03248935b3b821e8b7cec