有了HTML/CSS,我怎样才能使一个元素的宽度和/或高度达到其父元素的100%,并且仍然有适当的填充或边距?

我所说的"适当"是指,如果我的父元素是200px高,并且我将height = 100%指定为padding = 5px,我希望我应该得到一个190px高的元素,所有的边都是border = 5px,恰到好处地居中在父元素中.

现在,我知道这不是标准盒子模型指定的工作方式(尽管我想知道为什么,确切地说…),所以显而易见的答案是不起作用的:

#myDiv {
    width: 100%
    height: 100%;
    padding: 5px;
}

但在我看来,对于一个任意大小的父母来说,一定有某种方法可以可靠地产生这种效果.有谁知道完成这项(看似简单的)任务的方法吗?

哦,顺便说一句,我对IE兼容性不是很感兴趣,所以(希望)这会让事情变得容易一些.

EDIT:既然要举一个例子,下面是我能想到的最简单的一个:

<html style="height: 100%">
    <body style="height: 100%">
        <div style="background-color: black; height: 100%; padding: 25px"></div>
    </body>
</html>

接下来的挑战是让黑匣子在所有边缘显示25像素的填充,而页面不会变得足够大,以至于需要滚动条.

推荐答案

我在读"PRO HTML and CSS Design Patterns"时学会了如何做这类事情.display:blockdiv的默认显示值,但我想明确说明.容器必须是正确的类型;position属性是fixedrelativeabsolute.

.stretchedToMargin {
  display: block;
  position:absolute;
  height:auto;
  bottom:0;
  top:0;
  left:0;
  right:0;
  margin-top:20px;
  margin-bottom:20px;
  margin-right:80px;
  margin-left:80px;
  background-color: green;
}
<div class="stretchedToMargin">
  Hello, world
</div>

Nooshu's commentFiddle

Css相关问答推荐

如何提高数学输出的质量?

如何将div与图像维度进行zoom ?

VueJS3+Vutify中缺少一些CSS类

正确的`最小/最大宽度`+`非(设备类型)`css媒体查询的语法

用两步函数内插的css动画值

如何通过重复的网格区域来简化网格布局?

我想在视频上使用混合混合模式的 svg

如何在真实文本旁边制作文本阴影,使其看起来像 css 中的重复文本?

我无法覆盖 react ui 库中的组件样式

基于类的 CSS Select 器

位置绝对混乱的 CSS Flexbox

  • 元素上的子弹来自哪里?
  • Angular 5 在某些类中添加了ng-star-inserted - 那是什么?

    bootstrap 程序中有 7 个相等的列

    数据协议 URL 大小限制

    在无序列表中的项目之后添加管道分隔符,除非该项目是最后一行

    CSS停止图像下的文本换行

    :before 和 ::before 有什么区别?

    CSS显示:表格列应该如何工作?

    仅当存在 2 个类时,您可以使用 CSS 定位元素吗?