微信公众号

扫码关注官方订阅号

讲师中心
首页
文章
后端开发 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
原创
1528人浏览过

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

大家都在看:

如何在CSS中实现元素动画移动_position与keyframes结合 css flexbox对齐方式align-content如何使用 如何在CSS中实现背景渐变动画_linear-gradient与keyframes CSS浮动和inline-block的区别_布局模式选择分析 CSS盒模型如何处理溢出内容_CSS overflow属性应用场景
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

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

下载
来源:php中文网
收藏 点赞
上一篇:id和class在css中的样式设置的区别是什么? 下一篇:CSS3中介绍最新的几种长度单位
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
  • HTML5 Placeholder属性的详情介绍
    1970-01-01 08:00:00
  • html中关于<a>标签的全部属性的使用总结
    1970-01-01 08:00:00
  • php如何快速实现数组去重的实例
    2023-03-14 11:30:01
  • php中关于IMAP如何收取邮件的方法介绍
    2023-03-14 18:58:01
  • PHPMailer如何利用QQ邮箱完成邮件发送功能的实例分析
    2023-03-15 12:26:02
  • 从零开始打造自己的PHP框架的视频资料
    2023-03-15 16:54:01
  • php基础知识总结(新手入门必备)
    2023-03-16 15:20:01
  • ReactJS中表单的单选多选与反选的实现方法
    1970-01-01 08:00:00
  • JavaScript中typeof的使用方法介绍
    1970-01-01 08:00:00
  • JavaScript中confirm()方法的使用介绍
    1970-01-01 08:00:00
最新问题
CSS过渡与伪类结合使用_hover与focus过渡实例 通过CSStransition与:hover、:focus结合,可实现按钮变色、输入框高亮等平滑视觉反馈;2.:hover触发鼠标悬停效果,transition使背景色在0.3秒内渐变;3.:focus用于输入框获焦时的边框与阴影过渡,提升可访问性;4.同一元素可同时定义:hover和:focus的统一过渡效果,使用transition控制多个属性并保持动画流畅,避免过度设计影响体验。
2025-11-22 13:37:36
290
如何在CSS中实现Flexbox响应式导航栏_Flex wrap与media query操作方法 使用Flexbox和媒体查询可创建响应式导航栏。首先用display:flex和flex-wrap:wrap实现横向排列与自动换行,结合justify-content居中对齐;在max-width:768px的媒体查询中,通过flex-direction:column使导航项垂直堆叠,提升移动端体验;可选添加JavaScript控制的active类实现折叠展开功能;同时需设置viewport元标签、合理断点与点击区域,确保跨设备可用性。
2025-11-22 13:07:02
388
如何在CSS中实现侧边栏与主内容布局_Flex与Grid结合 使用Flex与Grid结合实现响应式布局,.container设为flex容器使侧边栏与主内容并排且等高;.main-content用grid管理内部模块,自动换行适应屏幕;侧边栏固定宽,主区自适应;@media控制小屏下堆叠显示,提升移动端体验。
2025-11-22 12:51:06
172
CSS动画在表单输入框聚焦效果中的应用_border color animation 通过CSS的:focus伪类和transition实现输入框边框颜色动画,聚焦时边框平滑变色,结合box-shadow与@keyframes可创建脉冲等动态效果,提升表单交互体验。
2025-11-22 12:44:02
515
如何在CSS中实现链接悬停颜色变化_使用:a:hover改变链接颜色 正确写法是a:hover,用于鼠标悬停时改变链接颜色,需配合color属性使用,并推荐按LVHA顺序定义link、visited、hover、active状态以避免冲突,还可添加transition实现平滑过渡效果,提升交互体验。
2025-11-22 12:39:31
600
Grid网格元素重叠如何控制_Z-index与Grid层叠排列方法 要控制Grid元素层叠需先设置position再用z-index,DOM顺序决定默认堆叠,父容器创建层叠上下文时内部z-index受限,可通过负margin实现视觉重叠。
2025-11-22 12:27:06
159
浮动元素在不同浏览器中表现一致吗_CSS兼容性问题分析 浮动在不同浏览器中存在兼容性问题,尤其体现在IE6/7的双倍margin、父容器高度塌陷、清除浮动不一致等方面。现代浏览器虽已统一基本行为,但在边缘场景仍可能出现布局偏差。建议使用CSSReset、触发BFC、采用clearfix等方法提升兼容性,并优先选用Flexbox或Grid布局以规避风险。
2025-11-22 12:23:03
876
响应式侧边栏滚动效果如何实现_Sticky position与flex grid结合方案 使用position:sticky结合Flexbox或CSSGrid可高效实现响应式侧边栏滚动吸附,通过设置top值使侧边栏在滚动时固定,利用flex或grid布局实现主内容与侧边栏自适应排列,并在小屏通过媒体查询关闭sticky以优化体验。
2025-11-22 12:06:05
758
CSS伪元素::placeholder文本样式控制_输入提示美化实践 使用::placeholder伪元素可美化输入框提示文字,支持颜色、字体、透明度等样式控制,需添加各浏览器私有前缀以确保兼容性,建议避免过淡颜色并配合label提升可访问性。
2025-11-22 11:46:33
888
Flexbox布局中元素换行高度如何控制_Align-content与line-height实践 align-content控制多行flex容器中各行的垂直对齐方式,需配合flex-wrap:wrap及固定容器高度使用;line-height影响含文本子项的最小高度,两者协同可稳定多行布局的垂直分布与整体节奏。
2025-11-22 11:33:06
851
相关专题
更多>
  • Python 自然语言处理基础
  • Golang 跨平台应用开发
  • Java 网络编程与Socket实战
  • C++ 嵌入式系统开发入门与实践
  • linux 运行go程序
  • golang 设置时间
  • golang gopath
  • golang判断字符是否
热门推荐
  • 使用@import引入css会影响性能吗_css加载优化建议
  • 在css中animation与background-image渐变动画
  • 如何使用CSS浮动实现等宽列布局_多列均分技巧解析
  • 如何通过css设置图标字体颜色
  • 如何使用CSS实现图标放大缩小平滑过渡_scale动画应用
开源免费商场系统广告
热门教程
更多>
相关推荐
热门推荐
最新课程
  • Sass 教程
    Sass 教程
    6011次学习
    收藏
  • Bootstrap 5教程
    Bootstrap 5教程
    20593次学习
    收藏
  • CSS教程
    CSS教程
    118275次学习
    收藏
  • 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个人相册封面悬停放大特效
  • [企业站源码] H5自适应企业网站源码1.0.1
  • [电商源码] ShopWind多用户商城系统
  • [电商源码] 能飞网络办公OA系统
  • [企业站源码] 易优制冷机械设备网站源码1.6.9
  • [电商源码] 一个B2C电子商务全站源码
  • [电商源码] ASP.NE电子商铺系统
  • [电商源码] S-CMS电子商城系统(含小程序)
  • [企业站源码] SDCMS轻站内容管理系统1.6.3
  • [网站素材] INS风格感恩节模板设计下载
  • [网站素材] 浪漫地中海小镇旅行矢量图片
  • [网站素材] 手绘返校季开学季矢量素材
  • [网站素材] 万圣节南瓜堆合集矢量素材
  • [网站素材] 柔和多彩手绘农场动物矢量合集
  • [网站素材] 万圣节鬼屋开放日矢量海报模板
  • [网站素材] 天文学与太空背景矢量素材
  • [网站素材] 国庆节76周年数字设计矢量模板
  • [前端模板] 驾照考试驾校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学习

  • 技术支持

  • 返回顶部