文章 专题 AI工具 学习 下载 问答 源码 最近更新
PHP
会员中心 讲师中心 微信公众号

扫码关注官方订阅号

登录
编程词典 博客 APP下载
首页 > web前端 > css教程 > 正文

CSS中的长度单位以及宽度自适的实例分析

黄舟
发布: 2017-07-19 13:15:50
原创
1480人浏览过

CSS 单位

作者:Chinaxiang 来源:互联网 2015-12-01 23:36



CSS中的长度单位有很多,觉得有必要整理备忘。

概览

CSS中的长度单位有很多,觉得有必要整理备忘。

网上介绍的也比较多和全,详见参考资料。

单位大体分为两大类:

  • 绝对单位 ,不会因为其他元素的尺寸变化而变化。

  • 相对单位 ,没有一个固定的度量值,而是由其他元素尺寸来决定的相对值。


单位 类型 简介
px Absolute 像素 (计算机屏幕上的一个点),1px = 1/96in
pt Absolute Points, 1pt = 1/72in
pc Absolute Picas, 1pc = 12pt
in Absolute Inches, 1in = 96px = 2.54cm
cm Absolute Centimeters, 1cm = 96/2.54px
mm Absolute Millimeters, 1mm = 1/10cm
q Absolute Quarter-millimeters, 1q = 1/4mm
% Relative 相对于父元素的宽度或字体大小
em Relative 相对于父元素的字体大小
rem Relative (即root em) 相对于html标签的字体大小
ex Relative 当前字体环境中 x 字母的高度
ch Relative 当前字体环境中 0 数字的高度
vw Relative 1% 视口(浏览器可视区域)的宽度
vh Relative 1% 视口(浏览器可视区域)的高度
vmin Relative 1% 视口(浏览器可视区域)的宽度和高度中较小的尺寸
vmax Relative 1% 视口(浏览器可视区域)的宽度和高度中较大的尺寸

由于绝对单位是固定值,没什么要介绍的,下面主要介绍相对单位。

%

相对于父元素的相同属性的大小。这个其实谈不上单位,但它毕竟可以作为长度单位来使,所以在此列出。

如果用来设置字体,则相对的就是父元素的字体大小。

大多数浏览器中 和

 标签中的默认字体尺寸是100%.
html {font-size: 100%;}body {font-size: 100%;}
登录后复制

100% = 1em = 16px = 12pt

如果用来设置宽和高等非字体尺寸,则以百分比为单位的长度值是基于具有相同属性的父元素的长度值。

<!DOCTYPE html><html><head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style type="text/css">
  p.parent {    margin:150px;    width: 200px;    height: 200px;    border: 1px solid blue;  }
  p.child {    width: 50%;    height: 50%;    border: 1px dashed black;  }
  </style></head><body>
  <p class="parent">
    <p class="child"></p>
  </p></body></html>
登录后复制


再啰嗦一点关于父元素的问题:何为父元素,相对定位(relative),绝对定位(absolute),浮动(float),固定(fixed)中如何找寻父元素?

由于HTML是树形结构,标签套标签,一般情况下的父子关系很明朗。

<p class="parent">
    <p class="child"></p>
</p>
登录后复制

相对定位元素,它的父元素符合标签嵌套。

绝对定位元素,它的父元素是离它最近的定位元素(绝对定位,相对定位,固定,但不包括浮动)或者视窗尺寸(没找到定位元素时)。

浮动元素,它的父元素也符合标签嵌套。

固定元素(特殊的绝对定位),它的父元素是视窗(浏览器默认用来展示内容的区域的尺寸,不是html 或body 的尺寸)。

注意一下绝对定位就行了,其他的相对简单。

<!DOCTYPE html><html><head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style type="text/css">
    html {        width:1000px;    }
    body {        width:800px;    }
    #box {        width:50%;        height:300px;        position: absolute;        margin-left: 200px;        border: 1px solid red;    }
    #can {        position:absolute;        top:100px;        left:100px;        width:50%;        height:50%;        border:1px solid black;    }
  </style> </head>  <body>
    <p id="box">
        <p id="can"></p>
    </p>
    </body>  </html>
登录后复制

box 宽度为视窗的一半,can 的宽高是 box 的宽高的一半。

将 can 设置为 position: fixed; 则其父元素将不再是 box 而是浏览器视窗。


can 的宽高是视窗宽高的一半。

浮动元素的父元素跟普通元素的父元素是一样的。

<!DOCTYPE html><html><head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style type="text/css">
    html {        width:1000px;    }
    body {        width:800px;    }
    #box {        width:50%;        height:300px;        position: absolute;        margin-left: 200px;        border: 1px solid red;    }
    #can {        float:left;        width:50%;        height:50%;        border:1px solid black;    }
  </style> </head>  <body>
    <p id="box">
        <p id="can"></p>
    </p>
    </body>  </html>
登录后复制


注意: padding、 margin 如果设置了百分比,上,下,左,右 用的都是父元素宽度 的值为标准去计算。

em 和 rem

两者都是基于字体尺寸的,区别在于 em 是相对于当前父元素的字体大小为标准,而 rem 是相对于 html 元素的字体大小为标准。

举个例子你就明白了。

<!DOCTYPE html><html><head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style type="text/css">
  html {    font-size: 30px;  }
  body {    font-size: 14px;  }
  p.em {    font-size: 1.2em;  }
  p.rem {    font-size: 1.2rem;  }
  </style></head><body>
  <p class="em">
    Test <!-- 14 * 1.2 = 16.8px -->
    <p class="em">
      Test <!-- 16.8 * 1.2 = 20.16px -->
      <p class="em">
        Test <!-- 20.16 * 1.2 = 24.192px -->
      </p>
    </p>
  </p>
  <p  class="rem">
    Test <!-- 30 * 1.2 = 36px -->
    <p  class="rem">
      Test <!-- 30 * 1.2 = 36px -->
      <p  class="rem">
        Test <!-- 30 * 1.2 = 36px -->
      </p>
    </p>
  </p></body></html>
登录后复制

 

ex 和 ch

ex 和ch 单位,依赖于当前字体font-family 和字体大小 font-size。 ex 指当前字体环境中小写字母x 的高度,ch指当前字体环境中数字 0 的宽度。


IE9+ 和现代浏览器都已经支持。

vw 和 vh

响应式网页设计技术很大程度上依赖于比例规则。然而,CSS比例不总是每个问题的最佳解决方案。如果想使用显示窗口的宽度或高度而不是父元素的宽度将会怎么样?这正是vh 和vw 单位所提供的。

vh 等于视窗高度的 1/100.例如,如果浏览器的高是 900px, 1vh 求得的值为 9px 。同理,如果显示窗口宽度为750px, 1vw 求得的值为 7.5px。

IE10+ 和现代浏览器都支持这两个单位。

vmin 和 vmax

这两个单位是针对vw和vh

vmin 是vw和vh中比较 小 的值

vmax 是vw和vh中比较 大 的值

.box {    height: 100vmin;    width: 100vmin;}
登录后复制


.box {    height: 100vmax;    width: 100vmax;}
登录后复制


IE10+ 和现代浏览器都已经支持 vmin

webkit浏览器之前不支持vmax,现在已经支持,所有现代浏览器已经支持,但是IE不支持 vmax.

总结

尺寸单位虽然说不是很难的内容,但能够做到精准理解和熟练使用也是极其难得的,也许随着CSS的发展会有更多有用的单位引进。

对单位斤斤计较是一个优秀CSS使用者应该具备的品质,赶紧去挑选合适的单位去开发你的NB产品吧。

下面的代码用来检测您的浏览器是否支持常用单位:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style type="text/css">
    body {
      padding: 20px;
    }
    div {
      background: #99ff99;
      padding: 5px;
      margin-bottom: 10px;
      white-space: nowrap;
      width: 0;
    }
    div:after {
      content: " (supported)";
    }
    div.fail {
      width: 100% !important;
      background: #ff6666 !important;
    }
    div.fail:after {
      content: " (NOT supported)";
    }
  </style> 
</head>  
<body>

<div id="percentage">50% - percentage</div>
<div id="pixel">400px - pixels (device pixels)</div>
<div id="em">20em - relative unit</div>
<div id="rem">20rem - root em</div>
<div id="vw">15vw - viewport width</div>
<div id="vh">60vh - viewport height</div>
<div id="vmin">60vmin - smaller of vw or vh</div>
<div id="vmax">60vmax - larger of vw or vh</div>
<div id="inch">4in - inches</div>
<div id="cm">20cm - centimeters</div>
<div id="mm">200mm - millimeters</div>
<div id="pt">120pt - points</div>
<div id="pc">40pc - picas</div>
<div id="ex">60ex - x-height</div>
<div id="ch">60ch - based on width of zero (0) character</div>

<script src="http://cdn.bootcss.com/jquery/1.11.3/jquery.js"></script>
<script>
// 给指定元素设置宽度
var percentage = $("#percentage").css("width", "50%");
// 如果宽度值为0,即不支持,为此元素添加fail类
if (percentage.width() == 0) percentage.addClass("fail");

var pixel = $("#pixel").css("width", "400px");
if (pixel.width() == 0) pixel.addClass("fail");

var em = $("#em").css("width", "20em");
if (em.width() == 0) em.addClass("fail");

var rem = $("#rem").css("width", "20rem");
if (rem.width() == 0) rem.addClass("fail");

var vw = $("#vw").css("width", "15vw");
if (vw.width() == 0) vw.addClass("fail");

var vh = $("#vh").css("width", "60vh");
if (vh.width() == 0) vh.addClass("fail");

var vmin = $("#vmin").css("width", "60vmin");
if (vmin.width() == 0) vmin.addClass("fail");

var vmax = $("#vmax").css("width", "60vmax");
if (vmax.width() == 0) vmax.addClass("fail");

var inch = $("#inch").css("width", "4in");
if (inch.width() == 0) inch.addClass("fail");

var cm = $("#cm").css("width", "20cm");
if (cm.width() == 0) cm.addClass("fail");

var mm = $("#mm").css("width", "200mm");
if (mm.width() == 0) mm.addClass("fail");

var pt = $("#pt").css("width", "120pt");
if (pt.width() == 0) pt.addClass("fail");

var pc = $("#pc").css("width", "40pc");
if (pc.width() == 0) pc.addClass("fail");

var ex = $("#ex").css("width", "60ex");
if (ex.width() == 0) ex.addClass("fail");

var ch = $("#ch").css("width", "60ch");
if (ch.width() == 0) ch.addClass("fail");
</script>
</body>  
</html>
登录后复制


以上就是CSS中的长度单位以及宽度自适的实例分析的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
css
来源:php中文网
收藏 点赞
上一篇:id和class在css中的样式设置的区别是什么? 下一篇:CSS3中介绍最新的几种长度单位
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
  • jQuery中关于bind()函数详解
    1970-01-01 08:00:00
  • php实现字符串匹配算法之sunday算法的示例
    2023-03-17 20:02:01
  • css中关于hideFocus的使用详解
    1970-01-01 08:00:00
  • JavaScript中filter函数的详细介绍
    1970-01-01 08:00:00
  • MySQL实现查看与创建以及删除索引的方法介绍
    1970-01-01 08:00:00
  • php使用指针进行函数操作的实例分析
    2023-03-17 19:54:01
  • JavaScript实现字符串转换成数字的三种方法介绍
    1970-01-01 08:00:00
  • MySQL中explain的使用以及性能分析
    1970-01-01 08:00:00
  • JavaScript中split函数由浅到深的使用介绍
    1970-01-01 08:00:00
  • 详解SQL中distinct的使用方法
    1970-01-01 08:00:00
最新问题
如何用CSS动画打造导航菜单展开效果 CSS动画平滑滑出菜单内容 使用max-height和opacity配合transition实现平滑展开,避免height:auto无法动画的问题;2.通过JavaScript切换类名控制菜单显隐,并设置足够大的max-height值确保内容完整显示;3.若需更高精度可动态计算内容高度或改用transform:scaleY替代max-height;4.优化细节包括使用ease-in-out缓动、管理焦点、支持键盘交互及尊重prefers-reduced-motion用户偏好,从而提升整体用户体验且不牺牲性能与可访问性。
2025-08-01 16:58:01
577
如何用CSS动画模拟视差滚动效果 CSS动画结合transform位移视觉层次 视差滚动效果的核心原理是不同图层以不同速度移动,从而产生深度感。1.通过设置HTML结构中的多个图层并赋予data-speed属性来定义移动速率;2.利用CSS的transform:translate3d()结合calc(var(--scroll-y)*speed)实现各图层基于滚动位置的位移;3.使用JavaScript将页面滚动偏移量window.pageYOffset赋值给CSS变量--scroll-y以驱动动画;4.通过使用translate3d开启GPU硬件加速、添加will-chan
2025-08-01 16:35:01
785
CSS伪类怎么应用 伪类应用教程 CSS伪类是选择器的补充,通过冒号表示,用于根据元素状态或位置应用样式。常见类型包括状态伪类(如:hover、:active)、结构伪类(如:first-child、:nth-child(n))、UI状态伪类(如:enabled、:checked)和目标伪类(如:target)。使用时需注意选择器优先级、顺序、HTML结构及浏览器兼容性。此外,伪类可结合动画实现高级交互效果,并可通过:focus-within、:empty等实现表单提示、空元素提示等。伪类与伪元素不同,后者以双冒号表示,能创建新
2025-07-31 18:53:01
670
如何用CSS动画实现星空闪烁背景 CSS动画模拟宇宙动效氛围 星空闪烁背景通过CSS动画实现,核心是使用animation属性和@keyframes规则控制星星的透明度或大小变化。1.创建多个.star元素并设置基础样式,通过animation应用twinkle动画实现透明度变化;2.使用JavaScript动态生成星星并随机设置位置和动画延迟,增强真实感;3.添加.shooting-star元素结合transform和opacity实现流星移动和消失效果;4.通过减少元素数量、使用transform和opacity、will-change属性、reque
2025-07-31 18:47:03
888
CSS如何实现卡片阴影浮层效果 CSS box-shadow设计细节 简单的box-shadow不高级是因为只用单一、纯黑阴影,缺乏真实光影层次;2.高级感需叠加多层阴影:用大而模糊的环境光阴影(如010px30pxrgba(0,0,0,0.1))模拟柔和托起感,再加小而集中的直接光阴影(如03px6pxrgba(0,0,0,0.08))增强支撑感;3.阴影色应选深灰或带色调的深色而非纯黑,与背景呼应更自然;4.响应式中推荐用px单位控制阴影,因视觉感知固定,但可配合媒体查询优化移动端性能;5.辅助技巧包括hover时transform:translateY(-5
2025-07-31 18:33:01
761
如何用CSS动画实现光标闪烁模拟 CSS动画配合文字输入UI设计 光标闪烁效果通过CSS动画实现,核心在于@keyframes定义透明度变化,配合animation属性应用动画。1.使用span元素或伪元素作为光标,设置width、height、background-color使其可见;2.通过@keyframes定义blink动画,控制opacity在0与1之间切换;3.利用animation属性指定动画名称、周期、时间函数(step-end)和无限循环(infinite);4.光标需与文本保持对齐,使用inline-block和vertical-align
2025-07-31 18:26:01
881
CSS动画如何制作下滑提示文字动画 CSS动画引导用户继续浏览页面 确保下滑提示动画不干扰用户体验的核心是控制时机、视觉克制、频率限制和可访问性支持;2.除下滑外,有效的CSS引导动画还包括滚动渐入、微弱脉冲、图标动画和卡片悬停缩放;3.性能优化应优先使用transform和opacity,避免布局重排,并合理使用will-change,兼容性方面需考虑prefers-reduced-motion、渐进增强及多浏览器测试。
2025-07-31 17:56:01
127
如何用CSS做模态弹窗样式 CSS弹窗遮罩+动画完整方案 CSS实现模态弹窗的核心在于利用:target伪类或dialog标签控制显示与隐藏,并通过动画和样式提升体验。1.使用:target伪类实现时,通过锚点切换显示弹窗,结合CSS动画与遮罩层优化交互;2.使用dialog标签可原生支持模态行为,配合少量JavaScript实现更灵活控制;3.动画优化应优先使用transform与opacity属性,搭配合适的缓动函数与动画时长,提升流畅度;4.纯CSS方案具备轻量、易维护、声明式等优点,但也存在交互性弱、状态管理难等局限。通过合理结构与样式设计,可
2025-07-31 17:48:01
932
如何用CSS实现文字背景裁剪 CSS文字蒙版与图片融合效果 实现文字背景裁剪与图片融合效果的核心是使用background-clip:text;配合color:transparent;或-webkit-text-fill-color:transparent;,使文字成为背景的透明窗口;2.兼容性方面需同时写-webkit-background-clip:text;和background-clip:text;,替代方案包括SVG图案填充和Canvas绘制,但CSS方式最简洁高效;3.结合CSS渐变色只需将background设为linear-gradien
2025-07-31 17:32:01
224
CSS如何实现文字超出省略号 CSS单行与多行截断技巧 CSS实现文字超出省略号的核心方法是结合overflow:hidden;、text-overflow:ellipsis;和white-space:nowrap;实现单行省略,多行则需使用-webkit-line-clamp属性,但其兼容性差,尤其在Firefox和IE中不支持;解决方案包括:1.单行文本省略需设置容器宽度并组合使用上述属性;2.多行文本省略需使用-webkit-line-clamp配合display:-webkit-box和-webkit-box-orient;3.兼容性问题可通
2025-07-31 17:28:01
410
相关专题
更多>
  • java语言开发平台
  • java构造器
  • java高并发解决方案
  • java数组求和
  • java后端开发
  • java随机数教程汇总
  • Java 正则表达式
  • Java 类有哪些
热门推荐
  • 如何用CSS动画打造导航菜单展开效果 CSS动画平滑滑出菜单内容
  • 如何用CSS动画模拟视差滚动效果 CSS动画结合transform位移视觉层次
  • CSS伪类怎么应用 伪类应用教程
  • 如何用CSS动画实现星空闪烁背景 CSS动画模拟宇宙动效氛围
  • CSS如何实现卡片阴影浮层效果 CSS box-shadow设计细节
开源免费商场系统广告
热门教程
更多>
相关推荐
热门推荐
最新课程
  • PHP Workerman 基础与实战:即时通讯聊天系统(ThinkPHP6)
    PHP Workerman 基础与实战:即时通讯聊天系统(ThinkPHP6)
    53907次学习
    收藏
  • ThinkPHP5快速开发企业站点[全程实录]
    ThinkPHP5快速开发企业站点[全程实录]
    401479次学习
    收藏
  • Thinkphp3.2.3个人博客开发
    Thinkphp3.2.3个人博客开发
    214350次学习
    收藏
  • 最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)
    最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)
    1465528次学习
    收藏
  • phpStudy极速入门视频教程
    phpStudy极速入门视频教程
    527876次学习
    收藏
  • 独孤九贱(4)_PHP视频教程
    独孤九贱(4)_PHP视频教程
    1239112次学习
    收藏
  • PHP实战天龙八部之仿爱奇艺电影网站
    PHP实战天龙八部之仿爱奇艺电影网站
    766322次学习
    收藏
  • 独孤九贱(1)_HTML5视频教程
    独孤九贱(1)_HTML5视频教程
    613002次学习
    收藏
  • JavaScript ES5基础线上课程教学
    JavaScript ES5基础线上课程教学
    905次学习
    收藏
  • PHP新手语法线上课程教学
    PHP新手语法线上课程教学
    2239次学习
    收藏
  • 支付宝沙箱支付(个人也能用的支付)
    支付宝沙箱支付(个人也能用的支付)
    3040次学习
    收藏
  • 麻省理工大佬Python课程
    麻省理工大佬Python课程
    33991次学习
    收藏
  • Swoole5 Hyperf3 php8新版本协程框架讲说
    Swoole5 Hyperf3 php8新版本协程框架讲说
    12292次学习
    收藏
最新下载
更多>
  • 驾照考试驾校HTML5网站模板
  • 驾照培训服务机构宣传网站模板
  • HTML5房地产公司宣传网站模板
网站特效
网站源码
网站素材
前端模板
  • [表单按钮] jQuery企业留言表单联系代码
  • [播放器特效] HTML5 MP3音乐盒播放特效
  • [菜单导航] HTML5炫酷粒子动画导航菜单特效
  • [表单按钮] jQuery可视化表单拖拽编辑代码
  • [播放器特效] VUE.JS仿酷狗音乐播放器代码
  • [html5特效] 经典html5推箱子小游戏
  • [图片特效] jQuery滚动添加或减少图片特效
  • [相册特效] CSS3个人相册封面悬停放大特效
  • [电商源码] 西风购物系统
  • [电商源码] 北方网景拍卖程序
  • [电商源码] 风雨飘然供求发布
  • [电商源码] Northstar盈富量化交易软件
  • [电商源码] 锐通大型电子购物系统
  • [电商源码] 饭店住房管理服务系统(C#.NET)
  • [电商源码] 新友缘商业购物系统
  • [电商源码] 产品注塑产品报价系统源程序
  • [网站素材] 环保植树节宣传横幅矢量模板
  • [网站素材] 插画风植树节宣传横幅矢量模板
  • [网站素材] 绿色植树节环保海报矢量模板
  • [网站素材] 2025黑白街头涂鸦矢量素材
  • [网站素材] 扁平化夜色都市建筑景观矢量
  • [网站素材] 抽象艺术风格销售广告矢量模板
  • [网站素材] 手绘春日清新折扣宣传矢量模板
  • [网站素材] 国际妇女节侧脸插图矢量素材
  • [前端模板] 驾照考试驾校HTML5网站模板
  • [前端模板] 驾照培训服务机构宣传网站模板
  • [前端模板] HTML5房地产公司宣传网站模板
  • [前端模板] 新鲜有机肉类宣传网站模板
  • [前端模板] 响应式天气预报宣传网站模板
  • [前端模板] 房屋建筑维修公司网站CSS模板
  • [前端模板] 响应式志愿者服务网站模板
  • [前端模板] 创意T恤打印店网站HTML5模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号

微信扫码
关注PHP中文网服务号

技术交流群

QQ扫码
加入技术交流群

app下载

扫描下载App

PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • PHP学习

  • 技术支持

  • 返回顶部