宽高等比布局

2019-11-04  本文已影响0人  yuho_小豪哥

实际开发中有时候会需要用到一种布局方式,即 DOM 元素的宽高始终为一特定比例。而这种布局的实现主要依赖于一个基础的 CSS 知识点:当 margin/padding 取形式为百分比的值时,无论是 left/right,还是 top/bottom,都是以父元素的width为参照物的,比如 padding: 100% 就等于父元素的宽度。

W3C 规范

Note that in a horizontal flow, percentages on ‘margin-top’ and ‘margin-bottom’ are relative to the width of the containing block, not the height (and in vertical flow, ‘margin-left’ and ‘margin-right’ are relative to the height, not the width).
Note that percentages on ‘padding-top’ and ‘padding-bottom’ are relative to the width of the containing block, not the height (at least in a horizontal flow; in a vertical flow they are relative to the height).

大意便是,水平流中,margin、padding 的 top/bottom 百分比都是以父元素宽度为参照的;而在垂直流中,margin 的 left/right 以及 padding 的 top/bottom 的百分比则是以父元素高度为参照。

实例分析

实现如下布局

html.png

代码实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>宽高等比布局</title>
    <style>
      .parent{
        overflow: hidden;
        position: absolute;
        left: 10px;
        right: 10px;
        top: 50%;
        transform: translateY(-50%);
        background-color: #c52121;
      }

      .child{
        width: 100%;
        padding-top: 50%;
        background-color: #988f8f;
      }
      span{
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        font-size: 20px;
        color: #D8D8D8;
      }

      img{
        float: left;
        margin-right: 10px;
        border: 2px solid #fdf6e3;
      }
    </style>
</head>
<body>
  <section class="parent">
      <div class="child">
        <span>
          <img src="https://tuimeizi.cn/sexy?w=300&h=300&o=2" alt="" width="200px">测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例测试案例
        </span>
      </div>
  </section>
</body>
</html>

参考文章

上一篇下一篇

猜你喜欢

热点阅读