因此,作为网页设计师和前端开发人员,我们别无选择,必须熟悉我们手上的工具,做到知己知彼,这样才能百战不殆。为了帮助大家更好的工作小编今天为大家分享一些css的长度单位,希望能够对小伙伴们有所帮助。
1、rem
我们首先介绍下和我们熟悉的很相似的货。em
被定义为相对于当前对象内文本的字体大小。炒个栗子,如果你给body小哥设置了font-size字体大小,那么body小哥的任何子元素的1em就是等于body设置的font-size。
Test
body{
font-size:14px
}
div{
font-size:1.2em
//calculatedat14px
*1.2,or16.8px
}
你看,这里div这娃的字体大小是1.2em。解释来说,就是他从body爹爹那里继承的字体大小(这里是14px)的1.2倍,结果就是16.8px。
但是,如果你用em一层一层级联得定义嵌套元素的字体大小又会花生什么事情呢?在下面这一小段代码里我们应用了和上面一样一样的CSS,每一个div都从它上一级父元素继承了字体大小,并且逐渐得增加。
Test
Test
Test
虽然在某些地方这正是我们想要的,但是通常情况下我们还是希望就依赖单一的相对度量单位就好。这时候嘛,我们就可以使用rem
了。‘r’是“root”的缩写,意思就是1rem等于根元素的字体大小大部分情况下,根元素就是元素了。
html{
font-size:14px
}div{
font-size:1.2rem
}
这样在上面的那三个嵌套的div娃们的字体大小都是1.2*14px=16.8px了。
2、适用于网格布局
Rems
不仅仅只是在设置字体大小上很方便。再炒个栗子,你可以用基于html根元素字体大小的rem作为整个网格布局或者UI库的大小单位,然后在其他特定的地方用em单位。这样将会给你带来更多的字体大小和伸缩的可控性,
.container{
width:70rem
//70*14px=980px}
概念上来说,这个方法的思想就是让你的界面根据你的内容进行缩放。但是,这样做并不是对所有的情况都有意义。
3、vhandvw
响应式Web设计离不开百分比。但是,CSS百分比并不是所有的问题的最佳解决方案。CSS的宽度是相对于包含它的最近的父元素的宽度的。但是如果你就想用视口(viewpoint)的宽度或者高度,而不是父元素的,那该肿么办?这就是
vh和vw单位为我们提供的。
1vh等于1/100的视口高度。栗子:浏览器高度900px,1vh=900px/100=9px。同理,如果视口宽度未750,1vw
=750px/100=7.5px。
可以想象到的,他们有很多很多的用途。比如,我们用很简单的方法只用一行CSS代码就实现同屏幕等高的框。
.slide{
height:100vh
}
假设你要来一个和屏幕同宽的标题,你只要设置这个标题的font-size的单位为vm,那标题的字体大小就会自动根据浏览器的宽度进行缩放,以达到字体和viewport大小同步的效果,有木有?!
4、vminandvmax
vh和vm依据于视口的高度和宽度,相对的,vmin和
vmax则关于视口高度和宽度两者的最小或者最大值。比如,浏览器的宽度设置为1100px,高度设置为700px,1vmin=1px,1vmax=
11px。
如果宽度设置为800px,高度设置为1080px,1vmin就等于8px,1vmax则未10.8px。
那么问题来了,我们应该在什么场景下使用这两个单位呢?
假设有一个元素,你需要让它始终在屏幕上可见。
只要对其高度和宽度使用vmin单位,并赋予其低于100的值就可以做到了。再来个栗子,可以这样定义一个至少有两个边触摸到屏幕的方形:
.box{
height:100vmin
width:100vmin
如果你要让这个方形框框始终铺满整个视口的可见区域(四边始终触摸到屏幕的四边)
.box{
height:100vmax
width:100vmax
}
结合使用这些单位可以为我们提供一个新颖有意思的方式来灵活地利用我们视口的大小。
5、exandch
ex和ch单位,类似于em和rem,依赖于当前的字体和字体大小。但是,不同的是,这两货是基于字体的度量单位,依赖于设定的字体。
ch单位通常被定义为数字0的宽度。你可以在Eric
Meyers的博客里找到关于它的一些有意思的讨论,例如将一个等宽字体的字母”N”的宽度设置为40ch,那么在另一种类型的字体里它却可以包含40个字母。
这个单位的传统用途主要是盲文的排版,但是除此之外,肯定还有可以应用他的地方。
ex定义为当前字体的小写x字母的高度或者1/2的1em。很多时候,它是字体的中间标志。
x-heighttheheightofthelowercasex
这些单位有很多用途,大部分用于版式的微调。比方说,sup元素(上角文字标),可以通过position:relativebottom:1ex实现
。
类似的方法,你可以实现一个下角文字标。浏览器默认的方式是利用
上标和下标特定垂直对齐规则,但是如果你想更细粒度更精确得控制,你可以像下面这样做:
sup{
position:relative
bottom:1ex
}
sub{
position:relative
bottom:-1ex
}
结论
持续关注不断发展壮大的CSS技术无疑是很重要的,这样你才能掌握你所持有的工具的全部技能。说不定将来你遇到的某个特殊的问题就需要使用这些复杂的单位来解决。
以上就是小编今天为大家分享的额关于Web前端新手应该知道的CSS长度单位的文章,希望本篇文章能够对正在从事web前端工作和喜欢web前端技术的小伙伴们有所帮助。想要了解更多web前端相关知识记得关注北大青鸟web培训官网。最后祝愿小伙伴们工作顺利!
DIV+CSS规则整理一、善用css缩写规则
/*注意上、右、下、左的书写顺序*/
1. 关于边距(4边):
1px 2px 3px 4px (上、右、下、左)
1px 2px 3px (省略的左等于右)
1px 2px (省略的上等于下)
1px (四边都相同)
2. 简化所有:
*/ body{margin:0}------------表示网页内所有元素的margin为0
#menu{ margin:0}------------表示menu盒子下的所有元素的margin为0
3. 缩写(border)特定样式:
Border:1px solid #ffffff
Border-width:0 1px 2px 3px
4. 关于文字的缩写规则:
Font-style:italic斜体形式
Font-variant:small-caps/normal变体样式:小型大写字母/正常
Font-weight:bold
Font-size:12px
Line-height:1.2em(120%)/1.5em(150%)
Font-family:arrial,sans-serif,verdana
缩写成:
Font:italic small-caps bold 12px/1.5emarrial,sans-serif
注意:Font-size和Line-height用斜杠组合在一起不能分开写。
5. 关于背景图片的:
Background:#FFF url(log.gif) no-repeatfixed top left
6. 关于列表:
List-style-type:square/none
List-style-position:inside
List-style-image:url(filename.gif)
缩写成:
List-style:none inside url(filename.gif)
二、运用4种方法来引入CSS样式
1.link
<link rel=”stylesheet” type=”text/css”href=”a.css”>
rel 关系
type 数据类型,有多种
href 路径
部分浏览器支持候选样式,关键字:alternate:
<link rel=”stylesheet” type=”text/css”href=”a.css”>
<link rel=”alternate stylesheet”type=”text/css” href=”b.css”>
<link rel=”alternate stylesheet”type=”text/css” href=”c.css”>
2.内部样式块
<style>
<!–
h1{color:red}
–>
</style>
3.@import
@import url{a.css}
注意:此指令必须放在<style>容器中,并且在所有样式之前
建议放在一个html注释中,<!– –>浏览器会不显示注释内的内容,而import等css代码能正常工作
4.内联样式
<p style=”color:red”>
选择器是css的一个基本概念,基本规则如下:
1.规则结构:
h1 {color:red}
选择器 {属性:值}
这类是元素选择器,基本可以包括所有html的元素
属性值可以包括多个元素,如:border:1px solid red
常用语法
1)分组:
选择器和声明都可以分组:
h1,h2,h3{color:redbackground:#fff} ,选择器用“,”分割开,属性用””分割
2)类选择器,即通过class=”stylename”应用的声明
定义:
.stylename{color:red}
注意:
在html中可以使用多类选择:如class=”cn1 cn2 cn3″
3)ID选择器,即与id属性对应的样式
定义:
#a{color:red} ->这个定义对用id=”a”的元素
2.这部分都是我们常见的css语法,下面谈一下我们不常见的选择器语法
1)父子结构,跟文档结构图对应
如p span{border:1px solidred}对应的是<p>下面的<li>标签,这个很用用途,可以准确定位.
一些特殊应用(IE7支持):
(1) p >span{},匹配所有p下所有的span
(2) p + span{} ,匹配紧接着p元素后出现的第一个span标签,2者要有相同的父标签
2)属性选择器:(注意:属性选择器ie7才开始支持,以下版本并不支持,其他的浏览器基本可以)
语法:img[alt]{border:1pxsolid}
表示对应有alt属性的img标签,当然可以支持多个属性对应,如img[alt][title]{}表示这个2个属性都有的img标签,
也可以与具体值对应:如:img[alt=”摄影”]{}
属性选择器中的高级应用,特殊匹配:
(1)img[class~=”b”], ~= : 与属性中的一个值对应的,即与<img class=”a b c”>对应
(2)[class^=”a”],以a开头的
(3)[class$=”a”],以a结束的
(4)[class*=”a”],包含a的
(5)[class|=”a”],等于a或以a开头的
3)伪类和伪元素
日常使用中主要是<a>标签的几个伪类:link:hover:active:visited
以及:first-child:first:before:left:right:lang:focus:fist-line等等
注意:动态伪类可以应用到任何元素,如,input:focus{background:red}当input标签获得焦点时背景变红
以上语法组合使用,就能实现定位准确、简单间接的样式了。
三、选择器分类整合
优先级别遵循:行内样式 >ID >Class >标记
基本选择器标记选择器(eg:<p></p>)
类别选择器(eg:class)
ID选择器
复合选择器
“交集”复合选择器(eg:p.menu{color:red})必须是
标记+类别/ID组合
“并集”复合选择器(eg:h1,h2,h3{color:red})
“后代”复合选择器(eg: #menu.menulist{ ... })
“子”复合选择器(eg: #menu.menulist .selectit {... })
四、使用子选择器减少id和class的定义
示例结构:
<div id="menu">
<div class="menulist">
<divclass="selectit">content</div>
</div>
</div>
示例CSS:
#menu { ... }
#menu .menulist { ... }
#menu .menulist .selectit { ... }
五、使用组选择器为不同元素应用相同的样式
如h1,h2,h3,div{font-size:16pxfont-weight:bold}
则h1,h2,h3,div元素的样式都为字体16像素,字体粗体
六、伪类和选择符的配合使用
将伪类和类组合起来用,就可以在同一个页面中做几组不同的链接效果了,例如,我们定义一组链接为红色,
访问后为蓝色;另一组为绿色,访问后为黄色:
a.red:link {color: #FF0000}
a.red:visited {color: #0000FF}
a.blue:link {color: #00FF00}
a.blue:visited {color: #FF00FF}
现在应用在不同的链接上:
<a class="red"href="...">这是第一组链接</a>
<a class="blue" href="...">这是第二组链接</a>
七、CSS的最近优先原则
/*如果对一个元素定义了多次样式,则以最近的一级优先,最近一级的样式将覆盖其他行内样式 >ID >Class>标记*/
以下是引用片段:
CSS:
p{color:red}
.blue{color:blue}
.yellow{color:yellow}
HTML:
<p>此处显示为红色</p>
<p class="blue">此处显示为蓝色</p>
<p class="blue"style="color:green">此处显示为绿色</p>
<p class="blue yellow">此处显示为黄色</p>
注意:
(1)注意样式的几个优先顺序(优先级由上至下递减,下面的样式覆盖上面的样式):
--元素style设定
--head区<style></style>中的设定
--外部引用css文件
(2)优先级不是按访问顺序来设定的,而是又css中的声明顺序来设的。
如上例中<pclass="yellow blue">此处显示为黄色</p>也显示为黄色,因为在css定义中.yellow在.blue
的后面。
八、书写正确的链接样式
当用css定义链接的各种状态时,要注意书写的顺序即::link :visited :hover :active利用首字母:L V H A,
你可以通过记忆LoVe,Hate,两个单词来记住其顺序。
:link --------链接的颜色
:visited -----鼠标点击后的颜色
:hover -------鼠标放上去未点的颜色(悬停)
:active-------鼠标点击瞬间的颜色
九、:hover的灵活运用
IE6不支持除a标签以外的:hover属性,我们了解:hover属性是鼠标悬停效果。在IE7和FF中,对几乎任意元素
都可以设置:hover属性效果。这对我们做不同的访问效果很好。
如:
p {
width : 360px
height : 80px
padding : 20px
margin : 50px auto 0 auto
border : 1px solid #ccc
line-height : 25px
background : #fff
}
p:hover {
border : 1px solid #000
background : #ddd
}
----------------此效果针对IE7和FF
p a {
color : #00f
text-decoration : none
font-size : 13px
}
p a:hover {
color : #036
text-decoration : underline
}
-----------------此效果针对IE6
十、定义A标签要注意的小问题
当我们定义a{color:red}时,它代表了A的四种状态的样式,如果此时要定义一个鼠标放上的状态只要定义
a:hover就可以了,其它三种状态就是A中所定义的样式。
只定义了一个a:link时,一定要记得把其它三种状态定义出来!
十一、禁止内容换行与强制内容换行
在表格或层中我们可能希望内容不换行或强制换行,我们可以通过一些css属性来达到这些要求。
禁止换行:white-space:nowrap
强制换行:word-break:break-allwhite-space: normal
十二、区别relative和absolute
Absolute---CSS中的写法是:position:absolute他的意思是绝对定位,他是参照浏览器的左上角,配合
TOP、RIGHT、BOTTOM、LEFT(下面简称TRBL)进行定位,在没有设定TRBL,默认依据父级的做标原始点为
原始点。如果设定TRBL并且父级没有设定position属性,那么当前的absolute则以浏览器左上角为原始点进行
定位,位置将由TRBL决定。
Relative---CSS中的写法是:position:relative他的意思是绝对相对定位,他是参照父级的原始点为原始点,
无父级则以BODY的原始点为原始点,配合TRBL进行定位,当父级内有padding等CSS属性时,当前级的原始
点则参照父级内容区的原始点进行定位。
十三、区别块级元素block和内联元素inline
块级---可定义宽高,另起独占一行(如:divul)
内联---不可定义宽高,如文本元素(如a span)
十四、区别display和visibility
display:none和visibility:hidden都可以隐藏一个元素,但visibility:hidden只是隐藏了元素的内容,但其使用的
位置空间仍然被保留。而display:none则相当把元素从页面中去除,其占用位置也将被删除。
十五、背景background的一些语法
background-image:url(背景图案.jpg,gif,bmp)
background-color:#FFFFFF(背景颜色)
background-color : transparent<--设定背景为透明色–>
background-repeat 改变背景图片的重复并排的设定
说明
repeat 背景图片并排
repeat-x 背景图片以X方向 并排
repeat-y 背景图片以Y方向 并排
no-repeat 背景图片不 以并排的方式处理
background-attachment是否固定图片位置
说明
scroll 拉动卷轴时,背景图片会跟着移动(缺省值)
fixed 拉动卷轴时,背景图片不会跟着移动
以长度定位background-position:x y
使用百分比定位background-position: x% y%
说明
x% 往右移
y% 往下移
backgroud-position: 0% 0%左边上方
backgroud-position: 0% 50%左边中间
backgroud-position: 50% 0%中间上方
backgroud-position: 50% 50%正中间
backgroud-position:100% 0%右边上方
backgroud-position: 0% 100%左边下方
backgroud-position: 100% 50%右边中间
backgroud-position: 50% 100%中间下方
backgroud-position: 100% 100%右边下方
以关键字定位
关键字说明
top 上 ( y = 0 )
center 中 ( x = 50, y = 50 )
bottom 下 ( y = 100 )
left 左 ( x= 0 )
Exp:
background-position:center
图片在指定背景中央X=50% Y=50%位置
background-position: 200px 30px
十六、注释的写法
在Html中:
<!-- footer -->
content
<!-- end footer -->
在CSS中:
/* ---------- header ----------------- */
Style
十七、CSS的命名规范
1. id的命名
(1)页面结构
容器: Container
页头:header
内容:content/container
页面主体:main
页尾:footer
导航:nav
侧栏:sidebar
栏目:column
页面外围控制整体布局宽度:wrapper
左右中:left right center
(2)导航
导航:nav
主导航:mainnav
子导航:subnav
顶导航:topnav
边导航:sidebar
左导航:leftsidebar
右导航:rightsidebar
菜单:menu
子菜单:submenu
标题: title
摘要: summary
(3)功能
标志:logo
广告:banner
登陆:login
登录条:loginbar
注册:regsiter
搜索:search
功能区:shop
标题:title
加入:joinus
状态:status
2. class的命名
(1)颜色:使用颜色的名称或者16进制代码,如
.red { color: red}
.f60 { color: #f60}
.ff8600 { color: #ff8600}
(2)字体大小,直接使用"font+字体大小"作为名称,如
.font12px { font-size: 12px}
.font9pt {font-size: 9pt}
(3)对齐样式,使用对齐目标的英文名称,如
.left { float:left}
.bottom { float:bottom}
(4)标题栏样式,使用"类别+功能"的方式命名,如
.barnews { }
.barproduct { }
注意事项::
u 一律小写
u 尽量用英文
u 不加中杠和下划线
u 2个组合的单词不用中杠和下划线可以将第二个单词的首字母大写(eg:mainContent);
u 尽量不缩写,除非一看就明白的单词.
3. 主要的站点css文件
主要的 master.css
模块 module.css
基本共用 base.css(root.css)
布局,版面 layout.css
主题 themes.css
专栏 columns.css
文字 font.css
表单 forms.css
补丁 mend.css
打印 print.css
十八、Padding影响宽度问题
如果一组要嵌套的标签之间需要些间距的话,那就留给位于里面的标签的margin属性吧,而不要去定义位
于外面的标签的padding
十九、完美的单象素外框线表格
table{border-collapse:collapse}
td{border:1px solid #000}
二十、如果文字过长,则将过长的部分变成省略号显示
<style=”width:120pxheight:50pxoverflow:hiddentext-overflow:ellipsiswhite-space:nowrap”>
二十一、并不是所有样式都要简写
当样式表前定义了如p{padding:1px2px 3px 4px}时,在后续工程中又增加了一个样式上补白5px,下补白
6px。我们并不一定要写成p.style1{padding:5px 6px 3px 4px}。可以写成p.style1{paddingtop:5pxpadding-right:6px},你可能会感觉这样写还不如原来那样好,但你想没想过,你的那种写法重复定义
了样式,另外你可以不必去找原来的下补白与左补白的值是多少!如果以后前一个样式P变了话,你定义的
p.style1的样式也要变。(此种方法对后期修改样式很重要)
二十二、几个常用到的CSS细节处理上的样式
1)中文字两端对齐:text-align:justifytext-justify:inter-ideograph
2)固定宽度汉字截断:overflow:hiddentext-overflow:ellipsiswhite-space:nowrap(不让其换行,不过只能
处理文字在一行上的截断,不能处理多行。)(IE5以上)FF不能,它只隐藏。
***万能强制换行:white-space:normalword-break:break-all
禁止换行:white-space:nowrap
强制换行:word-wrap:break-wordword-break: normal
.AutoNewline
{
/*word-break: break-all方法一必须*/
/*word-wrap:break-wordoverflow:hidden方法二*/
/*word-wrap:break-wordword-break: normal方法三 */
word-wrap:break-wordword-break:break-all}
.NoNewline
{
/*word-break: keep-all方法一必须*/
white-space:nowrap
}
3)固定宽度汉字(词)折行:table-layout:fixedword-break:break-all(IE5以上)FF不能。
4)<acronym title=”输入要提示的文字”style=”cursor:help”>文字</acronym>用鼠标放在前面的文
字上看效果。这个效果在国外的很多网站都可以看到,而国内的少又少。
5)图片设为半透明:.halfalpha { background-color:#000000filter:Alpha(Opacity=50)}在IE6及IE5测试通
过,FF未通过,这是因为这个样式是IE私有的东西;
6)FLASH透明:选中swf,打开原代码窗口,在</object>前输入<paramname=”wmode”
value=”transparent”>以上是针对IE的代码。
针对FIREFOX 给<embed>标签也增加类似参数wmode=”transparent”
7)在做网页时常用到把鼠标放在图片上会出现图片变亮的效果,可以用图片替换的技巧,也可以用如下的滤
镜:
.pictures img {
filter: alpha(opacity=45)}
.pictures a:hover img {
filter: alpha(opacity=90)}
8)层在浏览器中居中对齐问题
body { text-align: center }
#content { text-align: leftwidth: 700pxmargin: 0 auto }