我正在尝试在1行中内联3个项目。每个项目都必须有一点空间。问题是,当我添加边距时,第三个项目将换行。我已经尝试向父级添加负边距,但这不起作用。
我用我的问题做了一个例子,例子是使用tailwindcss:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet">
<title>JS Bin</title>
</head>
<body>
<div class="flex flex-wrap -m-2">
<div class="bg-red-500 w-1/3 p-4 m-2">
test
</div>
<div class="bg-red-500 w-1/3 p-4 m-2">
test
</div>
<div class="bg-red-500 w-1/3 p-4 m-2">
test
</div>
</div>
</body>
</html>
我不能删除flex-wrap
,因为它必须每3个项目 Package 一次,而且我不能使用padding
。
我怎么才能让它工作?
8条答案
按热度按时间6mzjoqzu1#
你的问题是你的div是父级宽度的1/3,但是当你在那里加上边距时,总宽度超过了100%。与padding不同,padding被计算为元素宽度的一部分,margin是元素宽度的一部分。
所以这里有两种可能的解决方案。第一种方法是将宽度设置为父宽度的1/3减去所需边距。由于您在示例中使用了
m-2
,根据Tailwind,它似乎是.5rem
,因此我们将该数字加倍以考虑每个框的右侧和左侧的边距,最终结果如下:如果你不喜欢这样,第二个选择,让你保持一个很好的简单的1/3宽度为每个div是使用一个边界上的每个是相同的颜色作为背景色。你的设计将需要如果这是可能的或不。显然,如果你有一个背景图像,或者你的div应该有边界,那么这可能不起作用(尽管你可以总是嵌套div来解决后一种情况下的问题)。
w6lpcovy2#
你需要对你的css做一些小的修改。由于父宽度为100%,每个子宽度为33.33%,因此它不会容纳在一行中沿着包括边距。边距在元素的顶部,因此总宽度变为> 100%,最后一个元素被移动到新的一行。
所以,我们在这里使用
calc
。我们需要有宽度的方式,可以容纳的利润。因此,如果width = calc(33.33% -20 px),这意味着每个div有20 px的空间,可以用来在每一边给予10 px的边距。为了保持一致性,请确保给定的裕度是从33.33%中减去的值的50%。更新了代码(添加了样式标签并相应地修改了css):
希望能帮上忙。回复以进行任何澄清。
t9eec4r03#
如果你和我一样不喜欢使用
33.33333333% -1rem
,你可以使用一个内置的flexbox属性。只需为每个项目设置规则
flex: 1 0 0;
,如下面的代码片段所示。最后一个
0
告诉flexbox忽略每个项目的初始with,然后1
告诉它增长,直到项目一起达到flexbox容器的完整宽度。(第一个0
告诉它不要收缩得比它包含的文本小。q3qa4bjr4#
这肯定会按照您的链接标签工作:
检查:https://jsfiddle.net/sugandhnikhil/o62p7jez/
j8ag8udp5#
一个选项可能是使用透明边框代替边距和背景剪辑,以避免在边框下绘制背景。
https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip
background-clip
CSS属性设置元素的背景是否延伸到其边框框、填充框或内容框之下。um6iljoc6#
我不知道tailwind是怎么回事,但是使用vanilla CSS,我可以实现它不需要黑客
calc
,只需为每个孩子flex: 1;
,为:not(:last-child)
margin-right
当然,我也可以用CSS网格轻松地完成它(均匀地分布在项目中)。如果你提前知道只有3列,那么网格可能会更容易:
crcmnpdw7#
我认为使用Tailwind - Gap通过显示网格this更容易实现这一点。
fiei3ece8#
在许多情况下,您可以通过使用断点相关的flex-wrap / flex-nowrap来实现这一点,并且仅在需要时设置“间隙”。
举个例子。在大屏幕上,你不想打破线,并希望有元素之间的间隙:
lg:flex-nowrap lg:gap-x-5 flex-wrap
您可以以不同的方式合并它以获得您想要的行为。