gpt4 book ai didi

html - 水平居中时,li 被切断

转载 作者:技术小花猫 更新时间:2023-10-29 12:43:10 26 4
gpt4 key购买 nike

我正在尝试使用 flexbox 布局 li's。我将它们设置为列,每列有 3 个 li's。问题是当我希望 ul 居中时。

我使用 align-content: centerul 居中。当我这样做时,如果 li's 多于页面可以显示的数量(溢出),则开头的 li's 会被截断。 (左边的被截断了,但是右边的显示正常。)

我不会有特定数量的 li ,它可以在 4 到 50 之间。 因此我无法删除 align-content: center,因为当我有少量 li 的 时,(比如说 4),结果不是我想要的。

如何让 ul 居中而不被切断?

JSFiddle

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>

最佳答案

How can I center the ul without having it get cut off?

这是一个非常好的问题,在想出实现这种行为的方法时遇到了一些困难。

我不相信你会找到一个纯粹的 CSS 解决方案,但是我们可以使用一些 javascript 来做到这一点。

基本上我创建了一个附加到窗口调整大小事件的脚本,它将执行以下操作:

  1. 检查包装器元素中有多少项:#wrapper
  2. 将元素数除以 3(因为我们在每列中有 3 个元素)以发现显示元素需要多少列
  3. 使用以下公式为包装元素分配宽度:列数 * 每个元素的宽度(在我们的例子中为 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>

关于html - 水平居中时,li 被切断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33590889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com