css – 如何在固定宽度元素上设置全屏宽度背景?

前端之家收集整理的这篇文章主要介绍了css – 如何在固定宽度元素上设置全屏宽度背景?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有动态高度和固定宽度的元素容器的简单结构(下面的标记).一方面元素的背景应该跨越整个窗口宽度,另一方面,子元素的大小必须受容器限制(下面的Desired layout).儿童的数量及其大小(仅为简单起见,在图像上相同)是动态的.

没有添加额外的容器可以吗?我想通过在子项上设置宽度来避免实现所需的元素内容宽度,因为它们的数量是动态的,并且大小关系变得复杂,除非它们的总宽度已经受到容器宽度的限制.

这是一个pen实验;

标记

<div class="container">
  <div class="child">
  <div class="child">
  ...
</div>

.container {
  width: <fixed-width>px;
}

期望的布局(儿童和容器之间的空白是无关紧要的)

解决方法

我们可以采取的一种解决方法是在父容器填充上使用视口宽度,强制子项进入宽度仅为500px的盒子(根据您的codepen).

这样做时要记住的重要一点是盒子尺寸:边框;将需要在容器上设置,否则填充会弹道.

我们通过使用calc,vw和padding来做到这一点.

padding: 20px calc(50vw - /*half of container width*/);

这是链接的codepen上容器的完整扩展代码

.container {
  display: flex;
  flex-flow: row nowrap;
  justify-content: center;
  margin-left: auto;
  margin-right: auto;
  height: 300px;
  width: 100%;
  padding: 20px calc(50vw - 250px);
  background-color: #acffac;
  background-size: 100vw auto;
  background-position: center top;
  Box-sizing: border-Box;
}

html {
  overflow-y:scroll; /* fixes potential calculation errors caused by scroll bar - thanks to Roberts comment */
}

Here’s a working version of the codepen,为了将所有鸡蛋放在一个篮子里,这里有一个可扩展的代码片段:

.container {
  display: flex;
  flex-flow: row nowrap;
  justify-content: center;
  margin-left: auto;
  margin-right: auto;
  height: 300px;
  width: 100%;
  padding: 20px calc(50vw - 250px);
  background-color: #acffac;
  background-size: 100vw auto;
  background-position: center top;
  Box-sizing: border-Box;
}

.child {
  flex: 1 0 auto;
  width: 100px;
  height: 100%;
  background-color: #ff4444;
}

.child+.child {
  margin-left: 20px;
}
<div class="container">
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
</div>

我最后指出,如果其他人有更好的解决方案,你可能想暂时关注一下,因为在旧版本的Chrome and Safari上使用vw里面的一些问题.

编辑:

正如瓦迪姆和罗伯特的评论所指出的,有一些事情可能会导致一些障碍.

首先,假设你正在使用一个最小的模板(即没有normalize / reset.css),你的身体很可能仍然会有固有的边缘,这会使这种布局变得混乱.你可以解决这个问题:

body {
    margin:0;
}

其次,根据你的操作系统(是的,我正在看你的微软!)你的滚动条可以将你的内容推到一边,同时仍然包括在大众的计算中.

我们可以解决这两种方式之一.第一个是对填充计算进行调整以包括滚动条侧,但您必须编写脚本以确保滚动条实际存在,并且滚动条的大小不同(I.E – > 17px,Edge – > 12px).

另一种选择是使用自定义内容滚动条,它会完全溢出:隐藏;在内容上,从而删除滚动条,然后实现它自己的滚动条版本(通常位于内容的顶部,位置:fixed;)它.

猜你在找的CSS相关文章