CSS绝对定位的应用
前面的话
之前的博客文章已经详细介绍过绝对定位的基础知识,由于它的用途实在广泛,于是单独为其写这篇关于其应用的博客。关于绝对定位的基础知识移步至此
静态位置
当元素绝对定位后,若该元素的格式化属性不发生变化,则该元素处于静态位置。关于绝对定位元素格式化的相关内容移步至此。元素的静态位置是指元素在正常流中原本的位置,更确切的讲,顶端的静态位置是从包含块的上边界到假想框的上外边距边界之间的距离。假想框是假设元素position属性为static时元素的第一个框。
应用
以下是基于绝对定位静态位置的应用
跟随图标
图标使用不依赖定位父级的absolute和margin属性进行定位,这样,当文本的字符个数改变时,图标的位置可以自适应
div{
height: 20px;
width: 500px;
line-height: 20px;
margin-bottom: 30px;
}
i{
position: absolute;
width: 28px;
height: 11px;
margin: -6px 0 0 2px;
background: url('http://sandbox.runjs.cn/uploads/rs/26/ddzmgynp/hot.gif');
}
<div>长度可变文字<i></i></div>
视频提示
一般在视频图片上的边角上都会有"自制"、"最新"、"1080p"等诸如此类的提示。使用不依赖的绝对定位属性,可以让父级元素不设置relative,拓展性更强
i{
position: absolute;
width:40px;
text-align: center;
height: 18px;
line-height: 18px;
font-style: normal;
background-color: orange;
color: white;
padding: 2px;
}
.box{
height: 200px;
width: 200px;
border: 2px solid gray;
}
.in{
width: 100%;
height: 100%;
line-height: 100px;
background-color: pink;
display:inline-block;
}
.rt{
margin-left: -44px;
}
.lb{
margin-top: -22px;
}
.rb{
float: right;
margin-top: -22px;
margin-left: -44px;
}
<div class="box">
<i class="lt">自制</i>
<div class="in">测试内容</div><!--
--><i class="rt">独家</i>
<i class="lb">1080p</i>
<span style="width: 100%;display:inline-block"></span><!--
--><i class="rb">最新</i>
</div>
下拉菜单
一般地,下拉菜单作为一个组件需要使用在各种场景中,如果给组件添加relative属性,则降低了其利用率
body{
margin:;
}
ul{
margin:;
padding:;
list-style: none;
}
input{
padding:;
border:;
}
.box{
width: 200px;
height: 38px;
border: 2px solid gray;
}
.con{
overflow: hidden;
}
.input{
float: left;
width: 160px;
height: 38px;
}
.search{
width: 38px;
height: 38px;
float: right;
background: url('http://sandbox.runjs.cn/uploads/rs/26/ddzmgynp/search.png') 0 -38px;
}
.list{
display:none;
position: absolute;
width: 158px;
border: 1px solid #e6e8e9;
overflow: hidden;
}
.in{
line-height: 30px;
border-bottom: 1px solid lightblue;
cursor:pointer;
text-indent: 1em;
}
.in:hover{
background-color: #f9f9f9;
}
<div class="box">
<div class="con">
<input class="input" id="input">
<a href="javascript:;" class="search"></a>
</div>
<ul class="list" id="list">
<li class="in">选项一</li>
<li class="in">选项二</li>
<li class="in" style="margin-bottom: -1px">选项三</li>
</ul>
</div>
input.onfocus = function(){
list.style.display = 'block';
}
input.onblur = function(){
list.style.display = 'none';
}
边缘对齐
很多网站都使用了边缘对齐,但好多都是用页面宽度计算出来的,当宽度变化时需要重新计算。而无依赖的绝对定位利用静态位置,无需计算就可将其位置确定,且拓展性好
body{
margin:;
}
ul{
margin:;
padding:;
list-style: none;
}
.box{
width: 200px;
height: 100px;
border: 2px solid black;
background-color: lightgreen;
}
.out{
text-align: right;
}
.list{
position: absolute;
margin: 10px 0 0 2px;
display: inline-block;
}
.in{
text-align: center;
width: 20px;
line-height: 20px;
margin-top: 4px;
background-color: pink;
border-radius: 50%;
}
<div class="box">
<div class="out">
<!-- 对于safari浏览器需要添加空格 来触发右对齐,其他浏览器则不需要-->
<ul class="list">
<li class="in">一</li>
<li class="in">二</li>
<li class="in">三</li>
</ul>
</div>
</div>
星号
在很多注册或登录页面中,存在用*表示的必填项。*和*号对齐,文字和文字对齐。这种情况使用静态位置的绝对定位比较合适
body{
margin:;
}
ul{
margin:;
padding:;
list-style: none;
}
i{
font-style: normal;
color: red;
position:absolute;
margin-left: -10px;
}
.list{
width: 100px;
padding-left: 20px;
border: 2px solid black;
line-height:;
}
<ul class="list">
<li class="in">
<i>*</i><span>手机号</span>
</li>
<li class="in">
<span>用户名</span>
</li>
<li class="in">
<i>*</i><span>密码</span>
</li>
</ul>
偏移属性
当使用偏移属性时,绝对定位元素将相对于包含块进行定位。一般地,我们仅仅使用偏移属性中的两个,且这两个属性不对立。但实际上,对立的偏移属性如left和right可以同时使用,甚至4个偏移属性都可以同时使用,并且可以达到一些意想不到的效果。以下基于绝对定位偏移属性的应用
应用
全屏自适应
实现一个距离屏幕右侧200px的全屏自适应的容器层
.box{
position: absolute;
top:;
left:;
right: 200px;
bottom:;
background-color: pink;
}
<div class="box"></div>
左右半区翻图
一些选项卡中存在左右半区的翻图效果,点击左覆盖区切换到上一张图片,点击右覆盖区切换到下一张图片
ul{
margin:;
padding:;
list-style: none;
}
.box{
position: relative;
width: 300px;
height: 200px;
border: 2px solid lightgray;
text-align: center;
font: 40px/200px '宋体';
color: white;
overflow: hidden;
}
.list{
position: absolute;
width: 400%;
left:;
top:;
bottom:;
transition: left 1s;
}
.in{
float: left;
width: 25%;
background-color: lightgreen;
}
.l,.r{
position: absolute;
opacity:;
top:;
bottom:;
background-color: rgba(0,0,0,0.1);
cursor: pointer;
}
.l{
left:;
right: 50%;
}
.r{
left: 50%;
right:;
}
.l:hover,.r:hover{
opacity:;
transition: 1s;
}
<div class="box">
<ul class="list" id="list">
<li class="in">第1个</li>
<li class="in">第2个</li>
<li class="in">第3个</li>
<li class="in">第4个</li>
</ul>
<div class="l" id="l"><</div>
<div class="r" id="r">></div>
</div>
var index = 0;
var children = list.children;
l.onclick = function(){
if(index > 0){
index --;
move(index);
}
}
r.onclick = function(){
if(index < children.length -1){
index++;
move(index);
}
}
function move(index){
list.style.left = '-' + index*100 + '%';
}
九宫格
利用绝对定位的偏移属性可以制作宽高自适应的九宫格效果
ul{
margin:;
padding:;
list-style: none;
}
.list{
position: absolute;
top:;
left:;
right:;
bottom:;
}
.in{
position: relative;
float: left;
height: 33.3%;
width: 33.3%;
background-color: pink;
}
.in:before{
content: '';
position: absolute;
left: 10px;
right: 10px;
top: 10px;
bottom: 10px;
background-color: lightblue;
border-radius: 10px;
}
.in:after{
content: attr(data-value);
position: absolute;
left:;
right:;
top:;
bottom:;
height: 30px;
margin: auto;
text-align: center;
font:bold 24px/30px '宋体';
}
<ul class="list">
<li class="in" data-value='1'></li>
<li class="in" data-value='2'></li>
<li class="in" data-value='3'></li>
<li class="in" data-value='4'></li>
<li class="in" data-value='5'></li>
<li class="in" data-value='6'></li>
<li class="in" data-value='7'></li>
<li class="in" data-value='8'></li>
<li class="in" data-value='9'></li>
</ul>
等高布局
利用overflow清除浮动的BFC的包裹性,形成一个看似等高的布局,再利用绝对定位模拟出背景和间隔线
.box{
width: 80%;
margin: auto;
border: 1px solid gray;
overflow: hidden;
position: relative;
background-color: lightgreen;
}
.l{
box-sizing:border-box;
float: left;
width: 25%;
position: relative;
}
.r{
box-sizing:border-box;
float: right;
width: 75%;
padding: 10px;
height: 100%;
}
.con{
position: absolute;
background-color: lightblue;
border-right: 1px solid #ccc;
height: 9999px;
width: 100%;
}
.show{
padding: 10px;
position: relative;
}
<div class="box">
<div class="l">
<div class="con"></div>
<div class="show">测试文字<br>测试文字<br></div>
</div>
<div class="r">测试文字<br>测试文字<br>测试文字<br></div>
</div>
整体布局
整体布局的思路就是利用绝对定位元素的偏移属性来替代固定定位,首先让<page>元素满屏起到<body>元素的作用,然后各个模块各居其位。如果有其他的一些整体的页面遮罩,则与<page>元素平级
html,body{
height: 100%;
}
body{
margin:;
}
.page{
position: absolute;
top:;
bottom:;
left:;
right:;
}
header,footer{
position: absolute;
left:;
right:;
height: 50px;
}
header{
top:;
background-color: lightgreen;
}
footer{
bottom:;
background-color: lightcoral;
}
aside{
position: absolute;
left:;
top: 50px;
bottom: 50px;
width: 250px;
background-color: lightblue;
}
.content{
position: absolute;
top: 50px;
bottom: 50px;
left: 250px;
right:;
overflow: auto;
background-color: pink;
}
<div class="page">
<div class="content">
<div style="height: 1000px">内容区</div>
</div>
<aside>侧边栏</aside>
<header>头部</header>
<footer>底部</footer>
</div>
CSS绝对定位的应用的更多相关文章
- css绝对定位元素实现居中的几个方法
一:CSS绝对定位元素left设为50%实现水平居中 绝对定位的元素left设为50%时,是已左上角为原点的,所以只要再使用margin属性添加负值补偿回来即可.示例:[css]代码如下: #boar ...
- CSS绝对定位详解
设置为绝对定位的元素框从文档流完全删除,并相对于其包含块定位,包含块可能是文档中的另一个元素或者是初始包含块.直线电机生产厂家 元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样.元素 ...
- css绝对定位如何在不同分辨率下的电脑正常显示定位位置?
有时候我们在写页面中,会发现绝对定位的父级元素已经相对定位了,但是在不同分辨率的电脑下,绝对定位还是会错乱,似乎父级的相对定位并没有起了作用. 首先要明白如下几个原理: 1.笔记本电脑的分辨率一般为1 ...
- CSS绝对定位和相对定位 position: absolute/relative
absolute(绝对定位): 会把对象拖离HTML文档流,并通过top, left, right, bottom确定对象的具体位置,这个四个位置属性至少要设置一个,否则无法激活对象的absolute ...
- CSS 绝对定位和相对定位
CSS定位属性:一个定位属性,需配合四个定位坐标,实现定位 固定定位fixed 说明: 1.固定定位是相对于"浏览器窗口" 2.如果只设置了定位属性,未指定定位坐标时,元素将停留在 ...
- css绝对定位、相对定位和文档流的那些事
前言 接触html.和css时间也不短了,但每次用div+css布局的时候心里还是有点儿虚,有时候干脆就直接用table算了,很多时候用div会出现些不可预料的问题,虽然花费一定时间能够解决,但总不是 ...
- css绝对定位
绝对定位是我们在使用css时经常使用到的一种布局方式,下面说一下什么是绝对定位. 绝对定位使用position:absolute来定义,首先,要理解的是使用了绝对定位的元素它会脱离文档流,所谓脱离文档 ...
- 详解 CSS 绝对定位
基本定义和用法 在 CSS 中,position 属性指定一个元素(静态的,相对的,绝对或固定,以及粘性定位)的定位方法的类型. 当设置 position 属性的值为 absolute 时,生成绝对定 ...
- CSS绝对定位absolute详解
转:https://www.jianshu.com/p/a3da5e27d22b 之前介绍过CSS浮动float详解,本篇介绍的绝对定位absolute和浮动float有部分相似性.如果能理解 ...
- 深入理解CSS绝对定位
× 目录 [1]定义 [2]特性 [3]display[4]clip[5]静态位置[6]overflow 前面的话 前面已经介绍了定位的偏移和层叠,例子中大量的应用了绝对定位.因为相较于相对定位和固定 ...
随机推荐
- JavaScript中,本周、上周、本月、上月日期判断
/** * 获取本周.本季度.本月.上月的开端日期.停止日期 */ var now = new Date(); //当前日期 var nowDayOfWeek = now.getDay(); //今天 ...
- 解决Win7下VC++6.0与Office不兼容的问题
在Windows7下安装Visual C++ 6.0后,如果同时安装了Microsoft Office就会出现打开文件的时候出现异常,而导致VC6崩溃. 微软已经为我们解决了问题,开发出一个插件(Fi ...
- Android中自定义checkbox样式
1.首先在drawable文件夹中添加drawable文件checkbox_style.xml.
- linux之LVM
一.简介 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵 ...
- java war包加载提示jar not loaded
今天在开发的时候,项目需要加载Guvnor的war包.War包部署后,启动tomcat提示jar not load 后来查阅资料后发现是Jar包冲突导致的,冲突的Jar包在tomcat中已经存在,然后 ...
- Linux环境下解压超过4GB的zip文件
今天在Linux服务器中解压一个zip的压缩包,提示如下错误信息: [root@appsrv01 ZIP_BCSA_COURSES]# unzip BCSA_MEDIAS_BAK_20161118.z ...
- android权限permission大全
1.Android.permission.WRITE_USER_DICTIONARY允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS写 ...
- TFS 改服务器IP 域名 端口方法
长春电信伴随着开始的严打,所有未备案的80,8080等常用web端口都被封,使得原用8080作为服务端口的tfs代码服务器无法使用,现提供方法如下: 1.关掉VS 2.去掉要改的解决方案的sln文件的 ...
- Windows Phone App的dump 文件分析
前言 我们在发布了自己的App以后,Windows Phone的Error Report机制会帮助我们收集程序的崩溃信息并发送到微软的服务器上,这可以辅助开发者提高App的稳定性. 那么如何利用这些d ...
- [.net 面向对象编程基础] (15) 抽象类
[.net 面向对象编程基础] (15) 抽象类 前面我们已经使用到了虚方法(使用 Virtual修饰符)和抽象类及抽象方法(使用abstract修饰符)我们在多态一节中说到要实现类成员的重写必须定义 ...