CSS中Flex布局应用实践总结

① 两端对齐

比如 要求ul下的li每行四个,中间间隔但是需要两段对齐,如下图所示:

这是除了基本的flex布局外,还需要用到:nth-of-type伪类来控制每行第一个与第四个的padding。

css 复制代码
.hl_list{
		width: 100%;
		display: flex;
		align-items: flex-start;
		flex-wrap: wrap;
		justify-content: space-between;
	}
	
	.ul_list .hl_list li{
		width: 25%;
		padding: 0 10px;
	}
	.ul_list .hl_list li:nth-of-type(4n+1){
		padding-left: 0;
	}
	.ul_list .hl_list li:nth-of-type(4n+4){
		padding-right: 0;
	}

② 单行截取多余的

css 复制代码
display: flex;
flex-wrap: nowrap;
overflow-x: hidden;

flex-wrap: nowrap;规定item不换行。
overflow-x: hidden;规定X轴的超出隐藏

③ 子元素宽度不变

父元素设置flex布局,需要保证某个子元素宽度不变,可以为子元素设置属性如下:

css 复制代码
flex-shrink: 0

子元素不设置 flex-shrink: 0 时子元素会随父元素宽度自动等分总宽度,子元素设置的宽度会自动失效

④ 两端对齐且间距一样且子元素宽度一样

要让一个 div 的四个子元素两端对齐,左右不留间距,且中间元素的间距一样,可以使用 CSS 的 Flexbox 布局。Flexbox 提供了一种简单而强大的方法来实现这种布局需求。

示例代码

HTML
html 复制代码
<div class="container">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
</div>
CSS
css 复制代码
.container {
    display: flex; /* 使用Flexbox布局 */
    justify-content: space-between; /* 子元素两端对齐,中间间距相等 */
    width: 100%; /* 容器宽度,可以根据需要调整 */
}

.item {
    flex-basis: 24%; /* 每个子元素占容器宽度的24%,留出1%的空间作为间隔 */
    box-sizing: border-box; /* 确保内边距和边框不会影响宽度计算 */
}

解释

  1. display: flex; :将 .container 设置为 Flexbox 布局。
  2. justify-content: space-between;:使子元素在主轴上两端对齐,中间的间距相等。
  3. width: 100%; :设置 .container 的宽度为100%,确保它占据整个可用空间。
  4. flex-basis: 24%;:每个子元素的初始宽度设置为容器宽度的24%,这样可以确保四个子元素加上中间的间隔总和为100%。
  5. box-sizing: border-box;:确保内边距和边框不会影响子元素的宽度计算。

注意事项

  • flex-basis: 24%; 是一个经验值,确保四个子元素加上中间的间隔总和为100%。如果你需要更精确的控制,可以调整这个值。
  • 如果你希望子元素之间有固定的间距,可以使用 gap 属性,但这会使得子元素的宽度不再是固定比例。

使用 gap 属性(可选)

如果你希望子元素之间有固定的间距,可以使用 gap 属性,但需要注意调整子元素的宽度以适应总宽度。

CSS
css 复制代码
.container {
    display: flex;
    justify-content: space-between;
    width: 100%;
    gap: 10px; /* 子元素之间的固定间距 */
}

.item {
    flex: 1; /* 子元素等分剩余空间 */
    max-width: calc(25% - 10px); /* 调整子元素的最大宽度,确保总和为100% */
    box-sizing: border-box;
}

解释

  1. gap: 10px;:设置子元素之间的固定间距为10像素。
  2. flex: 1;:使每个子元素等分剩余空间。
  3. max-width: calc(25% - 10px);:调整子元素的最大宽度,确保四个子元素加上中间的间隔总和为100%。

通过这些方法,你可以轻松地实现一个 div 的四个子元素两端对齐,左右不留间距,且中间元素的间距一样的布局。

⑤ 在④前提下增大间距

要在上述前提下增大子元素之间的间距,可以调整 flex-basis 的值或者使用 gap 属性。以下是两种方法的详细说明:

方法一:调整 flex-basis 的值

通过调整 flex-basis 的值,可以间接增大子元素之间的间距。例如,将 flex-basis 设置为22%,这样每个子元素的宽度会稍小一些,从而增加中间的间距。

HTML
html 复制代码
<div class="container">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
</div>
CSS
css 复制代码
.container {
    display: flex;
    justify-content: space-between;
    width: 100%;
}

.item {
    flex-basis: 22%; /* 调整子元素的宽度,减小每个子元素的宽度以增加间距 */
    box-sizing: border-box;
}

方法二:使用 gap 属性

使用 gap 属性可以直接设置子元素之间的间距。这种方法更直观,更容易控制间距的大小。

HTML
html 复制代码
<div class="container">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
</div>
CSS
css 复制代码
.container {
    display: flex;
    justify-content: space-between;
    width: 100%;
    gap: 20px; /* 设置子元素之间的间距为20像素 */
}

.item {
    flex: 1; /* 子元素等分剩余空间 */
    max-width: calc(25% - 20px / 3); /* 调整子元素的最大宽度,确保总和为100% */
    box-sizing: border-box;
}

解释

  1. gap: 20px;:设置子元素之间的间距为20像素。
  2. flex: 1;:使每个子元素等分剩余空间。
  3. max-width: calc(25% - 20px / 3); :调整子元素的最大宽度,确保四个子元素加上中间的间隔总和为100%。这里 20px / 3 是因为有三个间隔,每个间隔为20像素。

注意事项

  • calc(25% - 20px / 3):这个计算确保了子元素的宽度加上间隔的总和为100%。具体来说,每个子元素占用25%的宽度,减去每个间隔的平均值。
  • box-sizing: border-box;:确保内边距和边框不会影响子元素的宽度计算。

通过这两种方法,你可以灵活地调整子元素之间的间距,以满足你的布局需求。

相关推荐
谢尔登1 小时前
Vue 和 React 的异同点
前端·vue.js·react.js
祈澈菇凉5 小时前
Webpack的基本功能有哪些
前端·javascript·vue.js
小纯洁w5 小时前
Webpack 的 require.context 和 Vite 的 import.meta.glob 的详细介绍和使用
前端·webpack·node.js
想睡好6 小时前
css文本属性
前端·css
qianmoQ6 小时前
第三章:组件开发实战 - 第五节 - Tailwind CSS 响应式导航栏实现
前端·css
zhoupenghui1686 小时前
golang时间相关函数总结
服务器·前端·golang·time
White graces6 小时前
正则表达式效验邮箱格式, 手机号格式, 密码长度
前端·spring boot·spring·正则表达式·java-ee·maven·intellij-idea
庸俗今天不摸鱼7 小时前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
bubusa~>_<7 小时前
解决npm install 出现error,比如:ERR_SSL_CIPHER_OPERATION_FAILED
前端·npm·node.js
流烟默8 小时前
vue和微信小程序处理markdown格式数据
前端·vue.js·微信小程序