余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

很多人css数值(百分比|负值)基准分不清,今天给你讲讲

xiyangw 2022-11-25 11:31 26 浏览 0 评论

今天为什么要给大家讲解这个东西呢,因为css这部分,尤其是数值这部分感觉非常简单,但是尤其是简单的,却很多人根本就没有弄懂。所以今天就来讲一下css的数值问题吧。大家还是好好听一下吧。

width height 百分比

当元素的height、width设置为百分比时,分别基于包含它的块级对象的高度、宽度。这个是常规百分比的含义。

 <div class="container">
   <div class="inner">注意这里</div>
   <div class="divider">我是分割线</div>
 </div>
 ?
 .container{
   width: 500px;
   height: 300px;
   border: 1px solid grey;
 }
 ?
 .inner{
   background: lightblue;
   text-align: center;
   width: 50%;
   height: 50%;
 }
 .divider{
   border-top: 1px solid lightblue;
   text-align: center;
 }


margin 百分比

假设一个块级容器,宽 500px,高 300px,块级子元素定义 margin:10% 5%;,你觉得 margin 的 top, right, bottom, left 计算值最终是多少?

我们来实际看一下

 <div class="container">
   <div class="inner">注意这里</div>
   <div class="divider">我是分割线</div>
 </div>
 ?
 .container{
   width: 500px;
   height: 300px;
   border: 1px solid grey;
 }
 ?
 .inner{
   margin: 10% 10%;
   background: lightblue;
   text -align: center;
 }
 .divider{
   border-top: 1px solid lightblue;
   text-align: center;
 }


结果出来了,50px 50px 50px 50px,并不是50px 30px 50px 30px

为什么

CSS权威指南中的解释:

我们认为,正常流中的大多数元素都会足够高以包含其后代元素(包括外边距),如果一个元素的上下外边距是父元素的height的百分数,就可能导致一个无限循环,父元素的height会增加,以适应后代元素上下外边距的增加,而相应的,上下外边距因为父元素height的增加也会增加。

margin 的百分比值参照其包含块的宽度进行计算。

当书写模式变成纵向的时候,其参照将会变成包含块的高度。我们改变一下上面例子中的 CSS 书写模式:

 .container{
   width: 500px;
   height: 300px;
   border: 1px solid grey;
   writing-mode: vertical-lr;
 }


这时的结果为:30px 30px 30px 30px

也就是说书写模式影响 margin 百分比的参照对象

padding 百分比

同上 ?

举个例子看看效果。注意,这是纵向排列的例子。

注意这里

我是分割线

同上一个例子相比, 左侧元素占位区域并没有扩大,仅仅是由于margin 改为padding 导致背景区域扩大而已。

因此,padding的百分比不是相对于自身,而是当书写模式为默认横向排列时,相对最近父元素的宽度,书写模式为writing-mode: vertical-lr; 纵向排列时,百分比相对于父元素高度

width、padding 联合百分比

单用一个很简单,但如果联合,可能就会有问题了。这里我不禁要问一句:

兄弟,你听过盒模型么?

  • W3C的标准盒模型 box-sizing: content-box,默认属性 设置的width或height是对 实际内容(content)的width或height进行设置,内容周围的border和padding另外设置
  • 怪异盒模型 box-sizing: border-box 设置的width或height是对 实际内容(content)+内边距(padding)+边框(border)之和

现在,我们来看个栗子,其中内部元素width设为100%, padding设为10%

 <div class="container">
   <div class="inner"><div class="text">注意这里</div></div>
   <div class="divider">我是分割线</div>
 </div>
 ?
 .container{
   width: 500px;
   height: 300px;
   border: 1px solid grey;
 }
 .inner{
   background: lightblue;
   text-align: center;
   width: 100%;
   padding: 10% 10%;
   box-sizing: content-box; // 补上这里是因为有些环境默认不是标准盒模型
 }
 .divider{
   border-top: 1px solid lightblue;
   text-align: center;
 }
 .text{
   background: yellow;
 }


在标准盒模型下,width: 100%; padding: 10% 10%; 会导致内部元素溢出,如果遇到这种情况,一般都会使用怪异盒模型,即设置box-sizing: border-box,这时候width的值是会包含padding的距离的。你可以自己打开控制台试试,这里就不举例了。

top、left、right、bottom 百分比

还是看图说话

 <div class="container">
   <div class="inner"></div>
 </div>
 ?
 .container{
   width: 500px;
   height: 300px;
   border: 1px solid grey;
   position: relative;
 }
 ?
 .inner{
   width: 200px;
   height: 100px;
   background: lightblue;
   top:10%;
   left: 10%;
   position: absolute;
 }

可以很明显的看出,left相对于父元素宽度,top相对于父元素高度。同理可推出right相对于父元素宽度,bottom相对于父元素高度。

translate百分比

在translate 函数当中使用百分比是以该元素自身的宽高作为基准。

当子元素的width和height未知时,无法通过设置margin-left:-width/2和margin-top:-height/2来实现,这时候可以设置子元素的transform: translate(-50%,-50%)。

 <div class="container">
   <div class="inner"></div>
 </div>
 复制代码
 .container{
   width: 500px;
   height: 300px;
   border: 1px solid grey;
   position: relative;
 }
 ?
 .inner{
   width: 50%;
   height: 50%;
   background: lightblue;
   position: absolute;
   left: 50%;
   top: 50%;
   transform: translate(-50%,-50%);
 }

translate 属性和绝对定位、相对定位属性加上 top、left 数值都可以使元素产生位移,但存在细微差别,表现在offsetLeft 和 offsetTop 属性。

使用绝对定位、相对定位属性加上 top、left ,会影响offsetTop和 offsetLeft 的值;

使用 translate 的offsetTop和 offsetLeft 与没有产生位移的元素没有区别,即无论translate 的值为多少,offsetTop和 offsetLeft 的值都是固定不变的。

margin为负值

  1. margin-left,margin-right为负值
  • 元素本身没有宽度,会增加元素宽度
 <div class="container">
   <div class="inner">里层的元素设置了margin-right:-100px</div>
 </div>
 .container{
   width: 500px;
   height: 200px;
   border: 1px solid grey;
   margin-left: 100px;
 }
 ?
 .inner{
   height: 100px;
   background: lightblue;
   margin-left: -100px;
 }

里层的元素设置了margin-left:-100px

  • 元素本身有宽度,会产生位移 补充inner元素宽度属性
 .inner{
   height: 100px;
   background: lightblue;
   margin-left: -100px;
   width: 100%;
 }

里层的元素设置了margin-left:-100px

  1. margin-top为负值,不管是否设置高度,都不会增加高度,而是会产生向上的位移
 .inner{
   height: 100px;
   background: lightblue;
   margin-left: -100px;
   width: 100%;
 }

里层的元素设置了margin-top:-100px

  1. margin-bottom为负值的时候不会位移,而是会减少自身供css读取的高度.
 <div class="container">
   <div class="inner">里层的元素设置了margin-bottom:-100px</div>
   <div>这里是下一个元素</div>
 </div>
 ?
 .inner{
   height: 150px; // 此处height变为150px
   background: lightblue;
   margin-bottom: -100px;
   width: 100%;
 }

里层的元素设置了margin-bottom:-100px

这里是下一个元素

那么,你觉得负值改为负百分比又是什么情况呢?欢迎留言

## padding 为负值

很遗憾,padding不允许指定为负,指定了也无效~

1、点赞+评论(勾选“同时转发”)

2、关注小编。并私信回复关键字【学习】(一定要私信哦~手机APP点击我的头像就能看到私信按钮了),部分资料如下


相关推荐

零基础怎么学Web前端 大概需要用多长时间(web前端零基础要学多久)
零基础怎么学Web前端 大概需要用多长时间(web前端零基础要学多久)

  零基础怎么学Web前端?大概需要用多长时间?互联网发展越来越快,市场行业竞争力越来越大,IT行业成了很多大学生毕业后的理想选择。而相对于其他编程语言行业而言...

2023-03-21 18:48 xiyangw

IT培训一般要学多久?IT培训费用多少?(it培训吗)

IT培训是近年来比较热门的职业培训之一,不仅因为行业薪资高,而且付出和回报也是成正比的。大部分参加职业培训的人都会希望投资的钱和时间都能够有所回报。那么我们今天就来讲解下IT培训一般要学多久,以及IT...

学web前端难吗?需要学什么?(学web前端难吗?需要学什么软件)

很多朋友想学习web前端技术,心中也有知道了一些机构,但是迟迟没有报名的原因恐怕就是:零基础去web前端培训真的4个月真的能学会吗?因为害怕自己4个月后还是一无所知,那样既耽误时间又浪费钱。所以一直在...

杭州Web培训要多长时间?需要学习什么内容?(web培训学校)

Web前端开发作为互联网行业热门岗位之一,在近几年越来越受到了大家的喜爱,很多人纷纷想要从事Web前端开发工作。对于现阶段来看的话,参加专业的Web前端培训是学习前端开发技能的主要方式,那杭州Web前...

你还在担心前端培训班费用吗?看看这篇!(前端培训学费大概多少)
你还在担心前端培训班费用吗?看看这篇!(前端培训学费大概多少)

在互联网飞速发展的时代,前端开发越来越受行业的喜爱,前端开发学习乐趣要比后端多一些,小编相信大多数人是觉得这个职业是属于互联网IT的,认为薪资高而且工作体面,发...

2023-03-21 18:47 xiyangw

成都web前端培训零基础应该怎么学习?(成都web前端工资一般多少)
成都web前端培训零基础应该怎么学习?(成都web前端工资一般多少)

众所周知前端需要学习的知识很多并且比较繁杂,前端技术的更新迭代又比较快,可能你在上一家公司用的是VUE框架,下一家公司就使用react框架,所以,学习前端需要大...

2023-03-21 18:47 xiyangw

4个月学web前端找不到工作正常吗?什么原因?(4个月学web前端找不到工作正常吗?什么原因呢)
4个月学web前端找不到工作正常吗?什么原因?(4个月学web前端找不到工作正常吗?什么原因呢)

4个月学前端找不到工作正常吗?如果是零基础学习4个月找不到工作很正常,因为短时间学习掌握基础知识没问题,但是缺乏真实的项目经验是影响找工作的最大因素,现在市面上...

2023-03-21 18:47 xiyangw

web前端培训费用大概多少(视频剪辑培训班学费一般多少)
web前端培训费用大概多少(视频剪辑培训班学费一般多少)

web前端开发的薪资水平在整个IT技术岗位中都是算比较高的,而且随着互联网的快速发展,对前端开发人才的需求量还在不断增加,因此吸引了越来越多的人通过培训方式进入...

2023-03-21 18:46 xiyangw

武汉Web前端培训哪里好?培训多久才能学会?(武汉 前端)
武汉Web前端培训哪里好?培训多久才能学会?(武汉 前端)

Web前端如今在互联网行业非常盛行,几乎每一个企业都少不了对Web前端人员的需求。正是因为如此,很多人想要学习Web前端从而实现高薪梦想。那么,武汉Web前端培...

2023-03-21 18:46 xiyangw

海宁IT培训,Web前端开发学起来难不难(web前端开发是什么)

Web前端工程师是谐和前端设计师、后端程序员完成网站页面或步伐的界面丑化、交互体验的一个地位。在互联网高速进展的本日,在一系列的招聘网站上天天都有不少web前端全栈工程师雇用需要,web前端失业远景辽...

学web前端开发需要多久?必学基础技术有哪些?
学web前端开发需要多久?必学基础技术有哪些?

  随着移动互联网时代的来临,web前端开发人员成为了热门人才,有不少人表示想要培训学习前端开发技术,然后从事相关工作。那么作为零基础小白,学web前端开发需要...

2023-03-21 18:45 xiyangw

成都前端培训周期是多久?能达到什么水平?(在成都做前端一个月有多少)
成都前端培训周期是多久?能达到什么水平?(在成都做前端一个月有多少)

成都前端培训周期为多久?费用又是多少呢?能达到什么水平呢?可以说这是很多想要学习前端的人来说,最关心的问题了。一起来探究一下:根据从市场中了解,成都前端培训周期...

2023-03-21 18:45 xiyangw

成都前端培训靠谱吗?(成都前端培训机构推荐)
成都前端培训靠谱吗?(成都前端培训机构推荐)

成都前端培训靠谱吗?移动互联网时代,前端开发工程师已经成为了技术主流。行业的飞速发展,互联网企业需要大量的专精于Web前端技术的前端工程师,满足市场所需。如此空...

2023-03-21 18:45 xiyangw

HTML5前端培训学校学费多少?学多久?(html5前端教程)
HTML5前端培训学校学费多少?学多久?(html5前端教程)

HTML5前端培训学校学费多少?学多久?下面和千锋广州小编一起来看看吧!?关于HTML5培训费用,地区不同,收费不一样。因为各机构提供的教学服务不同所以费用也...

2023-03-21 18:45 xiyangw

电脑培训要多久,学费多少钱,短期能学到东西吗?

电脑培训要多久,电脑培训学费多少钱,短期能学到东西吗等问题一直困扰学员。高额薪资待遇,让人们对电脑行业趋之若鹜。到底电脑培训要多久,电脑培训学费多少钱等电脑培训的问题,就让小青给大家意一一解答:一、电...

取消回复欢迎 发表评论: