我有一堆div,里面有一个内容div。在内容div中有3个元素,h1
,p
和span
,所有左对齐。我想要发生的是以下几点:
h1
中的文字或span
中的文字一样宽(以较长者为准) ,如果高于max-width
这些应该包裹p
应该是内容div的75%,但不会对内容div的大小产生影响(有效率为h1
或span
的75%,以较长者为准)但是我遇到了以下问题:
p
元素会导致内容div扩展到max-width
,无论h1
或{{1}的大小}}。我已经尝试使用绝对定位来解决这个问题,但它会破坏div的垂直居中span
元素会留下一个空白,其中单词突破2行,使内容div不会显示为居中请参阅下面的代码段,了解我的目标以及出现的问题,边框只是为了帮助您了解正在发生的事情。
有没有人知道这是怎么回事?我想坚持使用CSS,因为这些需要响应,尽管如果有一个简单的JS / jQuery解决方案,它将被考虑。
编辑:为了澄清我在此之后的视觉效果,这是为什么示例好或坏。我还添加了删除边框的功能,以展示我的意思是以视觉为中心:
1)好:内容div适合h1
的宽度,看起来居中,没有边框作为h1
左右相等的空格
2)好:内容div适合h1
的宽度,因为它比span
长,看起来居中,没有边框作为h1
左右相等的空格
问题1:
3)错误:span
正在扩展内容div的宽度,看起来向右移动没有边框,因为右边比左边更多。如果p
没有扩展div并且保持在宽度的75%,那么这将不会发生
p
扩展内容div,但现在它不是流程的一部分,它会扰乱垂直居中
问题2:
5)错:这里的问题是p
元素,因为它现在比它分成2行的h1
更长。但是第一行的末尾和div的max-width
之间的额外空间是保留的,所以当删除边框时它看起来不居中,因为右边的空间比{{1}的左边多。 }
6)修复5但不是解决方案:手动断开线(使用max-width
)可以实现我需要的外观,因为h1
未扩展到<br>
所以看起来没有边界的中心。这在实际应用中是不可行的,因为div的宽度可以变化
h1
max-width
function toggleBorders() {
$('h1, p, span').toggleClass('bordered');
$('.content').toggleClass('content-bordered');
}
答案 0 :(得分:-1)
您的问题非常有趣。我通过将description
设置为与max-width
相同来解决了min-width
的div扩展问题。然后它无法扩展。
我无法弄清白色空间和标题的问题。它看起来像我的中心。
这是我得到的:
.box-holder {
display: flex;
flex-flow: row wrap;
}
.box {
flex: 1 0 350px;
display: flex;
align-items: center;
justify-content: center;
height: 350px;
border: 1px solid blue;
}
.content {
min-width: 50%;
max-width: 50%;
border: 1px solid red;
}
h1,
p,
span {
border: 1px solid green;
}
p {
width: 75%;
}
.abs {
position: absolute;
}
&#13;
<div class="box-holder">
<div class="box">
<div class="content">
<h1>1. Example Title</h1>
<p>Good Example</p>
<span>Link</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>2. Title</h1>
<p>Min Width Good Example</p>
<span>Link</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>3. Example Title</h1>
<p>When the description gets too long then it DOESN'T expand the content div</p>
<span>Link</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>4. Example Title Size</h1>
<p class="abs">Setting absolute position avoids expansion but messes up the vertical layout</p>
<span class="abs">Link</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>5. Also Long Titles Leave White Space</h1>
<p>This does look centered</p>
<span>Link</span>
</div>
</div>
</div>
&#13;
我希望它有所帮助,这就是你正在寻找的东西。
修改强>
使用text-align: justify;
.box-holder {
display: flex;
flex-flow: row wrap;
}
.box {
flex: 1 0 350px;
display: flex;
align-items: center;
justify-content: center;
height: 350px;
border: 1px solid blue;
}
.content {
min-width: 50%;
max-width: 50%;
border: 1px solid red;
}
h1,
p,
span {
border: 1px solid green;
}
p {
width: 75%;
}
.abs {
position: absolute;
}
/*NEW CSS:*/
h1 {
text-align: justify;
}
&#13;
<div class="box-holder">
<div class="box">
<div class="content">
<h1>1. Example Title</h1>
<p>Good Example</p>
<span>Link</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>2. Title</h1>
<p>Min Width Good Example</p>
<span>Link</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>3. Example Title</h1>
<p>When the description gets too long then it DOESN'T expand the content div</p>
<span>Link</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>4. Example Title Size</h1>
<p class="abs">Setting absolute position avoids expansion but messes up the vertical layout</p>
<span class="abs">Link</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>5. Also Long Don't Titles Leave White Space</h1>
<p>This does look centered</p>
<span>Link</span>
</div>
</div>
</div>
&#13;