background属性和position属性
最近看到一个页面,当文本内容长时,背景不动,内容跟着变化,使用到了CSS的background-attachment:fixed属性,这篇文章,就来说一下background和position属性
1.CSS中的背景(背景是不可继承的)
- background-color 默认值为transparent
- background-image 参数设置如:url(./img.jpg)
- background-repeat: repeat-y; 参数设置如:repeat-x repeat-y no-repeat
- background-position:center; 参数设置如:top bottom left right center,也可以使用百分号(指的是图像中心和元素中心对齐,如果设置为50% 50% 则在图像的最中间 如果设置为0 0 则在左上角对齐; 如果设置为100% 100%则为图像的右下角对齐。如果固定值则不同,设置值为 50px 100px,图像的左上角将在元素内边距区左上角向右 50 像素、向下 100 像素的位置上)
- background-attachment:fixed;默认值是 scroll,参数为scroll fixed。
- background : background-color background-position background-size background-repeat background-origin background-clip background-attachment background-image 简写属性,参数设置
2.CSS的position属性
static:无特殊定位,对象遵循正常文档流。top,right,bottom,left ,z-index等属性不会被应用。
relative:对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。
absolute:对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。( 如果使用absoulte或fixed定位的话,必须指定 left、right、 top、 bottom 属性中的至少一个,否则left/right/top/bottom属性会使用它们的默认值 auto ,这将导致对象遵从正常的HTML布局规则,在前一个对象之后立即被呈递,简单讲就是都变成relative,会占用文档空间,加上这两个属性是完全必要的.
除此之外,absoulte是根据祖先类的border进行的定位 ,<html>和<body>元素相差9px左右 relative和static方式在最外层时是以<body>标签为定位原点的,而absoulte方式在无父级是position非static定位时是以<html>作为原点定位。)
fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性定义。
参考一题小题:
链接:https://www.nowcoder.com/questionTerminal/33c230727abe4ed3972564fe6c9fef2a
来源:牛客网
以下代码,分别给节点
#box增加如下样式,问节点#box距离body的上边距是多少?
<body style=”margin:0;padding:0”>
<div id=”box” style=”top:10px;margin:20px 10px;”>
</div>
</body>
1.如果设置position: static ; 则上边距为 px
2.如果设置position: relative ; 则上边距为 px
3.如果设置position: absolute ; 则上边距为 px
4.如果设置position: sticky ; 则滚动起来上边距为 px
答案为:
position: static ; 则上边距为( 20 )px 静态定位 top值无效
position: relative ; 则上边距为( 30 )px 移动的时候会包括margin
position: absolute ; 则上边距为( 30 )px 移动的时候会包括margin
position: fixed ; 则上边距为( 30 )px 固定定位的margin也会生效 移动的时候也会包括margin
position: sticky ; 则上边距为( 20 )px,页面滚动起来为(10)px,margin会无效;页面没滚动的 时候是静态定位