javascript - 如何使用 "position: absolute"水平居中元素?

标签 javascript html css bootstrap-4

好的......所以这里有一个需要知道的事情列表:

首先,我使用的是fabric.js(我没有将其包含在标签中,因为它不是问题的中心焦点),这意味着当我创建fabric.js Canvas 的新实例时,它会创建2个 Canvas 元素(.lower-canvas)和(.upper-canvas),通过与它们交互,我发现它们是绝对定位的,所以长话短说(有一个巨大的运行)我可以'无法改变有 2 个 Canvas 并且我无法更改为其他库的事实。

其次,我使用 bootstrap 来保持 UI 看起来流畅。现在它的结构看起来像

<div class="row">
    <div class="col" id="canvas_container">
        <canvas id="canvas">
        </canvas>
    </div>
</div>
<div class="row">
    <div class="col">
        <br>
    </div>
</div>
<div class="row">
    <div class="col">
        ---some buttons---
    </div>
</div>

所以当页面生成的时候,就从之前的代码块变成了

<div class="row">
    <div class="col" id="canvas_container">
        <div class="canvas-container">
            <canvas id="canvas" class="lower-canvas">
            </canvas>
            <canvas class="upper-canvas">
            </canvas>
        </div>
    </div>
</div>
<div class="row">
    <div class="col">
        <br>
    </div>
</div>
<div class="row">
    <div class="col">
        ---some buttons---
    </div>
</div>

它将之前的 Canvas 更改为具有不同类的 2 个不同 Canvas ,但在其中一个 Canvas 上保留初始 Canvas 的 id,并创建一个具有“canvas-container”类的 div 来封装这两个 Canvas 。

第三, Canvas 将具有动态尺寸。用户将选择他们想要使用的 Canvas 尺寸来与织物 Canvas 交互。

第四,我查看了 stackoverflow 上的各种链接进行尝试,有些已经非常接近,但仍然没有雪茄。我具体想到的是here如果您想查看的话。

第五,除了 bootstrap 之外,不应该有任何额外的 css 影响任何元素 - 除了影响其大小的 Canvas 元素(当前以 % 测量,但可能更改为 vw 或 vh)。

---问题陈述---

为了重述这个问题,我试图将两个具有绝对位置的 Canvas 居中。我认为如果我可以将 .canvas-container 居中,这可能是最好的实现,因为两个 Canvas 都封装在其中并且它们具有绝对定位。对此有什么想法吗?

如果我还可以做任何其他事情来清理我可能没有触及的任何内容,请告诉我。

提前谢谢您。

--编辑--

为了提供更多背景信息,浅蓝色框始终是需要居中的 Canvas 元素。

这里是关于 @SoluableNonagon 提出的解决方案之一的更新(该帖子有一个父级和 3 个子级,垂直、水平和“两者”对齐),以便您可以看到发生了什么。 ..作为引用,底部的灰色条水平对齐。

Proposed solution

绿色框是共享 col 类的 #canvas_container 元素。

浅蓝色框由两 block Canvas 组成。

将CSS“向上”移动到子级成为父级的位置,并且新父级的内容成为子级的结果

Potential solution change 1

@Gagandeep Sangh 的解决方案,没有进行适当的更改来影响一个特定元素。

Gagandeep Sangh's solution 1

进行更改以影响第 1 个元素后,结果如下

Gagandeep Sangh's solution 2

最佳答案

通常,当元素为 position:absolute 时,父元素为 position:relative。 那么,绝对元素为left: 50%;变换:translateX(-50%); 用于水平居中。对于垂直居中 top: 50%;变换:translateY(-50%);

.parent {
  position: relative;
  height: 200px; // needs height/width cause 'absolute' child takes no space
  width: 200px;
  border: 1px solid red;
}

.child-1 {
  position: absolute;
  height: 50px;
  width: 50px;
  border: 1px solid blue;
  
  left: 50%;
  transform: translateX(-50%);
}

.child-2 {
  position: absolute;
  height: 50px;
  width: 50px;
  border: 1px solid orange;
  
  top: 50%;
  transform: translateY(-50%);
}

.child-3 {
  position: absolute;
  height: 50px;
  width: 50px;
  border: 1px solid green;
  
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
<div class='parent'>
  <div class='child-1'>horizontal</div>
  <div class='child-2'>vertical</div>
  <div class='child-3'>both</div>
<div>

关于javascript - 如何使用 "position: absolute"水平居中元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62442182/

相关文章:

javascript - javascript 对象的元素是否按特定顺序初始化?

javascript - 关于 http 错误的 JSONP 响应文本

javascript - HTML 表格 - 使用 JS 进行动态列计数 - 使用通配符固定布局 - 列消失

javascript - 使用 attr disabled 禁用链接

css - Flex 3 中 textArea 的最后一行对齐

javascript - 如何让 jQuery 选择带有 . (句号)在他们的身份证?

javascript - 如何在 url 中注入(inject)带空格的命令?

html - 如何将CSS背景设置为缓慢滚动?

html - 让 div 填满父级的其余部分

jquery - 如何使用 jquery 为特定元素做 "display = block"