html - 考虑容器一侧的侧边栏和内容区域的问题查找计算

标签 html css

我已经绘制了一张方便的花花公子的图像,展示了我一直在尝试使用 CSS 所做的事情。理想情况下,我想仅使用 CSS 来完成此操作,但此时我可以使用 JS 解决方案。

Sidebar Calculation

本质上,左侧的侧边栏不会遵循居中的 1200px 标题网格。它始终是视口(viewport)的 1/3。内容区域需要碰到左侧的侧边栏,但一旦到达右侧标题容器的边缘,它就需要停止。

我尝试过计算视口(viewport)负 1200px、负 600px 以及其他一些计算,试图让该内容区域正确缩小和增长,但我不知道如何进行。

我的最后一个想法是尝试以某种方式计算图片中的 ??% 区域,这样我就可以将内容区域推过去,但我不知道如何捕获它。

这是我上次停下来的笔:https://codepen.io/WDACDavy/pen/LJrxmY

以下是随附的 HTML 和 CSS:

body,
html {
  margin: 0;
  padding: 0;
}

header {
  width: 100%;
  height: 90px;
  background: #FF570c;
  max-width: 1200px;
  margin: 0 auto;
}

main {
  position: relative;
  display: flex;
  flex-wrap: nowrap;
}

aside {
  min-height: 100vh;
  background: #dddddd;
  width: 33.3333%;
}

section {
  min-height: 100vh;
  background: #FFFFFF;
  width: 66.6666%;
  max-width: 1200px;
  margin: 0 auto;
}

.strange-container {
  display: block;
  width: 100%;
  position: relative;
  height: 900px;
  background: #f5f5f5;
  flex: none;
}
<html>

<head></head>

<body>
  <header></header>
  <main>
    <aside>
    </aside>
    <section>
      <div class="strange-container">&nbsp;</div>
    </section>
  </main>
</body>

</html>

好的,所以接受的答案并不是 100% 我需要的。对于那些好奇或需要类似布局的人,这就是我所做的:

我采用了接受的答案的计算(这太棒了!)并将其转换为 <section> 的左填充。元素。

padding-left: calc((100vw/3 - (50vw - 600px)));

然后我给 <main> 添加了一个渐变元素为侧边栏提供背景并添加绝对定位的 <aside>对于侧边栏内容。最终结果在这里:https://codepen.io/WDACDavy/pen/KxemLm

这将一直有效,直到屏幕降至接近 1200 像素(这适合我的用例)。

最佳答案

该区域的计算应为 100vw/3 - (100vw - 1200px)/2 [侧边栏的宽度减去标题左侧的空间] 。您可以将其用作负 margin-left,然后添加等于 (100vw - 1200px)/2 [the space on标题右侧]。需要注意的是,有滚动条时,计算可能不准确。

我删除了滚动条来查看结果:

body,
html {
  margin: 0;
  padding: 0;
  overflow:hidden;
}

header {
  width: 100%;
  height: 90px;
  background: #FF570c;
  margin: 0 auto;
  max-width:1200px;
}

main {
  position: relative;
  display: flex;
  flex-wrap: nowrap;
}

aside {
  min-height: 100vh;
  background: #dddddd;
  width: 33.3333%;
}

section {
  min-height: 100vh;
  background: red;
  width: 66.6666%;
  margin: 0 auto;
}

.strange-container {
  display: block;
  margin-left:calc(-1 * (100vw/3 - (50vw - 600px)));
  margin-right:calc(50vw - 600px);
  position: relative;
  height: 900px;
  background: rgba(0,255,0,0.8);
  flex: none;
}
/*We no more have space around section so we replace it by 0*/
@media all and (max-width:1200px) {
  .strange-container {
    margin-left:calc(-100vw/3);
    margin-right:0;
  }
}
<header></header>
<main>
  <aside>
  </aside>
  <section>
    <div class="strange-container">&nbsp;</div>
  </section>
</main>

关于html - 考虑容器一侧的侧边栏和内容区域的问题查找计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52315603/

相关文章:

javascript - 如果我选择另一个国家/地区,该州不会重新出现

javascript - 单击时停止元素消失

css - 最新 Opera 版本中的样式 <meter> 标签

javascript - 悬停时的文本滚动不适用于 jQuery 2.2.0

javascript - 单击时可折叠的 div 高度问题

javascript - JSON,按totalSessionsPlayed排序并输出前3名

表格中是否包含 HTML 表单

html - 在 Firefox 中选择元素的边框

css - @import url(addonstyles.css) 仍然相关吗?

php - 为什么我的 CSS 没有按应有的方式更改?