我正在尝试使用li's
布局flexbox
。我将它们设置为列,每列中有3 li's
。问题在于我希望ul
居中。
我使用ul
使align-content: center
居中。当我这样做,并且有更多li's
而不是页面可以显示(溢出)时,开头的li's
会被切断。 (左侧的那些被切断,但右侧的那些显示正常。)
我没有特定数量的li's
,可能介于4到50之间。所以我因此无法删除align-content: center
,因为当我有少量时li's
,(比如说4),结果不是我想要的。
如果ul
没有被切断,我怎样才能居中?
html, body {
margin: 0;
height: 100%;
}
div {
align-items: center;
justify-content: center;
height: 100%;
display: flex;
overflow: auto;
background-color:aqua;
}
ul {
margin-top: auto;
margin-bottom: auto;
flex-direction: column;
width: 100%;
height: 70%;
padding: 0;
display: inline-flex;
flex-wrap: wrap;
align-content: center;
}
li {
flex-basis: calc(100% / 3 - 2px);
/* Subtract the border */
color: firebrick;
border: 1px solid firebrick;
background-color: greenYellow;
list-style-type: none;
width: 200px;
}
<div>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
<li>13</li>
<li>14</li>
<li>15</li>
<li>16</li>
<li>17</li>
<li>18</li>
<li>19</li>
<li>20</li>
</ul>
</div>
答案 0 :(得分:3)
如何在没有被切断的情况下将ul居中?
这是一个非常好的问题,在找到实现这种行为的方法时遇到了一些麻烦。
我不相信您会找到纯粹的CSS
解决方案,但我们可以使用javascript
一点来做。
基本上我已经创建了一个附加到window resize事件的脚本,它将执行以下操作:
#wrapper
200px
)这样做我们在父元素中强制溢出,滚动条将具有正常行为,显示每个元素。
完整代码可在jsfiddle
中找到。
检查以下示例:
function onResize() {
var wrapper = document.querySelector('#wrapper');
var items = wrapper.querySelectorAll('li');
var columns = Math.ceil(items.length / 3);
var width = 200 * columns;
wrapper.style.width = width > window.innerWidth ? width + 'px' : '100%';
}
onResize();
window.addEventListener('resize', onResize);
html,
body {
height: 100%;
text-align: center;
}
*,
*:before,
*:after {
box-sizing: border-box;
padding: 0;
margin: 0;
}
#wrapper {
height: 100%;
display: inline-flex;
align-items: center;
justify-content: center;
background-color: aqua;
}
ul {
height: 75%;
list-style: none;
display: flex;
align-content: center;
flex-direction: column;
flex-wrap: wrap;
}
li {
flex-basis: calc(100% / 3 - 2px);
color: firebrick;
border: 1px solid firebrick;
background-color: greenYellow;
width: 200px;
display: flex;
align-items: center;
justify-content: center;
}
<div id="wrapper">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
</ul>
</div>
答案 1 :(得分:0)
删除align-content并使用ptrace()
答案 2 :(得分:0)
有一个safe
关键字可以居中显示在屏幕上。当前仅在Firefox上受支持:
ul {
align-content: safe center;
}
答案 3 :(得分:0)
我最终做的是给父元素一个覆盖所有内容的集合 min-width
。