CSS 小技巧(持续更新中~)

固定比例,图片自适应布局

查看以下代码,你想象中,他会渲染成什么样

<div class="adaptive-img">
    <div class="one">
    </div>
  </div>
 .adaptive-img{
    width: 200px;
    height: 200px;
    background: #f3b2b2;
    position: relative;
  }
  .one{
    padding: 100%; 
    background: blue;
    opacity: 0.5;
  }

没错,没错,你真聪明!他的图片是这样的,one padding 的左右都是200px, 是个比父级宽,也比父级高的家伙
在这里插入图片描述

那么,他取得的是父级元素的宽还是高呢?修改宽为50px,看看吧

在这里插入图片描述

  • 小知识点:
    子容器padding的大小,无论是水平还是垂直方向,都是相对于父容器的宽度来计算的!
  • 解决思路:
    通过设定padding的百分比值,padding 在垂直方向和水平方向设定的百分比值为图片实际的高宽比值
  • 实现
<div class="adaptive-img">
    <img src="../../assets/R-C.jpg" alt="" class="img">
  </div>
 .adaptive-img{
    padding-bottom: 62.5%;
    background: #f3b2b2;
    position: relative;
  }
  .img{
    position: absolute;
    left: 0;
    top: 0;
    opacity: 0.5;
    width: 100%;
    height: 100%;
  }

可以自己动手修改下padding-bottom试一下哦

幽灵节点——各种莫名奇妙多的距离

display: inline- 多的那几px

  • 现象在这里插入图片描述
<div class="parent">
        <div class="child">
		布噜布噜吐泡泡
        </div>
    </div>
	<div class="parent">
        <div class="child">
		布噜布噜吐泡泡
        </div>
    </div>
.parent {
            display: inline-block;
			font-size: 16px;
			padding: 5px 10px;
            border: 1px dashed red;
        }
		img{
			display: block;
		}
  • 原因:“换行符/空格间隙问题”
    元素被当成行内元素排版的时候,元素之间的空白符(空格、回车换行等)都会被浏览器处理,根据white-space的处理方式(默认是normal,合并多余空白),原来HTML代码中的回车换行被转成一个空白符,在字体不为0的情况下,空白符占据一定宽度,所以inline-block的元素之间就出现了空隙。这些元素之间的间距会随着字体的大小而变化,当行内元素font-size:16px时,间距为8px。
  • 解决方案:
    • 父元素添加font-size: 0px
    • 父元素设置为flex布局
    • 节点设置float
    • div 不要换行(不建议)

div包住图片,底部出现空白

  • 下方举例俩种底部出现空白,快来找不同吧~
    在这里插入图片描述
<div class="parent">
        <img src="./1.jpg"/>
		<!--
		<span>I am beauty</span>
		-->
    </div>
.parent {
   border: 1px dashed red;
}

在这里插入图片描述

  • 不同之处:
    - 细心的小伙伴找出了 第二张图多了 I am beauty
    - 更细心的小伙伴发现,文字触底,但是图片没有触底!超棒~

有些小伙伴看完 换行符/空格间隙问题,会认为这不就是在 div 和图片之间换行了,多了换行符。这时动手的朋友,已经开始尝试,消除代码中的换行了!发现不对呀,怎么还是有空格!那是为什么呢?

  • w3c规范里有这么一段:如果一个line box里没有文字、保留的空格、非0的margin或padding或border的inline元素、或其他in-flow内容(比如图片、inline-block或inline-table元素),且不以保留的换行符结束的话,就会被视作高度为0的line box。
  • 只要不满足上述任一种情况,那么就会受“幽灵空白像素”(官方说法应该叫"strut"元素)的影响从而出现行高。

举例其中一个修改:

  • 图片设置为display: block
  • 父层容器 font-size:0;
  • 父层容器:line-height:0;
  • 图层设置vertical-align为其他属性(top、middle、bottom)

文字另设font-size

参考文档

CSS百分比padding实现比例固定图片自适应布局

推荐文档

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值