删除一项内的内容时在行上方创建神秘空间

2023-12-31

我有一个包含一些项目的网格,当我单击任何项​​目时,我会将该项目的内容移动到模式中。

该模式效果很好,但是当我从项目中删除内容时,项目上方会出现一个空格。

我知道解决这个问题的方法可能是使用弹性盒,它工作得很好,但我想了解这里发生了什么。

这里可能很关键的是每个项目都有 3 个子项目。

I use position: absolute其中两个,另一个保持默认位置。

如果我使用position: absolute对于所有的孩子来说,这个问题都已经解决了。

有什么不同?

当我点击该项目时,内容消失,那么结果如何会根据内容而不同?

这是一个JSFiddle https://jsfiddle.net/dangonrei/67w721zq/显示问题。

基本上,结构如下:

HTML

<div class="context">
    <div class="grid">
        <div class="item">
            <div class="cover">  // has position: absolute
                <h1>Title</h1>
            </div>
            <div class="img-wrapper">  // has position: absolute
                <img/>
            </div>
            <div class="description">  // doesn't have a position defined
                <p>Description...</p>
            </div>
        <div class="item">
            // item content
        </div>
    </div>
</div>

我总共有 8 件物品,分成两排,每排 4 件。

CSS

实现这一点的 CSS 如下:

.grid {
  margin-top: 100px;
  font-size: 0; // to get all the items together
  border: 1px solid red;
}

.item {
  width: calc(100% / 4);
  height: 100px;
  position: relative;
  display: inline-flex;
}

.description {
  display: flex;
  flex-direction: column;
  justify-content: space-around;
  top: 0;
  bottom: 0;
}

.img-wrapper {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}

img {
  height: 100%;
  width: auto;
  display: block;
  margin: auto;
}

.cover {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}

Note:JSfiddle示例有更多的CSS用于样式,但基础是相同的,上面的代码仍然出现问题。

JavaScript

最后,将内容移动到模态div的JS如下:

let $itemNode;
let $itemContent;

$().ready(args => {
  // Cache the modal node
  let $modal = $('#modal');

  $('.item').click(function() {
    // First cache the item and content
    // to put it back when needed
    $itemNode = $(this);
    $itemContent = $(this).children();

    // Hides the item
    $itemNode.css({visibility: 'hidden'});

    // Transfer project content to the modal
    $itemContent.appendTo($modal);
  });

});

解决方案

我知道解决这个问题的方法可能是使用弹性盒......

那是对的。将项目的父级设置为弹性容器可以解决问题:

.grid {
  display: flex;     /* new */
  flex-wrap: wrap;   /* new */
  margin-top: 100px;
  font-size: 0;
  border: 1px solid red;
}

修改后的小提琴 https://jsfiddle.net/67w721zq/2/

这里可能很关键的是每个项目都有 3 个子项目。我用position: absolute其中两个,另一个保持默认位置。如果我使用position: absolute对于所有的孩子来说,这个问题都已经解决了。

另外,正确。通过从文档的正常流程中删除第三个 div,问题就得到了解决。

解释

在涉及任何脚本和删除项目之前,网格中的每个项目都是人为定位的。

换句话说,在初始状态下,项目的内容(三个子 div)将每个项目移动到原本不会出现的位置。但是当脚本删除这些子 div 时,每个项目都会移动到它应该在的位置。

正如您所怀疑的,问题出在每个网格项的第三个子 div (.description).

如果您只是申请visibility: hidden到网格项 –不删除子 div– 布局不会被破坏。

但对于你的脚本,你不仅仅是添加visibility: hidden,您还要删除子 div。

前两个 div (.cover and .img-wrapper)永远不会造成问题。它们是绝对定位的,因此它们已经从正常流程中移除。

然而,第三个 div (.description) 是一个流入子代。

这个div包含两个p儿童(“该项目 X 的​​说明”和“更多信息”)。当这些孩子中的任何一个被移除时,那就是布局中断的时候.

这是因为——出于我尚未确定的原因——这个 div 正在抑制vertical-align: baseline在父级上,这是一个内联级元素,因此,明白了vertical-align默认设置 https://www.w3.org/TR/CSS22/visudet.html#line-height.

当脚本删除 div 时,基线对齐方式将恢复到父级,将其向上移动,从而创建间隙。


EDIT:

As @Kukkuz 提到了一个答案 https://stackoverflow.com/a/39794921/3597276,使用除baseline for vertical-align也解决了问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除一项内的内容时在行上方创建神秘空间 的相关文章

  • 正则表达式匹配除括号中的单词之外的所有单词 - javascript

    我使用以下正则表达式来匹配所有单词 mystr replace W s g function match p1 index title 请注意 单词可以包含特殊字符 例如德语变音符号 如何匹配除括号内的单词之外的所有单词 如果我有以下字符串
  • CSS 列不会水平对齐

    我正在使用列计数来允许我的文本流入两个不同的列 但第一列的顶部 最左边 低于另一列 col moz column count 2 webkit column count 2 column count 2 div h3 Options h3
  • 正则表达式问题 - 在字符串中查找数字

    我目前正在使用 JavaScript 从字段中获取字符串 在该字段中通常会有 宽度 56 空隙 67 我需要做的是识别 1 440 范围内的两个数字 并将它们放入两个不同的字段中 字段 1 宽度 字段 2 无效 我已经研究过正则表达式 到目
  • 如何以编程方式确定 HTML 对象可以侦听哪些事件?

    我一直在查看developer mozilla org 和Apple 开发文档上的文档 但我找不到解释是否可以通过编程方式确定特定HTML 标记是否支持给定事件监听器的文档 就像我知道的那样
  • 在 X 轴刻度上渲染 HTML

    我想在 D3 图表的 x 轴上渲染 HTML 基本上 我希望轴上的每个标签都是到数据中另一列的超链接 我试过了 x domain data map function d return a href d Name a 但它根本不起作用 我得到
  • 如果是数字,Chrome 会重新排序对象键,这是正常/预期的吗

    我注意到某些评估电子商务网站的某些鞋码并将其输出到屏幕上的代码会打乱 Chrome 中的顺序 给出的 JSON 可以是 7 9149 9139 10455 17208 7 5 9140 9150 10456 17209 8 2684 914
  • 如何在 Yii 框架中使用 jQuery?

    如何在 yii 中使用 jquery javascript 如何在 yii 中使用我的脚本 为什么这与以其他方式使用 jQuery 有什么不同 如何在yii中使用jquery 如上所述 您可以注册新的脚本块 也可以注册新的外部脚本文件 您还
  • Javascript TypeError:无法读取未定义的属性“indexOf”

    在此代码中 我想从cart products array var cart products 17 1 19 1 18 1 var product 17 each cart products function key item if ite
  • 如何使用nodejs获取目录中第一个扩展名为.txt的文件?

    我所有文件所在的目录是 usr home jordan 该目录下有很多文件 在目录本身中 但有一个文件以 txt 扩展名命名 使用nodejs和fs 我想将带有txt扩展名的第一个文件 或任何文件 放入 mytxtfilepath 中 我在
  • 如何根据上一张或下一张幻灯片按键更改 Nivo Slider 中的效果?

    我想根据按下的按钮更改 Nivo Slider 上的过渡效果 关于如何实现这一目标有什么想法吗 Update澄清一下 我指的是下一个或上一个按钮 而不是键盘上的按钮 我正在寻找的是 如果一个人按下下一个按钮 则会调用 slipToRight
  • Img src 路径以及要传递的标头参数

    我在 jsp 页面中有一个 img 标记 其中 src 路径需要传递标头参数才能获取图像 我们怎样才能实现它呢 您现在可以使用fetch https developer mozilla org en US docs Web API Fetc
  • Bootstrap 响应式图像缩放

    Using Twitter Bootstrap我意识到默认情况下它会响应式地缩放图像 这很棒 但并不总是完美的 比如说我有一个500x300桌面上的图像 然后它会针对移动设备调整大小 该图像将非常小而且不是很高 会丢失图像的大部分细节部分
  • jQuery/JavaScript:仅选择子级的第一个“层”

    我试图仅选择给定类型的子元素的第一 层 而不选择嵌套在另一个限定元素内的元素 例如 在 div div class special div class special div div div div class special div di
  • Selenium 查看鼠标/指针

    有什么方法可以在运行测试时真正看到硒鼠标吗 要么是 Windows 光标图像 要么是某种点或十字线或任何东西 我正在尝试使用拖放功能selenium and java in an HTML5Web 应用程序 并且能够看到光标以了解它实际在做
  • 使用 Ajax 和 PHP 上传图像

    我想将图像上传到我的服务器 并控制 HTML 代码中的 PHP 回显 为此 我想使用 jQuery Ajax 但我不知道如何使用 Ajax 将图像发送到 PHP 这是一个大学项目 所以我不能使用任何类型的插件 我的实际代码 HTML
  • 获取鼠标在滚动条上的位置

    当我向下滚动或向上滚动时如何获取鼠标位置 我试过这个 document mousemove function event captureMousePosition event scroll function event xMousePos
  • React 不适用于 Android 4.4.2 Web 视图浏览器

    React 在我的 Android 手机上不起作用 我不认为这是我的代码错误 因为即使我写的唯一内容是 p hello world p 它仍然没有显示 在 chrome 远程吊顶上查看后 这显示了 Map is not defined 以前
  • 是否可以使用 fs.createWriteStream 在文件中间写入文本? (或者一般在 Node.js 中)

    我正在尝试写入文本文件 但不是像appendFile 那样在最后写入或通过替换整个内容 我看到可以选择从 fs createwritestream 的启动参数开始的位置 gt https nodejs org api fs html fs
  • Javascript:在函数内调用函数时 window.location.href 不会重定向

    单击按钮时 window location href 会将浏览器重定向到 stackoverflow com 但在输入文本字段中按 Enter 键时不会将浏览器重定向到 stackoverflow com 尽管两个事件侦听器使用相同的函数
  • 如何在 Firefox 插件上使用 jQuery 1.5.2+?

    首先 我创建了一个接收参数并返回 jQuery 的函数 例如 function getjQuery window jquery code window return window jQuery 但后来我收到了一封评论电子邮件 他们告诉我必须

随机推荐

  • Passport.authenticate() 使用 Promise 而不是自定义回调

    passport authenticate 我如何定义一个Promise而不是使用定制球背 如何使用passport authenticate 在这里引用 http www passportjs org docs authenticate
  • 如何使用变量名称将命名元素添加到 R 向量

    我想向向量 V 添加一个元素 例如 100 并使用变量 x 的值作为新元素的名称 我知道可以这样做 V c V 100 names V length V x 但我正在寻找一种简单的单行解决方案 如果有的话 我试过 V c V as name
  • 使用 C++ 中的 PCL 在同一窗口中查看多个点云

    我有两个点云 我想在同一个窗口中对其进行可视化 include
  • TFS 2010 通过文件系统构建发布

    我在 TFS 中有一个相当大的 MVC2 项目 它在签入时自动构建 持续集成 目前 完整构建的版本已转储到我们的开发 IIS 服务器上的网络共享上 Server wwwrootLatest TFS 当然会创建很多子文件夹 因为它只是进行构建
  • 类内递归

    我试图在类语句中放置一个递归公式 class SomeNode def init self a leng len a half leng 2 self firstnode a 0 0 self child1 SomeNode a i for
  • 从外部连接到在 docker 容器内运行的服务

    我有一个服务在 docker 容器 本地机器 中运行 我可以在 Ambari 服务配置中看到服务 URL 现在我想使用本地开发环境连接到该服务 我发现我可以连接到容器内的该 URL 但是当我在本地外部使用该 URL 时 连接被拒绝 Caus
  • 为什么 vector 不是 STL 容器?

    Scott Meyers 的书第 18 条有效的 STL 改进标准模板库使用的 50 种具体方法说要避免vector
  • 专门化主模板时,更专门化意味着什么?

    C 模板特化规则中提到的特化必须比主模板更加特化 下面的 1 代码片段会导致编译错误 这表明第二行并不更专业 但最后一个片段 2 的工作看起来非常接近 1 两个代码片段都是专门的int N as 0 那么为什么第一个片段被抱怨为 不更专业
  • spect.getmembers() 与 __dict__.items() 与 dir()

    谁能用足够的例子向我解释黑白有什么区别 gt gt gt import inspect gt gt gt inspect getmembers 1 and gt gt gt type 1 dict items and gt gt gt di
  • 创建 SwiftUI 侧边栏

    我想使用 SwiftUI 构建一个非常简单的 iOS 14 侧边栏 设置很简单 我有三个视图HomeView LibraryView and SettingsView和代表每个屏幕的枚举 enum Screen Hashable case
  • jquery blockUI 判断页面或特定元素是否被阻止

    有没有办法判断 blockUI 是否有效已被调用但 unblockUI 尚未被调用 理想情况下 这应该能够阻止整个页面和特定元素 我希望它能像这样工作 gt blockUI gt isBlockUI gt gt true gt unbloc
  • HTML5 文档中的多个

    使用多个可以吗
  • WPF 网格不显示滚动条

    在 NET 3 5 中 我在窗口中有一个网格 我正在用按钮填充这个网格 当按钮填满网格并消失时 网格不会显示滚动条 我已将网格垂直滚动设置为可见 但它仍然不显示
  • 如何围绕特定点来回旋转物体?

    我正在使用 Raphael JS 尝试围绕中心点下方的点旋转图像形状 如何才能做到这一点 我已经尝试过以下方法 但它不起作用 var playBBox playButtonRef getBBox var xPos playBBox x pl
  • Spring Boot - 从依赖 jar 加载 application.properties/yml

    我有一个 Spring Boot 应用程序 我想按特定顺序将值注入到 ConfigurationProperties bean 中 例如 ConfigurationProperties myproperties class MyProper
  • 获取资源管理器窗口排序的字段

    我想知道是否有办法知道 Windows 资源管理器窗口中的文件是如何排序的 有点像窗口的 ORDER BY 子句 示例 名称升序 或 修改日期降序 这个问题不是关于 Windows 的名称排序算法 而是关于特定打开的 Windows 资源管
  • RVO(返回值优化)适用于所有对象吗?

    Is RVO 返回值优化 http en wikipedia org wiki Return value optimization 保证或适用于 C 编译器 特别是 GCC 中的所有对象和情况 如果答案是 否 那么类 对象的这种优化的条件是
  • 将命令行参数传递给随 Poetry 安装的 Python 脚本

    诗歌文档 https python poetry org docs pyproject scripts表示脚本部分可用于在安装包时安装脚本或可执行文件 但它没有显示任何如何将参数传递给脚本的示例 您如何才能接收argparse函数中的参数
  • IntelliJ JDK 16 抢先体验 - 有成功吗?工具.jar

    有没有人使用 JDK 16 取得过成功 https jdk java net 16 https jdk java net 16 使用 IntelliJ 进行早期访问构建 我能够使用 JDK 15 早期访问版本 但是当我尝试 JDK 16 时
  • 删除一项内的内容时在行上方创建神秘空间

    我有一个包含一些项目的网格 当我单击任何项 目时 我会将该项目的内容移动到模式中 该模式效果很好 但是当我从项目中删除内容时 项目上方会出现一个空格 我知道解决这个问题的方法可能是使用弹性盒 它工作得很好 但我想了解这里发生了什么 这里可能