- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一堆 div,里面有一个内容 div。在内容 div 中有 3 个元素,一个 h1
, 一个 p
和一个 span
, 全部左对齐。我想要发生的事情如下:
h1
中的 text 一样宽或 span
中的文本 (以较长者为准),如果高于 max-width
这些应该包起来p
应该是内容 div 的 75%,但不会影响内容 div 的大小(实际上是 h1
或 span
的 75%,以较长者为准)但是我遇到了以下问题:
p
元素导致内容 div 扩展到其 max-width
无论 h1
的大小如何或 span
.我试过使用绝对定位来解决这个问题,但它会破坏 div 的垂直居中h1
元素在单词超过 2 行的地方留下一个空隙,使内容 div 不显示在中心请参阅下面的代码片段以阐明我在做什么以及出了什么问题,边框只是为了帮助可视化正在发生的事情。
有没有人知道这是怎么可能的?我想坚持使用 CSS,因为它们需要响应,但如果有一个简单的 JS/jQuery 解决方案,我会考虑。
编辑:为了阐明我想要的视觉效果,这里简要说明了这些示例的好坏原因。我还添加了删除边框的功能,以展示我所说的视觉居中的意思:
1) 好:内容 div 适合 h1
的宽度, 看起来没有边框居中,因为 h1
左右的空间相等
2) 好:内容 div 适合 span
的宽度因为它比 h1
长, 看起来没有边框居中,因为 span
左右的空间相等
问题 1:
3) 错误:p
正在扩大内容 div 的宽度,看起来没有边框向左移动,因为右边的空间比左边多。如果p
没有扩展 div 并保持在宽度的 75% 这不会发生
4) 改进了 3 但仍然很糟糕:在各种 SO 问题中发现的潜在修复显示绝对定位停止了 p
扩展内容 div,但现在它不是流的一部分,它打乱了垂直居中
问题 2:
5) 不好:这里的问题是 h1
元素,因为它现在比 max-width
长它分为两行。但是第一行末尾和 max-width
之间的额外空间的 div 被保留,所以当删除边框时它看起来不居中,因为 h1
右边的空间比左边多
6) 修复 5 但不是解决方案:手动断开线(使用 <br>
)实现我需要的外观,因为 h1
未扩展到 max-width
所以看起来没有边界居中。这在实际应用中是不可行的,因为 div 的宽度可能不同
function toggleBorders() {
$('h1, p, span').toggleClass('bordered');
$('.content').toggleClass('content-bordered');
}
.box-holder {
display: flex;
flex-flow: row wrap;
}
.box {
flex: 0 0 380px;
display: flex;
align-items: center;
justify-content: center;
height: 350px;
border: 1px solid blue;
}
.content {
max-width: 80%;
position: relative;
}
.content-bordered {
border: 1px solid red;
}
.bordered {
border: 1px solid green;
}
p {
width: 75%;
}
.abs {
position: absolute;
}
button {
position: fixed;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="toggleBorders()">Toggle Borders</button>
<div class="box-holder">
<div class="box">
<div class="content">
<h1>1. Example Title</h1>
<p>Good Example</p>
<span>Example link to the article</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>2. Title</h1>
<p>Min Width Good Example</p>
<span>Example link to the article</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>3. Example Title</h1>
<p>But when the description gets too long then it expands the content div</p>
<span>Example link to the article</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>4. Example Title</h1>
<p class="abs">Setting absolute position avoids expansion but messes up the vertical layout</p>
<span class="abs">Example link to the article</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>5. Also Long Titles Leave White Space</h1>
<p>This doesn't look centered, see 6</p>
<span>Example link to the article</span>
</div>
</div>
<div class="box">
<div class="content">
<h1>6. Also Long Titles<br>Leave White Space</h1>
<p>Manually breaking lines fixes this</p>
<span>Example link to the article</span>
</div>
</div>
</div>
最佳答案
因此,这两个问题的答案似乎是,如果没有 javascript,您不能做到这一点。原因是 CSS 盒模型不能以这种方式工作。
为了解决第一个问题,您需要像我尝试的那样使用绝对定位,然后使用 javascript 在 h1
上使用边距为元素创建空间,如下所示:
$(document).ready(function() {
function alignDescriptions() {
var pmargin = 10 * 2;
$('.abs').each(function() {
var pheight = $(this).height();
$(this).css('bottom', pmargin);
$(this).siblings('h1').css('margin-bottom', pheight + pmargin);
});
}
});
这解决了使用 absolute
时的垂直居中问题,因此问题 1 已解决。
为了解决第二个问题,以下答案提供了一种解决方案:https://stackoverflow.com/a/33246364/7542390
我相信简单地使用它但也使用 span
的宽度作为最小值可能会解决这两个问题,因为我实际上是将宽度强制为正确的大小,因此宽度为 75% p
元素不会有问题。
遗憾的是这种功能不在 CSS 规范中。
编辑:正如所怀疑的那样,对第二个选项的改编实际上消除了对 p
元素进行绝对定位的需要。这是适用于我的实际案例的 jQuery 代码:
$('h1').each(function() {
// references to elements
var hElem = $(this);
var pElem = hElem.siblings('p');
var sElem = hElem.siblings('span');
// store starting values
var sWidth = sElem.width();
var hHeight = hElem.height();
var hWidth = hElem.width();
// reduce width until less than span width
// or until height of h1 changes
for (var testWidth = hWidth - 1; testWidth > 0; testWidth--) {
if (testWidth <= sWidth) {
testWidth = sWidth - 1;
break;
}
hElem.width(testWidth);
if (hElem.height() !== hHeight) break;
}
// set h1 width
hElem.width(++testWidth);
// if h1 still overflows (long word) use that instead
if (hElem[0].scrollWidth > hElem.width()) {
testWidth = hElem[0].scrollWidth;
hElem.width(testWidth);
}
// set p element to 75% width
pElem.width(testWidth * 0.75);
});
关于javascript - Div 扩展到特定内容的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43823133/
如何将浮点 10 字节十六进制字符串(Delphi 中的扩展数据类型)转换为 C# 数据类型? 例如:00 00 00 00 00 00 00 80 ff 3f 在 Delphi 1 最佳答案 涉及同
我正在阅读 this page上面写着 If one of the strings has an encoding prefix and the other doesn't, the one that
我有以下代码(作为示例),我想对其进行调整,以使功能区扩展到整个 xrange,如 geom_hline()做。功能区指示哪些值在可接受的范围内。在我的实际应用程序中,有时没有上限或下限,因此 hli
去年,斯科特·格思里 stated “如果您想要对执行的 SQL 进行绝对控制,您实际上可以覆盖 LINQ to SQL 使用的原始 SQL”,但我找不到描述可扩展性方法的文档。 我想修改以下 LIN
我尝试在我的应用中创建一个抽屉导航。我有 3 个当前选项(查看、声明、报告),当然这 3 个 Activity 已扩展到 fragment。在View 中,它有一个next 按钮,该按钮将转到另一个页
很抱歉,如果我的问题被重复,但我无法(或不知道如何谷歌)找到答案。我想使用 rxlifecycle-navi 库来将 rxjava 绑定(bind)到生命周期,所以我需要扩展 NaviActivity
有这个html: aaa 做的时候: $('#hi1').sayHi(); 我想收到一条“嗨”提醒 有人知道这是怎么做到的吗? 最佳答案 了解更多关于jQuery plugin authoring
我有一个 UIImageView 和一个 UITextView。当点击 UITextView 时,我需要 UITextView 在 UIImageView 上展开。我不知道该怎么做。 从这里 为此 最
以下语句: URLClassLoader ucl = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class uclc = ucl.get
以下语句: URLClassLoader ucl = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class uclc = ucl.get
$的意思是什么!在 shell 或 shell 脚本中?我正在尝试理解具有以下内容的脚本。 local@usr> a=1 local@usr> echo $a 1 local@usr> echo $!
我正在 GWT 中设计一个简单的应用程序,并且在客户端有不同的 View 。每个 View 都从 SimplePanel 扩展而来,并将根据需要添加到 RootPanel。 我的第一个 View 是
我尝试在 SQL Azure 选项卡中从 S2 扩展到 S3,但 S3 似乎不可用,尽管它已被引入。另外,我还有大量可用的 DTU,即 1900 左右。是否无法扩展到 S3?我是否需要导出数据库,然后
我有一个带有 JS、html 和 css 的自定义视频播放器。我的问题的关键是我没有预料到将其从一个视频扩展到两个视频,我希望重构它,以便我可以在一个页面上播放多个视频。我尝试将所有内容重写为 for
我当前正在开发的应用程序需要可扩展的实时通信。我们一直在研究并尝试 Firebase 实时数据库和 firestore。看来Firebase实时数据库更加成熟并且经过测试,而firestore仍处于测
当 pod 被 daemonset 控制时,pod 会出现一些错误,状态会是 CrashLoopBackOff ,我想删除这些 Pod 但不想删除 DaemonSet。 所以我想把daemonset缩
我有 Jframe 表单并创建了从中绘制图形的类,为此我需要将该 void 类扩展为 jframe 表单 package grafiktest; import java.awt.Color; impo
在布局和尺寸策略方面,我从来都不是太出色,所以这可能是一个简单的答案,但就是这样。 当我向 QTabWIdget 添加新选项卡并将小部件设置为 QSplitter 时,拆分器将使用给定的全部空间量。但
我在将我的 S4 对象转换回列表时遇到了一些问题。例如,以下嵌套的 S4 类: setClass("nssItem", representation(value = "numeric
在阅读了 DDD 的一些页面后,我了解了存储库模式,然后在应用程序中成功使用了它(我真的很喜欢它);然后我注意到 EntityManager 是 generic-repository-like,但是当
我是一名优秀的程序员,十分优秀!