CSS用relative和absolute实现的图片定位效果
作者:stg609 来源:stg609 blog 发布时间:2008-10-06 21:37:00
今天因为做一个效果的时候需要CSS的定位来实现,于是我就根据自己原来对CSS的了解,用absolute和relative摆弄了好一阵子,总是无法实现满意的效果。不会,咋办呢?搜吧。这年代,啥问题还是得靠搜索引擎。网上一了解才发现自己原来对定位的了解有误,调整了代码,实现了想要的效果,便于以后学习,把经验留在这,嘿嘿。
我想实现的效果很简单,就是在一张图片上加另一个图片,说的有点乱,还是直接看下图好了。
(效果图)
(原图)
相信看了图,大家肯定觉得很眼熟,如果你对实现这种效果很熟悉,就不需要再看下去了哦。如果你感兴趣的话, 就继续往下看吧(不过你最好已经且有了简单的CSS知识)~~
说白了,实现这个效果还是用了position属性的relative和absolut,但是这两个值经常会让人产生“自以为是”的感觉。大家一定要注意,这里的relative和absolute都是有一个参照物的。
在这之前,先来介绍一个概念“常规文档流”,我们一般布局的元素“<h1>This is a header</h1><p>This is some text</p><p>And even more text</p>”都是按照其布局的次序一次排列。这就属于常规文档流。
“position:absolute”是以body元素的左上角为起始点或以距拥有postion:absolute的DIV最近的那个拥有postion属性的父级DIV的左上角为起始点。通过left,top,right,bottom属性来操作。并且该定位方法超出了常规文档流,因此不会对其它元素产生影响(不会导致其它元素位置的改变、大小的改变等)
“postion:relative”是以body元素作为参照物或以其父级DIV作为参照物(不是超始点)。通过left,top,right,bottom属性来操作。
为了说明问题,我们举几个例子来看一下:
效果图:
通过上面这个图,我想大家应该看出什么了吧?
普通的div属于常规文档流,因此它们两个是按照次序布局的。而使用了absolute之后,因为超出了常规文档流,所以并没有对普通div1产生任何影响,而且是以浏览器左上角的起始点进行精确定位。
而用了relative之后,会发现它与absolute不一样,它是以父级div作为参照对象,但不是以父级对象的起始点做为参考点。通过观察上图大家应该可以看出普通div2的长度被拉长了,拉长的距离则恰好是“普通的div2”这几个字的高度。这说明了什么?
这说明relative首先是被当作常规文档流进行处理,也就是说先按照次序进行布局,应该出现在“普通的div2”的下方。如图:
因此,由于使用了relative的那个div高度为100px,因此普通的div2被拉伸,这之后,使用了relative的那个div才按照absolute来处理。
如果大家搞明白了,就可以开始运用这个postion属性的两个值来实现相应的效果了。
要实现开头的那个效果思路如下:
我们可以选有一个div来做图片的容器(并且加上position属性,我设置为relative因为这样可以运用于常规文档流中,且可以相对于窗口的大小而相对静止),然后在该容器中添加一个div(设置position属性为absolute,因为我们希望该层覆盖在原图片上方,如果选用relative则会先根据常规文档流处理,虽然可以通过left、top、bottom、right属性达到覆盖效果,可是同样会影响原div大小),然后调节top,bottom则可实现效果。
相应代码如下:
<div style="position: relative;width: 86px; height: 110px; border: 1px solid; float: left; margin-right: 20px">
<img width="86" height="110" src='1.jpg' alt="" />
<div style="position:absolute;background:url(images/new.gif) no-repeat;width:37px;height:37px;top:0px;"></div>
<div style="position:absolute; top:88px; width: 86px; height: 22px;text-align: center; background: white; filter: alpha(opacity=50);">
片名
</div>
</div>


猜你喜欢
- 动态页面的模拟点击:以斗鱼直播为例:http://www.douyu.com/directory/all爬取每页的房间名、直播类型、主播名称
- 前言如果我们的应用在启动的时候需要对数据库进行初始化(比如建表等), 可以通过读取.sql文件内容直接执行. 但是, 这样会带出一个问题:在
- 从概念上讲,大多数关系数据库系统都是类似的:它们都由一组数据库组成,且每个数据库都包含一组表。但是,所有的系统都有自己的管理数据的方法, M
- laravel入门简介作为PHP最常用的框架之一,Laravel的框架目录布置得尤其清晰,适用于各种类型的项目开发。今天来记录下larave
- 本实验中分别针对空库、脱机、联机三种方式,配置一主两从的mysql标准异步复制。只做整服务器级别的复制,不考虑对个别库表或使用过滤复制的情况
- Pyplotmatplotlib.pyplot是一个命令型函数集合,它可以让我们像使用MATLAB一样使用matplotlib。pyplot
- 介绍init 方法通常用在初始化一个类实例时候,但其实它不是实例化一个类的时候第一个被调用 的方法。当使用 Student(id, name
- 本文实例为大家分享了Python绑定方法与非绑定方法,供大家参考,具体内容如下定义:绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数
- 本文实例讲述了PHP实现从上往下打印二叉树的方法。分享给大家供大家参考,具体如下:问题从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 前言Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。
- 在流量统计服务中都有Traffic source这个功能。Traffic source是针对访次级别的概念,换句话说,当访次建立的时候,la
- 初级画心学Python,感觉你们的都好复杂,那我来个简单的,我是直接把心形看作是一个正方形+两个半圆:于是这就很简单了,十行代码解决:imp
- 请问如何从ASP连接到Oracle Server?可用下面的代码进行连接: <%@ Lan
- 介绍我们在实际的开发工作中需要将django框架与swagger进行集成,用于生成API文档。网上也有一些关于django集成swagger
- 因公司服务器上部署应用较多,在有大并发访问、业务逻辑有问题的情况下反复互相调用或者有异常流量访问的时候,需要对业务应用进行故障定位,所以利用
- 本文实例为大家分享了python生成验证码图片代码,分享给大家供大家参考,具体内容如下基本上大家使用每一种网络服务都会遇到验证码,一般是网站
- 前言任何应用都离不开数据,所以在学习python的时候,当然也要学习一个如何用python操作数据库了。MySQLdb就是python对my
- 通过锁机制,可以实现多线程同时对某个表进行操作。如下图所示,在某个时刻,用户甲、用户乙、用户丙可能会同时或者先后(前面一个作业还没有完成)对
- 先来看段mysql查询文章回复语句:#查询文章回复-- ------------------------------ Procedure s
- debian6系统:首先先安装mysql吧:打开终端(root)用户登入apt-get purge mysql-server-5.5安装完成