微信公众号

扫码关注官方订阅号

讲师中心
首页
文章
后端开发 web前端 数据库 开发工具 php框架 常见问题 科技 Java 系统教程 电脑教程 硬件教程 手机教程 软件教程 游戏教程 自媒体 新闻
专题
后端开发 web前端 数据库 开发工具 php框架 科技 Java 系统教程 电脑教程 硬件教程 手机教程 软件教程 游戏教程 新闻
AI工具
AI 聊天问答 Agent智能体 AI 文本写作 AI 绘画作图 AI 设计工具 AI 视频创作 AI 音频制作 AI 办公学习 AI 编程开发 Prompt指令
学习
大前端 后端开发 数据库 移动端 运维开发 计算机基础
编程手册
大前端 后端开发 数据库 移动端 运维开发 计算机基础
下载
js特效 网站源码 工具下载 类库下载 网站素材 学习资源 插件扩展 手机/移动开发 手机游戏
搜索
登录/注册
后端开发 web前端 数据库 开发工具 php框架 常见问题 科技 Java 系统教程 电脑教程 硬件教程 手机教程 软件教程 游戏教程
自媒体 新闻
首页 > web前端 > css教程 > 正文

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

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

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% 视口(浏览器可视区域)的宽度和高度中较大的尺寸

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

%

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

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

大多数浏览器中<html> 和<body> 标签中的默认字体尺寸是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中文网其它相关文章!

相关标签:
css
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

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

下载
来源: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样式与布局整合 答案:掌握HTML结构与CSS布局技巧可制作简洁专业简历。首先规划语义化结构,用header、section等标签分块内容;接着设置统一字体、颜色及max-width提升可读性;利用Flexbox实现联系方式、技能栏等横向布局;最后通过媒体查询和@mediaprint确保响应式显示与打印效果,信息清晰、排版整洁是关键。
2025-11-14 01:11:23
405
如何使用CSS调整盒模型区域顺序_content padding border margin控制 盒模型顺序为content→padding→border→margin,总宽度由内容、内边距、边框和外边距共同决定,使用box-sizing可改变尺寸计算方式,推荐border-box避免布局溢出,视觉顺序不可逆但可通过outline或伪元素模拟调整效果。
2025-11-13 21:39:06
635
css响应式表单输入框在小屏幕调整 使用100%宽度和box-sizing:border-box确保输入框适配容器;2.通过@media(max-width:768px)调整字体和间距提升可读性;3.添加viewport元标签防止缩放问题;4.设置最小高度44px并预留外边距优化触屏体验。
2025-11-13 21:37:49
119
如何使用CSS设置元素圆角_border-radius属性应用技巧 使用border-radius可实现元素圆角效果,基础语法为设置统一半径,如.box{border-radius:10px;},也可用%创建圆形头像;支持分别控制四个角,按顺时针顺序赋值或使用命名属性;通过斜杠/分隔可设置椭圆圆角,如20px/10px;实用技巧包括与overflow:hidden配合裁剪内容、用transition实现悬停动画,且值过大时浏览器会自动限制。
2025-11-13 21:35:03
750
如何在CSS中使用相邻兄弟选择器实现动态交互_状态切换样式 相邻兄弟选择器(+)结合伪类可实现无JavaScript的交互效果。利用隐藏复选框的:checked状态,点击按钮切换后续内容显示;通过单选按钮组控制多主题样式切换,需按HTML顺序链式使用+选择器;表单中用:focus高亮提示信息。核心是将触发元素与目标设为相邻兄弟,依赖状态变化驱动样式更新,适用于轻量级交互场景。
2025-11-13 21:32:02
392
如何使用CSS实现响应式卡片翻转效果_动画与媒体查询结合 实现响应式卡片翻转效果需结合CSS3D变换、过渡动画与媒体查询。1.HTML结构使用.card容器包裹.card-inner及正反面.card-front与.card-back;2.CSS通过perspective设置透视,transform-style:preserve-3d启用3D空间,rotateY实现翻转,backface-visibility:hidden隐藏背面,transition确保动画流畅;3.媒体查询在小屏禁用hover触发,适配点击或简化动效,并调整尺寸字体以提升可读性。
2025-11-13 21:17:02
270
如何使用CSS实现响应式页眉布局_Flex align-items justify-content结合 使用Flexbox可高效实现响应式页眉布局,通过align-items实现垂直居中,justify-content控制水平分布,配合媒体查询在小屏下切换为垂直排列,适配移动端。
2025-11-13 21:17:02
745
css布局网格列宽自动调整 使用fr单位、minmax()函数及auto-fit实现列宽自动调整。1.fr按比例分配剩余空间,如1fr和2fr将容器分为三份。2.repeat(auto-fit,minmax(150px,1fr))使列数随容器宽度变化,每列最小150px,最大1fr。3.max-content根据内容宽度设置列,auto填充剩余空间。4.建议结合gap和min-width优化布局,确保响应式效果。
2025-11-13 21:12:07
209
CSS字体属性font-weight font-style font-variant使用技巧 font-weight控制粗细,常用normal(400)和bold(700),支持100-900多级字重;font-style设置斜体,优先用italic,无斜体时可选oblique;font-variant用于小型大写,推荐使用font-variant-caps:small-caps以获得更好效果。
2025-11-13 21:03:57
929
在css中margin与padding如何区分 margin在边框外控制元素间距,可正负值且会合并;padding在边框内增加内容距离,影响元素尺寸且背景延伸,口诀“内填padding,外空margin”。
2025-11-13 20:35:03
735
相关专题
更多>
  • PHP 数据库操作与性能优化
  • Golang Web开发入门与实践
  • Java 并发与多线程编程
  • Python 异常处理与调试技巧
  • python除法运算符
  • python 平方
  • python 怎么安装库
  • python中不等于怎么写
热门推荐
开源免费商场系统广告
热门教程
更多>
相关推荐
热门推荐
最新课程
  • JavaScript ES5基础线上课程教学
    JavaScript ES5基础线上课程教学
    64937次学习
    收藏
  • 最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)
    最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)
    1484960次学习
    收藏
  • phpStudy极速入门视频教程
    phpStudy极速入门视频教程
    529754次学习
    收藏
  • 独孤九贱(4)_PHP视频教程
    独孤九贱(4)_PHP视频教程
    1249519次学习
    收藏
  • PHP实战天龙八部之仿爱奇艺电影网站
    PHP实战天龙八部之仿爱奇艺电影网站
    769630次学习
    收藏
  • 最新Python教程 从入门到精通
    最新Python教程 从入门到精通
    2726次学习
    收藏
  • JavaScript ES5基础线上课程教学
    JavaScript ES5基础线上课程教学
    64937次学习
    收藏
  • PHP新手语法线上课程教学
    PHP新手语法线上课程教学
    6428次学习
    收藏
  • 支付宝沙箱支付(个人也能用的支付)
    支付宝沙箱支付(个人也能用的支付)
    4508次学习
    收藏
  • 麻省理工大佬Python课程
    麻省理工大佬Python课程
    41271次学习
    收藏
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
  • [表单按钮] jQuery企业留言表单联系代码
  • [播放器特效] HTML5 MP3音乐盒播放特效
  • [菜单导航] HTML5炫酷粒子动画导航菜单特效
  • [表单按钮] jQuery可视化表单拖拽编辑代码
  • [播放器特效] VUE.JS仿酷狗音乐播放器代码
  • [html5特效] 经典html5推箱子小游戏
  • [图片特效] jQuery滚动添加或减少图片特效
  • [相册特效] CSS3个人相册封面悬停放大特效
  • [企业站源码] 新手企业管理系统源码
  • [电商源码] 22CNshop购物程序商城 2006 修正终结版
  • [电商源码] 大连中介网二手市场
  • [企业站源码] CPWEB企业网站管理系统2.2 Beta
  • [电商源码] WaStar 网上卡店系统
  • [企业站源码] 开源php企业网站程序PHP无错版
  • [电商源码] MC_Shop 微维B2C网上商城系统(服装网店版)
  • [企业站源码] 仿某精品酒业有限公司网站源码1.0
  • [网站素材] 简约现代扁平牛油果矢量插画
  • [网站素材] 时尚复古风格父女出游时光矢量
  • [网站素材] 卡通万圣节小红书插画海报矢量
  • [网站素材] 嫦娥奔月玉兔插画中秋合集矢量
  • [网站素材] 寿司侧面横切图矢量素材
  • [网站素材] 扁平中秋节海报设计矢量模板
  • [网站素材] 水彩森林浆果插画合集矢量素材
  • [网站素材] 夏日海岛度假旅游宣传矢量背景
  • [前端模板] 驾照考试驾校HTML5网站模板
  • [前端模板] 驾照培训服务机构宣传网站模板
  • [前端模板] HTML5房地产公司宣传网站模板
  • [前端模板] 新鲜有机肉类宣传网站模板
  • [前端模板] 响应式天气预报宣传网站模板
  • [前端模板] 房屋建筑维修公司网站CSS模板
  • [前端模板] 响应式志愿者服务网站模板
  • [前端模板] 创意T恤打印店网站HTML5模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号

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

技术交流群

QQ扫码
加入技术交流群

PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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

  • PHP学习

  • 技术支持

  • 返回顶部