CSS 各种百分比是基于什么工作的?(下)

简介: CSS 各种百分比是基于什么工作的?

transform: translate()

一个用于动画/过渡的不可思议的属性,它也支持百分比值。然而,这个属性并不指其包含的块,而是指其自身。

来个例子:

daae45ba07bf4f1eb7ced2dc1a932507.png

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>css百分比</title>
  <link rel="stylesheet" href="css/swiper.min.css">
  <link rel="stylesheet" href="css/certify.css">
  <script src="js/swiper.min.js"></script>
</head>
<body>
  <div class="grandparent">
    <div class="parent">
      <div class="child"></div>
    </div>
  </div>
</body>
</html>
<style>
  .parent {
    background: #eaeaea;
    width: 300px;
    height: 200px;
  }
  .child {
    background: red;
    width: 100px;
    height: 50px;
    transform: translate(50%, 50%);
  }
  .parent {
    position: relative;
  }
  .grandparent {
    position: relative;
  }
  .grandparent::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 99;
    background: radial-gradient(circle at 1px 1px, #000 2px, transparent 0);
    background-size: 49.5px 49.5px;
  }
</style>

在这个事例中:


父级 div 的大小为 6x4。

子 div 的大小为 2x1,使用 transform: translate(50%, 50%)

最后结果,子 div 被定位在离父 div 的顶部边缘 0.5 个单位的位置(自身高度的 1/2),并被定位在离父 div 的左侧边缘 1 个单位的位置(自身宽度的 1/2)。

background-size

background-size 属性将百分比单元的复杂性提升到一个新的水平

此属性的百分比值指的是背景定位区域,类似于包含块,但添加了以下 3 个因素:

  • 只有内容的块(content-box)
  • 带有内容和 padding 的块 (padding-box
  • 带有内容、paddingborder 的块(border-box)

这三个值是由 background-origin 给出,具体看 MDN

来个例子:

11d85603379d49e6aaf41805cd04c1d3.png

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>css百分比</title>
  <link rel="stylesheet" href="css/swiper.min.css">
  <link rel="stylesheet" href="css/certify.css">
  <script src="js/swiper.min.js"></script>
</head>
<body>
  <div class="grandparent">
    <div class="parent">
      <div class="child"></div>
    </div>
  </div>
</body>
</html>
<style>
  .parent {
    background: #eaeaea;
    width: 300px;
    height: 200px;
  }
  .child {
    background-image: url(https://media.mybj123.com/wp-content/uploads/2021/09/1632706681-f60540cafc9989b.png);
    background-size: 50% 50%;
    background-repeat: no-repeat;
    background-color: red;
    width: 50%;
    height: 50%;
  }
  .parent {
    position: relative;
  }
  .grandparent {
    position: relative;
  }
  .grandparent::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 99;
    background: radial-gradient(circle at 1px 1px, #000 2px, transparent 0);
    background-size: 49.5px 49.5px;
  }
</style>

在这个例子中:


父 div 的大小为 6x4

子 div 的大小为 3x2,没有 padding,没有 border

这里使用了一个DEV logo(比例为 1:1 )作为子 div 的背景图像,背景大小属性设置为 50% 50%

其结果是,背景图像被拉伸为 1.5 x 1 的大小。

background-position

background-size 类似,background-position 属性的百分比也依赖于背景定位区域。

来个例子:

0c7004c8907744c889bc99925af78943.png

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>css百分比</title>
  <link rel="stylesheet" href="css/swiper.min.css">
  <link rel="stylesheet" href="css/certify.css">
  <script src="js/swiper.min.js"></script>
</head>
<body>
  <div class="grandparent">
    <div class="parent">
      <div class="child"></div>
    </div>
  </div>
</body>
</html>
<style>
  .parent {
    background: #eaeaea;
    width: 300px;
    height: 200px;
  }
  .child {
    background-image: url(https://d2fltix0v2e0sb.cloudfront.net/dev-rainbow.png);
    background-size: 50% 50%;
    background-position: 50% 50%;
    background-repeat: no-repeat;
    background-color: red;
    width: 50%;
    height: 50%;
  }
  .parent {
    position: relative;
  }
  .grandparent {
    position: relative;
  }
  .grandparent::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 99;
    background: radial-gradient(circle at 1px 1px, #000 2px, transparent 0);
    background-size: 49.5px 49.5px;
  }
</style>

在这个例子中:


在本例中,使用了与前面相同的图像和布局。当我们改变background-position的值时,可以看到一些变化:


如果没有任何值(默认值为0 0),背景图像将位于左上角。

使用 background-position: 0 50%,背景图片被定位在左边中间。

使用 background-position: 50% 50%,背景图片被定位在中心。

使用 background-position: 100% 100%,背景图片被定位在右下方。

注意: background-position: 0 50% 是下面的缩写:


background-position-x: 0

background-position-y: 50%

显然,这个属性的百分比背后有一些计算,而不仅仅是图像的顶部和左侧边缘与孩子的距离。通过一些研究和测试,似乎 background-position 属性在产生一个实际值之前依赖于以下计算。


offset X = (容器的宽度-图像的宽度) * background-position-x

offset Y = (容器的高度-图像的高度) * background-position-y


在这种情况下:


容器作为子 div

图像的宽度/高度是 background-size 的结果。


font-size

对于 font-size ,百分比值仅指向它的直接父块。

来个例子:

3ba7713f08a54157bf40148102b54098.png

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>css百分比</title>
  <link rel="stylesheet" href="css/swiper.min.css">
  <link rel="stylesheet" href="css/certify.css">
  <script src="js/swiper.min.js"></script>
</head>
<body>
  <div class="grandparent">
    font-size: 13px
    <div class="parent">
      font-size: 26px
      <div class="child">font-size: 50%
      </div>
    </div>
  </div>
</body>
</html>
<style>
  .grandparent {
    position: relative;
    background: #eaeaea;
    width: 200px;
    height: 200px;
    font-size: 13px;
  }
  .parent {
    background: #aaa;
    width: 100px;
    height: 100px;
    font-size: 26px;
  }
  .child {
    position: absolute;
    background: red;
    color: #fff;
    width: 50%;
    height: 50%;
    top: 25%;
    left: 25%;
    font-size: 50%;
  }
</style>

在这个例子中,我使用与第一个例子相同的布局,字体大小分配如下。

  • grandparent 13px
  • parent 26px
  • child 50%

我们可以清楚地看到,child 的字体大小现在与 grandparent 一样,是 parent 的1/2

结语

以上就为“CSS 各种百分比是基于什么工作的?”的全部内容,希望大家阅读后能有所收获。




目录
相关文章
纯css3实现的百分比渐变进度条加载动画源码
纯css3实现的百分比渐变进度条加载动画特效源码
259 31
|
前端开发 容器
css【详解】—— margin属性(含margin百分比值,margin负值,margin合并,margin:auto,margin失效)
css【详解】—— margin属性(含margin百分比值,margin负值,margin合并,margin:auto,margin失效)
987 1
|
前端开发
你不知道的css——2. 百分比高度失效,绝对定位和非绝对定位元素的宽高百分比计算方法的不同
你不知道的css——2. 百分比高度失效,绝对定位和非绝对定位元素的宽高百分比计算方法的不同
285 1
|
移动开发 前端开发 JavaScript
H5+CSS3+JS逆向前置——5、DIV+CSS百分比布局
H5+CSS3+JS逆向前置——5、DIV+CSS百分比布局
198 0
|
前端开发 JavaScript
svg或css,写loading圆环和百分比
svg或css,写loading圆环和百分比
561 0
|
前端开发
CSS 各种百分比是基于什么工作的?(上)
CSS 各种百分比是基于什么工作的?
243 0
CSS 各种百分比是基于什么工作的?(上)
|
9月前
|
存储 自然语言处理 前端开发
抖音快手小红书虚拟评论截图生成器,模拟对话制作工具,html+js+css
这是一款纯前端实现的多平台虚拟评论生成器,支持抖音、快手、小红书风格,适用于产品演示与UI设计。采用Vanilla JS与Flexbox布局,利用IndexedDB存储数据,CSS Variables切换主题。

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    401
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    305
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    272
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    184
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    399
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    582
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    613
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    187
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    527
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    344