css单位%在不同属性中的依据计算

简介: css单位%在不同属性中的依据计算

在开发中,我们经常会使用%来作为一些css的属性值单位。那么我们知道他们具体到底依据什么来计算的具体的像素值的吗?


下面我们就来看一看吧。


%参考的应该是包含块(containing block),即包含我们元素的块且它不必是直接的父元素。


width, height


这两个属性,他们都是相对包含块的width,height来计算的。这里的包含块并不是他们的直接父元素,而是根据position的一些定位来看元素被哪个父元素包裹。


<style>
    .grandparent {
      position: relative;
      width: 300px;
      height: 200px;
      background: blue;  
    }
    .parent { 
      width: 100px; 
      height: 100px; 
      background: yellow; 
    } 
    .child { 
      position: absolute; 
      width: 50%; 
      height: 50%; 
      top: 25%; 
      left: 25%; 
      background: red; 
    } 
  </style>
  <!-- 当一个元素为其宽度分配一个百分比值时, 
    width 是基于包含块的width, height 是基于包含块的 height。 -->
    <div class="grandparent">
      <div class="parent">
        <div class="child"></div>
      </div>
    </div>


网络异常,图片无法展示
|


padding 水平和垂直


padding相关的属性,他们都是相对包含块width来计算的。这里的包含块并不是他们的直接父元素,而是根据position的一些定位来看元素被哪个父元素包裹。


<style>
    .grandparent {
      position: relative;
      width: 300px;
      height: 200px;
      background: blue;  
    }
    .parent { 
      width: 100px; 
      height: 150px; 
      background: yellow; 
    } 
    .child { 
      position: absolute; 
      width: 50px; 
      height: 50px; 
      padding-left: 10%;
      padding-top: 10%; 
      background: red; 
    } 
  </style>
  <div class="grandparent">
    <div class="parent">
      <div class="child"></div>
    </div>
  </div>


网络异常,图片无法展示
|


定位的top, left, right, bottom


  • left, right: 相对于包含块的width。


  • top, bottom: 相对于包含块的height。


<style>
    .grandparent {
      position: relative;
      width: 300px;
      height: 200px;
      background: blue;  
    }
    .parent { 
      width: 100px; 
      height: 100px; 
      background: yellow; 
    } 
    .child { 
      position: absolute; 
      width: 50%; 
      height: 50%; 
      top: 25%; 
      left: 25%; 
      background: red; 
    } 
  </style>
  <!-- 当一个元素为其宽度分配一个百分比值时, 
    width 是基于包含块的width, height 是基于包含块的 height。 -->
    <div class="grandparent">
      <div class="parent">
        <div class="child"></div>
      </div>
    </div>


网络异常,图片无法展示
|


margin 水平和垂直


他们和padding一样,都是相对于包含块的width计算的。


<style>
    .grandparent {
      position: relative;
      width: 300px;
      height: 200px;
      background: blue;  
    }
    .parent { 
      width: 100px; 
      height: 100px; 
      background: yellow; 
    } 
    .child {
      position: absolute;
      display: inline-block;
      background: red;
      width: 20px;
      height: 20px;
      margin-top: 50%;
      margin-left: 50%;
    }
  </style>
  <div class="grandparent">
    <div class="parent">
      <div class="child"></div>
    </div>
  </div>


网络异常,图片无法展示
|


transform:translate()


相对于自身宽高。


<style>
    .grandparent {
      position: relative;
      width: 300px;
      height: 200px;
      background: blue;  
    }
    .parent { 
      width: 100px; 
      height: 100px; 
      background: yellow; 
    } 
    .child { 
      position: absolute; 
      width: 50px;
      height: 50px;
      transform: translate(25px, 25px);
      /* transform: translate(50%, 50%); */
      background: red; 
    } 
  </style>
  <div class="grandparent">
    <div class="parent">
      <div class="child"></div>
    </div>
  </div>


网络异常,图片无法展示
|


backgroun-size


他也是相对于自身宽高。


<style>
    .parent {
      width: 300px;
      background: blue;
      height: 200px;
    }
    .child {
      background-image: url(https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic4.zhimg.com%2Fv2-08c763e8c299ff4fdc345d23f2da944b_r.jpg&refer=http%3A%2F%2Fpic4.zhimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1663586577&t=653c8a6f71b9aca5abd919f4e00ef432);
      background-size: 50% 50%;
      /* 这个是通过一些计算。让背景图片放在具体的位置 */
      background-position: 50% 50%;
      /* background-position: 100% 100%; */
      background-repeat: no-repeat;
      background-color: red;
      width: 100px;
      height: 200px;
    }
  </style>
  <div class="parent">
    <div class="child"></div>
  </div>


网络异常,图片无法展示
|


font-size


这个属性有点特殊,他只和父元素的font-size值有关。


<style>
  .grandparent {
      position: relative;
      width: 300px;
      height: 200px;
      background: blue;  
      font-size: 20px; 
    }
    .parent { 
      width: 100px; 
      height: 100px; 
      background: yellow; 
      font-size: 40px;
    } 
    .child { 
      position: absolute; 
      font-size: 100%;
    } 
  </style>
    <div class="grandparent">
      <div class="parent">
        <div class="child">12345</div>
      </div>
    </div>


网络异常,图片无法展示
|


相关文章
|
7天前
|
前端开发
了解 css中 backface-visibility 属性
了解 css中 backface-visibility 属性
13 0
|
8天前
|
前端开发
CSS常用滤镜属性讲解
本文介绍了CSS滤镜的几种常用效果,包括高斯模糊、亮度和对比度调整、灰度化、图像反转、透明度调整、饱和度调整及复古滤镜等。例如,使用`blur(10px)`可使图像产生模糊效果,包裹层设置`overflow: hidden`可避免边缘模糊;`brightness(150%)`和`contrast(150%)`分别增强图像亮度和对比度;`grayscale(1)`将图像转为灰度;`invert(1)`实现图像颜色完全反转;`opacity(0.5)`调整图像半透明;`saturate(350%)`增加饱和度;`sepia(100%)`营造复古深褐色调;`hue-rotate(180deg)`改变
16 4
CSS常用滤镜属性讲解
|
8天前
|
前端开发
了解 css中 backface-visibility 属性
`backface-visibility` 是一个CSS属性,用于3D转换时控制元素背面的可见性,以优化渲染性能。默认情况下,背面被隐藏以减少不必要的渲染。此属性有两值:`visible` 表示背面可见;`hidden`(默认值)则隐藏背面。 通过双面卡片案例演示了其用法:两个重叠盒子,一个显示图片,另一个显示文字且初始状态为背面朝外。鼠标悬停时,图片盒子翻转显示背面,文字盒子翻转显示正面,同时设置 `backface-visibility: hidden` 以确保背面不被渲染。 兼容性良好,广泛支持现代浏览器。
18 2
了解 css中 backface-visibility 属性
|
5天前
|
前端开发 UED 开发者
使用 CSS 的 line-height 属性来提高可读性
使用 CSS 的 line-height 属性来提高可读性
6 0
|
7天前
|
前端开发
CSS常用滤镜属性讲解
CSS常用滤镜属性讲解
14 0
|
1月前
|
前端开发
学习css的clip-path属性
【7月更文挑战第1天】了解CSS `clip-path`属性,用于定义元素显示区域的裁剪形状,如圆形、椭圆、多边形、矩形及SVG路径。通过配合过渡和动画,可创建动态交互效果。例如,`clip-path: circle(radius at center);`用于创建圆形裁剪,`polygon`用于自定义多边形。还可以使用`path()`引用SVG路径数据。[资源推荐:bennettfeely.com/clippy/](https://bennettfeely.com/clippy/),提供交互式工具测试不同形状。
39 0
学习css的clip-path属性
|
1月前
|
前端开发 JavaScript C++
CSS 【详解】样式选择器(含ID、类、标签、通配、属性、伪类、伪元素、Content属性、子代、后代、兄弟、相邻兄弟、交集、并集等选择器)
CSS 【详解】样式选择器(含ID、类、标签、通配、属性、伪类、伪元素、Content属性、子代、后代、兄弟、相邻兄弟、交集、并集等选择器)
26 0
|
1月前
|
前端开发
设计--字体样式---斜体,CSS字体属性用法
设计--字体样式---斜体,CSS字体属性用法
|
1月前
|
前端开发
前端 CSS 经典:mix-blend-mode 属性
前端 CSS 经典:mix-blend-mode 属性
15 0
|
1月前
|
前端开发
前端 CSS 经典:backface-visibility 属性
前端 CSS 经典:backface-visibility 属性
20 0