浮动与定位

34 篇文章 0 订阅

四、浮动与定位

一、基础概念

1、文档流

浏览器对元素排版的过程中,元素会按着从左至右,从上至下的流式排列,并最终在窗口自上而下分成一行行,并在每行中按从左至右的顺序摆放元素.

2、脱离文档流

打乱元素浏览器的排版,或是从排版中拿走

3、如何脱离文档流

让一个元素不在正常的文档流中,唯一的办法是让元素浮动或定位技术

二、浮动

1、什么是浮动?

浮动就是元素可以向左向右移动,直到元素的外边缘碰到包含框或者另一个浮动框的边框为止,

2、float属性

  1. 说明

    float 属性定义元素在哪个方向浮动。以往这个属性总应用于图像,使文本 围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。浮动元素会生成 一个块级框,而不论它本身是何种元素。如果浮动某元素,则要指定一个明确的宽度;否则,它们会尽可能地窄。
    
  2. 语法格式

    float : none | left |right
    
  3. 可选值

    说明
    left图像或文本浮动在父元素的左边。
    right图像或文本浮动在父元素的右边。
    none图像或文本不浮动,默认值

3、示例代码

见课堂案例

4、浮动元素的特征有

  1. 块在一排显示;
  2. 内联元素浮动后变为块级元素,支持宽高;
  3. 无论是块元素还是内联元素,没有宽度时默认内容撑开宽度;
  4. 脱离文档流;

5、浮动产生负作用(造成塌陷)

  1. 背景不能显示由于浮动产生,如果对父级设置了(CSS background背景)CSS背景颜色或CSS背景图片,而父级不能被撑开,所以导致CSS背景不能显示。

  2. 边框不能撑开,如果父级设置了CSS边框属性(css border),由于子级里使用了float属性,产生浮动,父级不能被撑开,导致边框不能随内容而被撑开。

  3. margin padding设置值不能正确显示,由于浮动导致父级子级之间设置了css padding、css margin属性的值不能正确表达。特别是上下边的padding和margin不能正确显示。

6、如何清除浮动(解决塌陷)

  1. 给浮动元素的父元素添加高度

  2. 在浮动元素末尾添加一个空标签,专门用来清除浮动,使用clear:both属性

    .clear {clear:both} 
    
  3. 给父元素设置属性overflow:hidden

    .div{
        width:400px;
        border:1px solid #F00;
      	background:#FF0; 
        overflow:hidden
    } 
    
  4. 在父类添加伪类元素选择器清除浮动(推荐)

.clear {zoom:1;}    /*专门为了兼容 IE6/7 */
.clear:after {
	  clear:both;
      content:"";
      display:block;
      width: 0;
      height: 0;
      visibility:hidden;
    }
1.clear:both;指清除所有浮动;
2. content: '.'; 
3.display:block;对于FF/chrome/opera/IE8不能缺少,其中content()可以取值也可以为空。
4 visibility:hidden;的作用是允许浏览器渲染它,但是不显示出来

7 、浮动的16条规则

  1. 浮动元素会从文档正常流中删除,但它仍会影响布局。
  2. 浮动非替换元素必须为其指定width,否则元素的width会趋于0而导致浮动元素不能完整显示。
  3. 一旦元素具有了浮动属性,它便成为了一个块级元素。
  4. 浮动元素的左右外边界不能超出包含块的左右内边界。
  5. 浮动元素永不会重叠。
  6. 浮动元素不会超过容器的上padding。
  7. 后浮动的元素永不会超过先浮动元素的顶端。
  8. 浮动元素会尽可能高地放置,便这个高受限于规则6和规则7。
  9. 浮动元素的下边界没有要求,因此当容器不足以容下浮动元素时,浮动元素会向下延伸。但部分浏览器会采取增大容器高度以容下浮动元素,而对于符合CSS2.1规范的浏览器要想让容器容下浮动元素的一个可行方法是:让容器也浮动。
  10. 浮动元素向下延伸时,不会影响正常文本的显示,文本会相对于浮动元素进行偏移。但部分文本背景会被浮动元素遮住。
  11. 如果浮动元素设置了负的外边距、这将破坏规则4、6、7。
  12. 当浮动元素的width>容器的width时,这会使得浮动元素超出容器的左右边界(超左超右依浮动方向而定)。
  13. 浮动重叠规则:行内框(如strong)与浮动元素重叠时,其边框、背景、内容均位于浮动元素之上;块框与浮动元素重叠时,其边框、背景在浮动元素之下,而内容在浮动元素之上。
  14. 对某个元素应用clear:left,意味着这个元素的左边不能有浮动元素。
  15. clear不能用于非块级元素,比如
    ,在大多数浏览器看来它是一个非块级元素,因此如果对br应用clear来清除浮动不会有任何效果,除非改变br的display:block。
  16. 如果某元素应用clear清除浮动,则此元素设置的上外边距值会被忽略,但会有一个重新计算的上外边距值(甚至可能为0).如果希望此元素与浮动元素之间有一个明确的间隔,可以在浮动元素上设置下外边距

三、定位

1、什么是定位?

  **对元素进行定位**

说明

定位要配合top right bottom left 属性使用来确定定位的具体位置

2、position

  1. 语法格式

    position : static |absolute| relative|fixed 
    
  2. 可选值

    说明
    absolute元素框从文档流完全删除,并相对于其包含块定位。包含块可能是 文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占 的空间会关闭,就好像元素原来不存在一样
    fixed元素框的表现类似于将 position 设置为 absolute,其包含块是视窗本身。 (不支持IE6)
    relative生成相对定位的元素,相对于其正常位置(自身在文档流中位置)进行定位。
    static默认值。没有定位,元素出现在正常的文档流中(忽略 top, bottom, left, right 或者 z-index 声明,即上述声明无效)。
  3. 辅助属性

    属性
    top定义了一个定位元素的上外边距边界与其包含块上边界之间的偏移
    right定义了定位元素右外边距边界与其包含块右边界之间的偏移
    bottom定义了定位元素下外边距边界与其包含块下边界之间的偏移
    left定义了定位元素左外边距边界与其包含块左边界之间的偏移
    z-index设置元素的堆叠顺序。值大的元素总是会处于堆叠值低的元素的前面(值大的优先显示)

3、相对定位(relative)

  1. 说明

    定位元素的位置相对于它在普通流中的位置进行移动。使用相对定位的元素不管它是否进行移动,元素仍要占据它原来的位置。移动元素会导致它覆盖其他的框。

  2. 示例代码

<html>
<head>
<style type="text/css">
    .box1{
        background: red;
        width:100px;
        height:100px;
    }
    .box2{
        background:yellow;
        width:100px;
        height:100px;
        position: relative;
        left: 20px;
    }
    .box3{
        background:blue;
        width:100px;
        height:100px;
        position: relative;
        right: 20px;
    }
</style>
</head>

<body>
<div class="box1">box1</div>
<div class="box2">box2</div>
<div class="box3">box3</div>
</body>
</html>

4、绝对定位(absolution)

  1. 说明

    元素框从文档流完全删除,并相对于其包含块定位。元素定位后生成一个块级框,而不论原来它在正常流中是何种类型的框。

    绝对定位的元素的位置相对于最近的已定位祖先元素(这里的已定位元素指除 static默认定位的其余三种),如果元素没有已定位的祖先元素,那么它的位置相对于 最初的包含块(即body)

  2. 示例代码

    <html>
    <head>
    <style type="text/css">
        .box1{
            background: red;
            width:100px;
            height:100px;
        }
        .box2{
            background:yellow;
            width:100px;
            height:100px;
            position: relative;
            left: 20px;
        }
        .box3{
            background:blue;
            width:100px;
            height:100px;
            position: relative;
            right: 20px;
        }
    </style>
    </head>
    
    <body>
    <div class="box1">box1</div>
    <div class="box2">box2</div>
    <div class="box3">box3</div>
    </body>
    </html>
    

5、固定定位

  1. 说明

是一种特殊的绝对定位,对其设置的偏移量永远是相对于视窗本身。我们常见到的导航条固定在页面顶部,回到页面顶部按钮基本都是采用此定位方式(还比如网站上各种固定位置广告)

  1. 示例代码

    <!DOCTYPE html> 
    <head>
        <title>CSS固定定位</title>
        <style type="text/css">
            #box1
            {
                width:120px;
                height:1500px;
                border:1px solid gray;
                background-color:#B7F1FF;
            }
            #box2
            {
                position:fixed;/*设置元素为固定定位*/
                top:30px;/*距离浏览器顶部30px*/
                left:160px;/*距离浏览器左部160px*/
                width:60px;
                height:60px;
                border:1px solid silver;
                background-color:#FA16C9;
            }
        </style>
    </head>
    <body>
        <div id="box1">普通的div元素</div>
        <div id="box2">固定定位的div元素</div>
    </body>
    </html>
    

6、使用规则

**父元素使用相对定位,子元素使用绝对定位**

四、综合案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        * {
            font-size: 14px;
            text-decoration: none;
            margin: 0;
            padding: 0;
        }
        .content {
            width: 500px;
        }
        ul {
            margin-left: 10px;
            border-top: 1px solid orange;
        }

        ul, dl {
            list-style: none;
        }
        H3 {
            width: 100px;
            margin: 10px 10px 0;
            padding: 5px 10px;
            font-weight: 700;
            color: white;
            font-size: 16px;
            background: orange;
        }
        ul > li {
            padding: 10px 10px 10px 0;
            border-bottom: 1px solid lightgray;
        }

        a {
            color: darkgray;
            position: relative;
            cursor: pointer;
            display: block;
        }
        a:hover {
            color: red;
        }
        ul > li > a > div {
            width: 60%;
            position: absolute;
            display: none;
            left: 200px;
            margin-top: 5px;
        }

        a:hover div {
            width: 70%;
            background: ghostwhite;
            display: block;
            padding: 5px;
            border: hotpink;
        }
        div > img {
            width: 30%;
            display: block;
            height: 130px;
            float: left;
        }
        div > dl {
            margin-left: 5px;
            float: left;
        }
        dl>dt,dl>dd {
            padding: 5px;
            color:black;
        }
        dl>dt>span,dl>dd>span{
            color: #666666;
            font-weight: 700;
        }
    </style>
</head>
<body>
<div class="content">
    <h3>我喜欢的音乐</h3>
    <ul>
        <li><a href="#">东京不太热
            <div>
                <img src="http://p1.music.126.net/H_WHmV3ZZfd9ZGZNekk-bQ==/5655887813280446.jpg?param=130y130">
                <dl>
                    <dt><span>歌名:东京不太热</span></dt>
                    <dd><span>歌手:</span>刘安琪</dd>
                    <dd><span>介绍:</span>东京真的不热吗?</dd>
                </dl>
            </div>
        </a></li>
        <li><a>高白气球
            <div>
                <img src="http://p4.music.126.net/Qc5fsvjghmXXrLavDdQWgA==/19018252625793869.jpg?param=130y130">
                <dl>
                    <dt><span>歌名:高白气球</span></dt>
                    <dd><span>歌手:</span>周杰伦</dd>
                    <dd><span>介绍:</span></dd>
                </dl>
            </div>
        </a></li>
        <li><a>演员
            <div>
                <img src="http://p4.music.126.net/ULlwJ2drOfYv-f6-_7jGGQ==/3250156379592966.jpg?param=130y130">
                <dl>
                    <dt><span>歌名:</span>演员</dt>
                    <dd><span>歌手:</span>薛之谦</dd>
                    <dd><span>介绍:</span>中国内地男歌手,籍贯上海市</dd>
                </dl>
            </div>
        </a></li>
    </ul>
</div>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值