javascript - 如何设置元素水平增长而不是换行?

标签 javascript

我在网站上遇到断线问题。我是什么意思? HTML 代码

<main class="clearfix">
<div class="first"></div>
<div class="second"></div>
<div class="third"></div>
</main>

<button>Add</button>

我想要这样的 HTML 代码:

  • 主元素的固定高度(例如 80vh)

  • 所有元素的固定高度第一个和第三个 40vh + 第二个 80vh

  • 第一个和第三个元素的固定宽度 50vw
  • 第二个元素的流动宽度 - 但这是主要问题 - 第二个元素必须位于同一位置并水平增长(以在网站底部创建滚动)

请找到我的codepen

我添加了一个按钮,可以将像素添加到第二个元素 - 但它会破坏我的网站。

我不确定 Flexbox 是否比 float 更好。

任何提示我都会感激不尽。

这是片段:

let counter = 0;
document.querySelector("button").addEventListener("click", function() {
  document.querySelector(".second").style.width = `calc(50% + ${counter}px)`;
  console.log(counter);
  counter++;
});
* {
  padding: 0;
  margin: 0;
}

main {
  max-height: 80vh;
}

.first,
.third {
  height: 40vh;
  width: 50vw;
  background-color: black;
  float: left;
}

.third {
  background-color: red;
}

.second {
  height: 80vh;
  width: 50%;
  float: right;
  background-color: blue;
}

.clearfix::after {
  content: "";
  display: table;
  clear: both;
}
<main class="clearfix">
  <div class="first"></div>
  <div class="second"></div>
  <div class="third"></div>
</main>

<button>Add</button>

最佳答案

我建议您使用 position 属性。因为 DOM 元素的顺序和它们的视觉表示之间有一点差异,例如 DOM 中的 1,2,3,但视觉上它更像是 1,3,2。

但是,在这种情况下,float 就是你的敌人。我对 flex 不是 100% 确定,据我所知,flex 会将所有元素保留在父元素内并防止滚动。

如果您采用绝对定位,(因为您已经定义了高度和宽度)

申请:

  • position:relative 相对于 main 元素,如果子元素设置为 absolute ,它将成为子元素的基点>.

  • overflow-x:滚动main元素。当您增加第二个元素的宽度时,它将允许您水平滚动。

  • position:absolute.first、.second、.third上,因为您有高度宽度 定义了,现在相应地设置它们的位置,检查代码片段,你就会得到它。

最后,您可以为目标元素的宽度添加更多值。

提示:始终保持 css 单元的一致性,例如,如果使用 vh/vw 至少对类似元素使用此,或者如果使用 px/em/rem ,请尝试相应地使用相同的内容。

在全页模式下检查代码段

let counter = 0;
document.querySelector("button").addEventListener("click", function() {
  document.querySelector(".second").style.width = `calc(50vw + ${counter}vw)`;
  document.querySelector("#added").textContent = counter;
  counter++;
});
* {
  padding: 0;
  margin: 0;
}

main {
  overflow-x: scroll;
  position: relative;
  min-height: 80vh;
}

.first,
.third {
  height: 40vh;
  width: 50vw;
  background-color: black;
  position: absolute;
  left: 0;
  top: 0;
}

.third {
  background-color: red;
  top: 40vh;
}

.second {
  height: 80vh;
  width: 50vw;
  background-color: blue;
  position: absolute;
  left: 50vw;
  top: 0;
}

button {
  margin: 30px 5px;
  border: 1px solid #cecece;
  padding: 5px 10px;
}
<main>
  <div class="first"></div>
  <div class="second"></div>
  <div class="third"></div>
</main>

<button>Add</button>

<p><span id="added">0</span>vw Added to blue div's width</p>

关于javascript - 如何设置元素水平增长而不是换行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56100067/

相关文章:

javascript - 提交在 JavaScript 中动态生成的内容

javascript - javascript 中的基本 2D 绘图?

javascript - 更改窗口大小时的类

javascript - 当单击关闭输入但不关闭页面时,JQuery 清除 div

javascript - 允许用户一次只创建一个 Google map 标记

javascript - 理解 javascript 变量

javascript - 背景视频禁用链接

javascript - Node js中的Redlock错误

javascript - Ajax on keyup 或粘贴

javascript - 对于每个请求,NodeJS 服务器将变量递增 2