zoukankan      html  css  js  c++  java
  • Display和Position定位

    1、display属性的值与作用

       常用的值有none、inline、block、inline-block

    (1)none

         1)表示该元素不会显示,并且该元素的空间也不存在,可理解为已删除;

         2)visibility:hidden只是将元素隐藏,但不会改变页面布局,但也不会触发该元素已经绑定的事件;

         3)opacity:0,将元素隐藏,不会改变页面布局,但会触发该元素绑定的事件。

    (2) inline

         1)内联元素,与其他元素在一行;

         2)不可设置宽高

         3)margin-top与margin-bottom无效,但margin-left与margin-right有效;

         4)padding-left与padding-right同样有效,但是padding-top与padding-bottom不会影响元素高度,会影响背景高度;

         5)常见的有<a>、<span>、<br>、<i>、<em>、<strong>。

    (3)block  独占一行

         块级元素,常见的有<div>、<p>、<h1>...<h6>、<ol>、<ul>、<dl>

    行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

    行内元素:a、b、span、img、input、strong、select、label、em、button、textarea
    块级元素:div、ul、li、dl、dt、dd、p、h1-h6、blockquote
    空元素:即系没有内容的HTML元素,例如:br、meta、hr、link、input、img

     块级元素与行内元素的区别:

    Block

    • 默认100%占满父元素区域
    • 每个元素占一行
    • 可以设置width和height属性
    • 可以包含其他块级元素或行内元素

    inline

    • 按需占用空间
    • 不断行,并排显示
    • width、height、垂直方向的margin和padding属性不起作用
    • 可以是其他行内元素的父级

     (4)inline-block

         1)行内块元素,即是内联元素,又可设置宽高以及行高及顶和底边距;

         2)常见的有<img>、<input>。

      如何让inline-block元素溢出不换行?

      当inline-block元素超出父元素宽度后会自动换行,解决方案:给父元素添加white-space:nowrap;强制不换行

    inline-block与float的区别:

    (1)中间是否有间隙

         float:left;

        display:inline-block;

    很显然,由于属性display:inline-block而在一行的块级元素中间会出现间隙,而浮动则不会。

     解决设置为行内标签之间的间隙问题: display:inline-block

    由于html的闭合标签是一个换行符,所以会产生一个空白符,默认为4px,所以在元素之间会产生间隙。

    解决方法:

    1. 写代码时两个行内元素标签不换行。(不留回车符)
    2. 把父元素的font-size设为0,再单独设置子元素的字体大小
    3. 设置负边距。margin-left:-4px;
    4. 改为浮动元素:float:left;

     (2)当兄弟元素高度不同时,对齐方式也不同

    float顶端对齐;inline-block底部对齐。

      float:left;   

        display:inline-block;

    display:inline-block属性没有脱离文档流,会与普通文档流中的元素一样采取底端对齐方式。

     可以添加vertical-align:middle;使两元素垂直居中对齐。

    2.position属性的值和作用

     position属性有四个可选值,分别为static、relative、absolute、fixed。

    (1)static 

          默认值,元素出现在正常的文档流中,不会受left、top、right、bottom的影响。

    (2)relative 

          相对定位,相对自身位置定位,可通过设置left、top、right、bottom的值来设置位置;

          并且它原本所占的空间不变,即不会影响其他元素布局

          经常被用来作绝对元素的容器块。

    (3)absolute 

          绝对定位,相对于最近的除static定位以外的元素定位,若没有,则相对于html定位;

          脱离了文档流,不占据文档空间;

          若设置absolute,但没有设置top、left等值,其位置不变(和没有设置position的位置一样,但是脱离了文档流);

          若设置absolute,会影响未定义宽度的块级元素,使其变为包裹元素内容的宽度。

    (4)fixed 

          固定定位 相对于浏览器窗口定位,脱离文档流,不会随页面滚动而变化。

      父元素怎么设置可以让子元素的fixed定位失效?

      给父级元素增加transform样式:transform:translate(0,0);

      说明:如果元素的父级设置了transform,就算没有造成移位,子元素的fixed定位也是会父级元素为标准,不再以浏览器为标准。

     (5)sticky粘性定位

    新的定位方式,专门用于页面滚动的时候定位,可以方便实现吸顶条效果。

    position:sticky是position:relative和position:fixed的结合体-----当元素在屏幕内时,表现为relative,当元素快要滚出屏幕时,表现为fixed。

    使用sticky定位须指定top、left、right、bottom四个阈值中的其中一个,才能使粘性定位生效,否则其行为与相对定位一样。

    .con{
         position: sticky;
         position: -webkit-sticky;
         top: 0px;
    }

    注意事项:

    (1)父元素不能有任何除overflow:visible以外的overflow设置,否则没有粘滞效果,因为改变了滚动容器。

    (2)父元素也不能设置固定的height高度值,否则也没有粘滞效果。

    (3)同一个父容器中的sticky元素,如果定位值相等,则会重叠;如果属于不同的父元素,则会鸠占鹊巢,挤开原来的元素,形成依次占位的效果。

    (6)inherit

    (7)initial 

    绝对定位:

    作用:可以将一个盒子移动到页面的任意位置。

    步骤:

    1)将需要移动的元素的postion属性设置为absolute.

    2)将需要移动的元素的位置的坐标记录下来,并通过关键字来设置。

    a)  关键字:  top:设置元素与浏览器顶部的距离

            left:设置元素与浏览器左边的距离

            right:设置元素与浏览器右边的距离

                              bottom:设置元素与浏览器底边的距离。

    注意点:

    a)如果盒子没有父元素,那么将来在定位的时候,我们trbl是相对于body元素的。

    b)如果定位的盒子有父元素,但是父元素没有定位,那么这个子元素定位的trbl还是相对于body.

    c)如果定位的盒子有父元素,并且父元素有定位,那么这个元素的定位是相对于它的父元素(子元素定位的trbl是相对于父元素。)。

    d)绝对定位的盒子不占页面上的位置(脱离标准流)

    e)如果没有设置top,left那么这个元素就算设置了有position属性位置也不会改变。

    相对定位:

    代码:position:relative.

    注意:

    a)如果设置了相对定位但没有设置值,我们的盒子的位置不会改变。

                                   效果: 

    b)相对定位是占据标准流的位置。(相对于正常位置的left和top)

                         效果:

    总结:想当年型。

    总结:如果将来在页面上使用定位,绝对要遵守这个规律:子绝父相的规律(子元素使用绝对定位,父元素使用相对定位。)

    3、relative与absolute的主要区别:

    首先,是上面已经提到过的在正常流中的位置存在与否。

    其次,relative定位的层总是相对于其最近的父元素,无论其父元素是何种定位方式。

  • 相关阅读:
    编程基本功训练:流程图画法及练习
    BDB (Berkeley DB)数据库简单介绍(转载)
    FusionCharts简单教程(一)---建立第一个FusionCharts图形
    curl命令具体解释
    Filter及FilterChain的使用具体解释
    在Activity中为什么要用managedQuery()
    String类
    ruby语言仅仅是昙花一现
    android 内部类的优化
    linux类库之log4j-LogBack-slf4j-commons-logging
  • 原文地址:https://www.cnblogs.com/xiaoan0705/p/8592708.html
Copyright © 2011-2022 走看看