如何使用div来隐藏/滚动溢出并缩放到具有一致边距的视口?

时间:2017-09-08 02:52:31

标签: css overflow viewport-units

(编辑:我当前的代码已添加到帖子底部)

我需要为div的高度设置一个值,以便正确隐藏/滚动溢出,但我不想在特定像素高度处使用div。我可以通过使用%或vh单位来解决这个问题,但我实际上并不想使用这些单位。通过这个,我的意思是我希望我的div总是,例如,页面的2/3,因为这意味着div的底部将与底部的距离不同浏览器窗口,像这样 -

* {
  padding: 0;
  margin: 0;
}

html, body {
  width: 100%;
  height: 100%;
}

body > div {
  width: 90%;
  height: 90%;
  background: yellow;
}
<!DOCTYPE html>

<html>
<head>

  <link rel="stylesheet" href="style2.css">

</head>

<body>

  <div>
  </div>

</body>
</html>

- 我希望它与浏览器窗口的底部保持一致的距离,  像这样 -

html, body {
  width: 100%;
  height: 100%;
  padding: 0;
	margin: 0;
}


div {
	background-color: yellow;
	width: 350px;
  position: fixed;
  left: 10px;
  top: 10px;
  right: 10px;
  bottom: 10px;
}
<!DOCTYPE html>

<html>
<head>

  <link rel="stylesheet" href="style2.css">

</head>

<body>


	<div>
	</div>


</body>
</html>

(主要是视觉表示,我并不是真的以代码本身为例)

基本上,我希望我的div是一个可变高度和隐藏/滚动溢出,但总是从底部10px。

我认为这些描述了我遇到的同样问题:

Setting a length (height or width) for one element minus the variable length of another, i.e. calc(x - y), where y is unknown

Getting a scrollable child div to Vertically fill the remainder of its parent dynamically

答案是使用表格或弹性箱 - 这些是唯一的选项(不使用javascript)吗?

我的代码:

* {
	margin: 0;
	padding: 0;
}

body {
	font-family: Helvetica, Arial, sans-serif;
	overflow-x: hidden;
	overflow-y: hidden;
    width: 100%;
    height: 100%;
}

p {
	font-size: 9pt;
}

a {
	text-decoration: none;
	color: black;
}


.container { /*this contains all the divs!!*/
	padding: 10px;

}

.header {

}

.name {
	float: left;
	width: 25vw;
	padding-right: 5vw;
}

.about {
	width: 65vw;
}



.main { /*this contains divs 'left' and 'right'*/
	/*background-color: #CCCCCC;*/
	clear: left;
	padding-top: 10px;
	width: 95vw;

}

.left {
	/*background-color: #E6E6E6;*/

	float: left;
	min-height: 10px;
	width: 25vw;
	padding-right: 5vw;
}

.hold { /*this is how i tried your solution*/
	position: relative;
	height: calc(95vh - 10px);
}

.right { /*this is my problem div*/
	background-color: #FFFF00;

	width: 65vw;
	height: 100%;
 	overflow-y: hidden;
 	overflow-x: hidden;
}

.lorem {
	margin-right: 20vw;
}
<!DOCTYPE html>

<html lang="en">
<head>
  <meta charset="utf-8">

  <title> Name </title>

  <link rel="stylesheet" href="style.css">

</head>

<body>

<div class="container">

	<div class="header">

		<div class="name">
			<a href="index.html"> <p> Name </p> </a>
		</div> <!-- end div name -->

		<div class="about">
			<a href="index.html"> <p> about </p> </a>
		</div> <!-- end div name -->

	</div> <!-- end div header -->


	<div class="main">

		<div class="left">

		</div> <!-- end div left -->

		<div class="hold">
		<div class="right">
		
		<div class="lorem">
		<p> 
			Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam feugiat facilisis purus at fermentum. Etiam ultricies iaculis nulla maximus cursus. Maecenas justo nulla, suscipit a dapibus at, lobortis nec mauris. Mauris egestas mi sit amet risus convallis, in hendrerit lorem maximus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse sollicitudin tempor libero, nec molestie dui tempor sit amet. Aenean molestie ex id nisl venenatis, quis tincidunt lectus porta. Vivamus aliquam lobortis nulla, id porta leo consequat sollicitudin. Ut iaculis neque placerat ipsum placerat tincidunt.

			Quisque libero sem, hendrerit quis urna sit amet, mollis venenatis nisl. Morbi vel neque rhoncus, congue purus ac, condimentum nunc. Morbi vestibulum metus nec velit eleifend, ac sodales nulla posuere. Praesent id fermentum massa. Morbi vestibulum lorem nulla, ac vestibulum nunc auctor non. Donec ultricies placerat mauris, at pretium nibh finibus eu. Suspendisse gravida neque nisl, sit amet bibendum ante placerat eget. Sed laoreet suscipit turpis vitae ullamcorper. Mauris quis pharetra eros. Curabitur quis diam non dui elementum facilisis vel ac sem. Duis vitae augue vitae mi pulvinar placerat ut quis purus. Donec sagittis maximus aliquam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.

			Phasellus pharetra nisi arcu, in laoreet lacus convallis sed. Nam euismod ligula felis, ut laoreet nisl sodales eget. Maecenas cursus, augue vitae suscipit laoreet, purus magna bibendum tellus, sed maximus ex dui ac velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla eget aliquet tellus, in viverra sapien. Sed eget urna mauris. Morbi dapibus dolor et felis viverra condimentum sed a nisl. Integer congue cursus ultrices. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse nulla risus, pulvinar eget odio vitae, scelerisque cursus magna. Nam maximus eros vitae massa euismod, vel tempus felis vulputate.

			Nunc blandit massa a nisl viverra, vitae molestie ex rhoncus. Pellentesque finibus luctus nisi. Sed quis luctus metus. Nullam sed augue ultrices, lacinia dolor ac, egestas ante. In non nisi nibh. Sed vitae dui libero. Duis ut ullamcorper urna. Phasellus quis fringilla leo.

			Nulla porta tellus ut nibh pharetra dapibus. Mauris ullamcorper egestas aliquam. Cras posuere scelerisque imperdiet. In ultrices, leo eu molestie bibendum, augue dui semper ante, vel faucibus nibh enim sed eros. Mauris ipsum dui, placerat et tincidunt vitae, laoreet vel enim. Praesent at ligula et neque placerat blandit sed vulputate ipsum. Phasellus sodales, odio nec aliquam pretium, augue lacus mattis quam, nec vulputate purus lorem vitae nisi.

			Suspendisse nisl ipsum, volutpat ac dapibus at, tincidunt eget nulla. Mauris ornare a nisi ac fringilla. Maecenas leo sapien, vulputate in dictum a, feugiat in eros. Aliquam sit amet sagittis leo. Mauris metus nisl, convallis eget mollis ut, ullamcorper eu tellus. Pellentesque eu dolor tempor, bibendum leo vitae, maximus velit. Aenean volutpat neque sit amet tellus mattis euismod.

			Quisque nec vehicula orci. Curabitur varius fringilla risus, convallis tincidunt velit porttitor vitae. Aenean in lacus nec nunc tempor dignissim nec pretium sem. Nullam finibus odio quis metus ornare, in fermentum elit rutrum. Proin vitae dui in metus vehicula sodales. Donec massa neque, suscipit ac est quis, ultrices auctor risus. Cras eu auctor lectus. Nam sagittis vulputate hendrerit. Maecenas consequat odio justo, at malesuada nulla ullamcorper a. Donec arcu tellus, dignissim ut velit vel, consequat scelerisque dolor. Curabitur dictum vel risus quis consequat.

			Pellentesque fringilla eu nisi sed tincidunt. Nulla feugiat sit amet purus sit amet cursus. Suspendisse nibh purus, tincidunt eu congue ut, ultricies id lectus. Phasellus convallis in nibh vel molestie. Nunc condimentum congue justo. In congue, turpis at vulputate imperdiet, dolor erat ultricies turpis, vitae egestas est augue in nisl. Ut ut leo diam. Duis vulputate ligula velit, vitae volutpat felis viverra a. Maecenas justo quam, lobortis a placerat ut, ullamcorper ac lorem. Sed eu vehicula odio.

			Fusce id mauris ornare, mollis mi at, vulputate turpis. Praesent a risus feugiat, rutrum lacus nec, sodales nisi. Nulla ullamcorper libero pretium lacus accumsan, eu tempor mi porta. In tincidunt porta feugiat. Cras lectus arcu, convallis nec neque ac, vestibulum pretium ex. Curabitur mi ipsum, commodo ut eros eget, fringilla fringilla tortor. Curabitur maximus tellus ut turpis malesuada, auctor semper lectus porta. Suspendisse non sapien sagittis, dapibus tellus et, egestas quam. Aliquam vitae massa sit amet urna rhoncus rutrum sit amet et lorem. Phasellus gravida justo ut vulputate vestibulum.

			Nunc sed tempus metus, sit amet volutpat mi. Quisque sed metus rutrum, iaculis enim sed, sodales lacus. Quisque quis mi ac sapien scelerisque efficitur lacinia et nunc. Proin tincidunt scelerisque turpis, non euismod ante interdum at. Sed vitae velit scelerisque, placerat nulla in, egestas justo. Mauris urna orci, pulvinar a nibh a, luctus pellentesque mauris. Nulla faucibus hendrerit urna non venenatis. Quisque nulla mi, suscipit sit amet nunc eu, dictum ullamcorper tellus. Donec lacus libero, commodo quis mauris pellentesque, feugiat iaculis nisl. Nulla facilisi. Suspendisse sed risus quis risus fringilla condimentum. Aenean aliquet in eros vel volutpat. Vivamus malesuada ultrices lorem sit amet feugiat. In interdum leo ac orci sollicitudin, maximus vestibulum nisl gravida. Sed venenatis pharetra fringilla. Etiam mauris risus, cursus et est tristique, mattis venenatis nisi.

		</p>
		</div> <!-- end div LOREM -->

	</div> <!-- end div main -->
	</div> <!-- end div hold -->
  
</div> <!-- end div container -->

</body>
</html>

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上!您可以将vhcalc结合使用,以获得所需的效果。

height: calc(100vh - 10px) - 假设元素位于屏幕顶部,这将达到您所描述的效果。

要处理滚动/溢出,您需要一个内部容器 - 在您设置height属性的容器内的div。给那个内部div { height: 100%; overflow: auto; },你应该全部设定。

这是一个演示 - 看它工作,使用全屏视图并缩小浏览器的高度。

/* These styles are just to make this easier to see,
and to normalize the display a little. */
* { box-sizing: border-box; margin: 0; padding: 0; }
.page { width: 100px; border: 2px solid; }


/* Here's the box that locks to some distance from the bottom, in this case 30px */
.outer {
height: calc(100vh - 30px);
position: relative;
border: 1px solid blue;
}

/* And here's the scrollable container inside it */
.inner {
height: 100%;
overflow: auto;
}
<div class="page">
  <div class="outer">
    <div class="inner">
    content content content content
    content content content content
    content content content content
   </div>
 </div>
</div>