html - CSS:具有 3 个 div 的 Flex 容器

标签 html css flexbox

我在使用 CSS 中的 flex 来按照我希望的方式对齐 div 时遇到了一些麻烦。下图显示了我希望如何列出所有内容

Layout Template

这是我上传的所有 CSS 和 HTML as a fiddle作为一个片段:

    @font-face {
			font-family: Comfortaa;
			src: url("Comfortaa-Light.ttf") format("truetype");
		}

		@font-face {
			font-family: Neue;
			src: url("HelveticaNeue-Thin.otf") format("opentype");
		}

		body {
			position: absolute;
			margin: 0px;
			top: 0px;
			left: 0px;
			bottom: 0px;
			right: 0px;
			overflow-y: scroll;
			overflow-x: hidden;

			background-color: white;
		}

		#topSegment {
			position: relative;
			display: flex;
			flex-flow: row wrap;
			width: 100%;
			height: 600px;
			top: 0px;
			left: 0px;
			bottom: 0px;
			right: 0px;
			background: purple; /* For browsers that do not support gradients */
			background: -webkit-linear-gradient(left top, rgba(181,91,184,1), rgba(62,71,130,1)); /* For Safari 5.1 to 6.0 */
			background: -o-linear-gradient(bottom right, rgba(181,91,184,1), rgba(62,71,130,1)); /* For Opera 11.1 to 12.0 */
			background: -moz-linear-gradient(bottom right, rgba(181,91,184,1), rgba(62,71,130,1)); /* For Firefox 3.6 to 15 */
			background: linear-gradient(to bottom right, rgba(181,91,184,1), rgba(62,71,130,1)); /* Standard syntax */
		}

		#frontLogo {
			width: 369.9px;
			height: 350px;
			margin: 125px;		
		}

		#searchBar {
			flex: 1;
			margin-right: 125px;
			margin-left: 0px;
			margin-top: 75px;
			margin-bottom: 75px;
			background-color: rgb(74,74,74);
			height: 50px;
			border-radius: 25px;
		}

		#weatherInformation {
			flex: 1;
			margin: 125px;
			margin-left: 0px;		
		}

		#weatherInformation p{
			margin: 0px;
			font-family: 'Open Sans', sans-serif;
			font-weight: 300;
			color: white;
			font-size: 2em;
		}

		#underline {
			margin: 0px;
			padding: 0px;
			width: 0%;
			visibility: hidden;
			animation-name: expand;
			animation-delay: 0.75s;
			animation-duration: 0.8s;
			animation-timing-function: ease-in-out;
			-webkit-animation-fill-mode: forwards; /* Chrome, Safari, Opera */
			animation-fill-mode: forwards;
		}

		@keyframes expand {
			from {
				width: 0%;
			}
			to {
				width: 100%;
				visibility: visible;
			}
		}

		#gradient {
			position: absolute;
			width: 100%;
			height: 10px;
			bottom: 0px;
			left: 0px;

			background: white; /* For browsers that don't support gradients */
			background: -webkit-linear-gradient(top,rgba(0,0,0,0.4),rgba(0,0,0,0)); /*Safari 5.1-6*/
			background: -o-linear-gradient(top,rgba(0,0,0,0.4),rgba(0,0,0,0)); /*Opera 11.1-12*/
			background: -moz-linear-gradient(top,rgba(0,0,0,0.4),rgba(0,0,0,0)); /*Fx 3.6-15*/
			background: linear-gradient(to top, rgba(0,0,0,0.4), rgba(0,0,0,0)); /*Standard*/
		}

		#content {
			display: flex;
			width: 100%;
			height: 900px;

			background-color: white;
		}


		/* Custom Scrollbar CSS */

		::-webkit-scrollbar {
			width: 10px;
		}
		::-webkit-scrollbar-track {
			background: rgba(255,255,255,1);
			-webkit-box-shadow: inset 0 0 3px rgba(0,0,0,0.3); 
			-webkit-border-radius: 50px;
			border-radius: 50px;
		}
		::-webkit-scrollbar-thumb {
			-webkit-border-radius: 10px;
			border-radius: 10px;
			background: rgba(150,150,150,1);  
		}
		::-webkit-scrollbar-thumb:window-inactive {
			background: rgba(150,150,150,0.6); 
		}
<body>
	<div id="topSegment">
		<a href="index.html">
			<img src="Weather%20Icon.svg" alt="CGS Weather Icon" id="frontLogo" >
		</a>
		<div id="searchBar">
			<div id="outer">
				
			</div>
		</div>
		<div id="weatherInformation">
			<p>CAMBERWELL, MELBOURNE</p>
			<hr id="underline">
			<p>28&deg;</p>
		</div>
		<div id="gradient"></div>
	</div>
	<div id="content"></div>
</body>

我确信它有一些非常简单的解决方案,使用几行代码来处理 flex 但我似乎无法弄清楚它们是什么..

最佳答案

各位,我不同意! Flex 非常适合这个! (免责声明:我是 Flex 的传播者,所以 Flex 是完美的一切。);-)

我用你的图表构建了一个解决方案。您在左 Pane 中要求的是不可能的。您有固定高度的边距和固定高度的 Logo ,但希望该区域是屏幕的整个高度。看到问题了吗?那里必须有一些可变的东西。

所以....我使用了两个 flex 填充面板——一个在 Logo 容器上方,一个在下方,使 Logo 垂直居中,但同时垂直填充屏幕。我很确定视觉效果符合您的预期。

其他一切都完全按照您的要求进行。

注意:我在 CSS 表的底部给了你一大块 CSS,你可以在你的所有元素中复制-粘贴-重复使用它们来进行 CSS Flex 管理。 Flex 非常强大,那几个 CSS 类使工作变得简单。

注意:这很丑陋!我在所有东西周围都加上了边框,这样你就可以准确地看到发生了什么,所以它看起来很糟糕。您当然会删除/注释掉实际使用的边界。不过,边界在开发过程中非常有用。

给你! https://jsfiddle.net/brebey/ya8rea0f/2/

我这里还有一个更通用的 Flex 盒子演示。它展示了如何将非常常见的三 Pane 布局从底部(页眉/内容/页脚布局),在任何位置(顶部/中心/底部)使用可变宽度 Pane ,然后在其中(在可变高度的内容 Pane 中),它显示了在也很常见的从左到右的布局(菜单/内容/广告等)中完成的相同操作。如果您有兴趣,请看这里。 https://jsfiddle.net/brebey/sm4amanj/

flexbox 的神奇之处在于它们是 CSS 中唯一允许您向任何 Flex DIV 自由添加填充、边框和/或边距的机制,并且它们按预期工作,而不会产生大量的滚动条。上面的演示展示了通过复选框让您打开/关闭装饰。

** 如果对您有帮助,请接受/投票赞成答案! **

注意:我只为您做了 Flex/Geometry 部分;看起来你对等式的背景/边框/颜色部分有很好的处理。如果您需要帮助来为您正在寻找的效果设置正确的背景/透明/不透明序列,请大声回应,我会帮助您。

/* */

关于html - CSS:具有 3 个 div 的 Flex 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38029739/

相关文章:

html - "organize"/"render"/"generate"HTML 的简单方法?

css - 使一个 Div 的高度填充剩余空间,但不要超过另一个 Div

html - 如何使流体布局等距

html - flex 盒/IE11 : flex-wrap: wrap does not wrap (Images + Codepen inside)

javascript - 使用angularjs从本地json打印数据

HTML/CSS 自定义复选框按钮图像问题

javascript - 跨 Divs 移动 SVG 元素

javascript - 在jquery中,如何获取使用复选框选择的表的特定行的值?

javascript - 在 Firefox 中加载大型 HTML 表的动画

java - 使用 URL.openStream() 下载的 HTML 内容始终包含无效字符