使用 CSS 将元素移动到右边距而不从 HTML 流中移除

Move element to right margin without removing from HTML flow with CSS

我在页面居中有一列固定宽度的列。由于视口不同,边距是未知的。我想将它移到屏幕的左边缘而不将其从 HTML 流中移除。

<main class="centered" style="width:750px;margin-left:auto;margin-right:auto">
...
  <figure class="imagefullwidth" style="width:100vw">
    <img src="image.jpg">
  </figure>
...
</main>

应该类似于:

       _______main_______
      |                 |
      |                 |
 _____|______figure_____|_____     
|                             |
|                             |     
|                             |     
|_____________________________|     
      |                 |
      |                 |
      |                 |
      |_________________|

当然,我在 <figure> 上尝试了 position: absolute; left: 0,但这使它脱离了 HTML 流程。我在图像上尝试了 position: absolute;,虽然我可以创建比其容器更大的图像,但 left:0 仅将图像放在 <main> 的左边缘(加上允许 <figure> 折叠到高度 0,我不知道图像的高度来给它一个高度)。

负边距没有帮助,因为我不知道任何特定视口宽度的边距宽度。 float: left 不起作用,因为它漂浮在其容器内。

我无法修改 HTML,因为它来自 CMS。但是有很多包装纸和我可以设计的东西。

你能想出一种不用 JS 的纯 CSS 方法吗?

我不知道你为什么要这样做,但如果你想将一列移到左侧,你可以这样做。

<main class="centered" style="width:750px;margin-left:0;margin-right:auto">

  <div class="imagefullwidth" style="width:100vw">
    <img src="image.jpg">
  </div>

</main>

此处您在第一行进行更改。

 <main class="centered" style="width:750px;margin-left:0;margin-right:auto">

其中左边距为 0,以便它可以将列移到左侧站点。因为有 margin auto 它试图在中心对齐。

如您所说,此代码来自 CMS。这可能不会起作用,因为会有一个 CSS 文件覆盖此 属性 .

基于 html 和下面提供的视觉示例 css 似乎可以实现您的目标。 JSFiddle example

.centered {
  background-color: gray;
  width: 100% !important;
  max-width: 750px;
}

.imagefullwidth {
  width: initial !important;
}

.imagefullwidth img {
  position: relative;
  left: 50%;
  transform: translateX(-50%);
  width: 100vw;
  height: auto !important;
}