美文网首页
容器与图片宽高不确定前提下图片居中

容器与图片宽高不确定前提下图片居中

作者: monvhh | 来源:发表于2018-09-07 00:13 被阅读0次

需求:
针对浏览器窗口,图片水平居中。
浏览器窗口高宽未知;
图片高宽未知;且必须考虑图片比窗口大
要兼容低版本ie,所以不能用css3。

方式一:

 <style>
    html,body{
        margin:0;
        padding:0;
      }
      .container{
        width:100%;
        min-width: 1080px;
        height: auto;
        overflow: hidden;
      }
      .imgWrapper{
        position: absolute;left: 50%;
      }

      .imgWrapper img{
        width:auto;
        height: auto;
        position:relative;
        left: -50%;
      }
    </style>
</head>

<body>
  <div class="container">
    <div>
    <div class="imgWrapper">
      <img src="./test.png">
    </div>
  </div>
  </div>
</body>

方式二

<style>
    html,
    body {
      margin: 0;
      padding: 0;
    }

    .ct {
      width: 100%;
      height: auto;
      min-width: 1080px;
      overflow: hidden;
    }

    .clearfix::after {
      display: block;
      clear: both;
      content: "";
    }

    .relaWrapper {
      width: 100%;
      height: auto;
      min-width: 1080px;
      left: 50%;
      position: relative;
    }

    .imgWrapper {
      float: left;
    }

    .imgWrapper img {
      width: auto;
      height: auto;
      position: relative;
      left: -50%;

    }
  </style>
</head>

<body>
  <div class="ct">
    <div class="relaWrapper">
      <div class="clearfix">
        <div class="imgWrapper">
          <img src="./test.png">
        </div>
      </div>
    </div>
  </div>
</body>

方式三:

<style>
        html,
        body {
            margin: 0;
            padding: 0;
        }

        .ct {
            width: 100%;
            height: auto;
            min-width: 1080px;
            overflow: hidden;
        }

        .imgWrapper {
            position: relative;
            text-align: center;
            right:50%;
        }

        .imgWrapper img {
            width: auto;
            height: auto;
            margin-right: -100%;

        }
    </style>
</head>

<body>
    <div class="ct">
        <div class="imgWrapper">
            <img src="./test.png">
        </div>
    </div>

</body>

最简单的方式,但是是写此文时才搜出来的。
参考http://www.greywyvern.com/?post=323

思路+解析:

一、需求分析

1.宽度不确定但是页面渲染时已经是固定宽度,这是前提。
2.容器的宽度由父宽度决定,此场景是浏览器窗口。
3.图片的宽度由图片src决定。(可以扩展成该待居中容器的宽度由其子决定,这样就可以适用于非图片。)

二、思路分析

方法一、二

  1. 图片高宽不确定,父也不确定,所以不能用background-image。虽然用background-image,居中非常容易,但是background-image是没有大小的,不能把自己撑开。so, <img>
  2. 宽度不确定,且子宽度可能超过父,text-align:center不能实现。left不超过左边看起来是优先级最高的。待证实
  3. 原生居中的css无法实现,就只能靠50%这种东西了。
  4. 要靠两个50%才能实现,即向右(父宽度-子宽度)/2。子大于父时即为向左。
  5. 无论是left\right;margin-left\margin-right,百分比都是相对于父容器。
  6. 所以如何实现有两个父容器,宽度竟然一个为窗口宽度,一个为图片宽度?
  7. 对于img(可替换元素可能都是),width:100%是图片宽度。
  8. 对于其他,width:100%是父级宽度。
  9. 如何让img的父拥有img的宽度才是问题关键。
  10. 9的答案,脱离父的限制:absolute和float都可以。img可以撑开它的宽度。测试得知,暂未找到理论依据
  11. 对于absolute和float而言,完全了父,无法实现再针对父实现left或者margin-left。
  12. 11的解决:让他再回归到正常文档流的布局。如下、
    对absolute而言是通过拥有一个relative的父。absolute的相对定位由非static的元素。
    对float而言有诸多方式,bootstrap提供的clearfix非常好用。暂且这个

方法三

text-align:center我一开始就放弃了,所以没有尝试。查出此方案也是很惊艳,以后为马后炮式解析

  1. 既然text-align:center必须是在左边界不超出的前提下,而子元素太大。那么可以‘缩小’子元素
  2. 此缩小为让父级眼中的img变小:margin-left/margin-right为负值就是一种方式。
    设img的width=子宽度,窗口width=父宽度。终极目标:向左(子宽度-父宽度)/2。(此案例子比父宽,所以还是这样看着更顺眼)
  3. img-> margin-left:-100%。子向左 1父宽度;在父眼里,子宽度=(子宽度-父宽度)
  4. 父->left:50%。父向右 1/2父宽度。父的中线已经在原父的由边界了,现祖父(窗口)右边界。
  5. text-align:center。将3造成的 (子宽度-父宽度)的子的中线,挪到4导致的窗口右边界。因此对子而言,向右挪动 父宽度-(子宽度-父宽度)/2
  6. 5和3造成的img的向左挪动结果为:1父宽度-(父宽度-(子宽度-父宽度)/2) = (子宽度-父宽度)/2
    以上还是画图比较清晰。
    此方案有大bug,不知是否text-align的局限性导致,比如左边界不超出的前提。以后再研究。

收获

无论网上有多少种居中解决方案,了解原理才是硬道理。

相关文章

  • 容器与图片宽高不确定前提下图片居中

    需求:针对浏览器窗口,图片水平居中。浏览器窗口高宽未知;图片高宽未知;且必须考虑图片比窗口大要兼容低版本ie,所以...

  • HTML+CSS \01

    1、如何实现不确定宽高的盒子上下左右居中 2、如何实现不确定宽高的图片上下左右居中 3、纯css写倒三角的原理:

  • css

    1、如何实现不确定宽高的盒子上下左右居中 2、如何实现不确定宽高的图片上下左右居中 3、纯css写倒三角的原理: ...

  • 所有的布局功能总结

    1、图片等比例自动缩放 2、子元素宽高确定或者不确定,水平垂直居中 3、移动端页面适配———多方案解析https:...

  • 居中布局

    水平居中 垂直居中 垂直水平居中 已知元素的宽高的居中布局 定位居中布局 盒模型居中布局 图片的垂直水平居中(利用...

  • Android ImageView ScaleType详解

    1. center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示 2....

  • 九宫格预览图片自适应居中

    当宽高不一的图片要在一个正方形容器居中显示时,先看效果图 点击展开大图效果: css部分 方法

  • css关于居中的方式

    父元素没有固定宽高 水平垂直居中 html: css: 水平居中 不确定子元素宽高 设置水平居中,先将子元素转化为...

  • 纯CSS实现未知尺寸的图片在容器中水平和垂直居中

    使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中 CSS HTML

  • CSS水平居中

    假设html元素为下面这样,父容器和子容器的宽高均为不确定 下面四种方案对其水平居中方案一: test-align...

网友评论

      本文标题:容器与图片宽高不确定前提下图片居中

      本文链接:https://www.haomeiwen.com/subject/quxfgftx.html