css的关键---定位和布局,以及一个动画示例

1、块元素、内联元素、内联块元素

元素就是标签,布局中常用的有三种标签,块元素、内联元素、内联块元素,了解这三种元素的特性,才能熟练的进行页面布局。

块元素 
块元素,也可以称为行元素,布局中常用的标签如:div、p、ul、li、h1~h6、dl、dt、dd等等都是块元素,它在布局中的行为:

  • 支持全部的样式
  • 如果没有设置宽度,默认的宽度为父级宽度100%
  • 盒子占据一行、即使设置了宽度

内联元素
内联元素,也可以称为行内元素,布局中常用的标签如:a、span、em、b、strong、i等等都是内联元素,它们在布局中的行为:

  • 支持部分样式(不支持宽、高、margin上下、padding上下)
  • 宽高由内容决定
  • 盒子并在一行
  • 代码换行,盒子之间会产生间距
  • 子元素是内联元素,父元素可以用text-align属性设置子元素水平对齐方式,用line-height属性值设置垂直对齐方式

解决内联元素间隙的方法 
1、去掉内联元素之间的换行
2、将内联元素的父级设置font-size为0,内联元素自身再设置font-size

内联块元素
内联块元素,也叫行内块元素,是新增的元素类型,现有元素没有归于此类别的,img和input元素的行为类似这种元素,但是也归类于内联元素,我们可以用display属性将块元素或者内联元素转化成这种元素。它们在布局中表现的行为:

  • 支持全部样式
  • 如果没有设置宽高,宽高由内容决定
  • 盒子并在一行
  • 代码换行,盒子会产生间距
  • 子元素是内联块元素,父元素可以用text-align属性设置子元素水平对齐方式,用line-height属性值设置子元素垂直对齐方式

这三种元素,可以通过display属性来相互转化,不过实际开发中,块元素用得比较多,所以我们经常把内联元素转化为块元素,少量转化为内联块,而要使用内联元素时,直接使用内联元素,而不用块元素转化了。

display属性
display属性是用来设置元素的类型及隐藏的,常用的属性有:
1、none 元素隐藏且不占位置
2、block 元素以块元素显示
3、inline 元素以内联元素显示
4、inline-block 元素以内联块元素显示

 

2、定位

关于定位 
我们可以使用css的position属性来设置元素的定位类型,postion的设置项如下:

  • relative 生成相对定位元素,元素所占据的文档流的位置不变,元素本身相对文档流的位置进行偏移
  • absolute 生成绝对定位元素,元素脱离文档流,不占据文档流的位置,可以理解为漂浮在文档流的上方,相对于上一个设置了相对或者绝对或者固定定位的父级元素来进行定位,如果找不到,则相对于body元素进行定位。
  • fixed 生成固定定位元素,元素脱离文档流,不占据文档流的位置,可以理解为漂浮在文档流的上方,相对于浏览器窗口进行定位。
  • static 默认值,没有定位,元素出现在正常的文档流中,相当于取消定位属性或者不设置定位属性
  • inherit 从父元素继承 position 属性的值

定位元素特性 
绝对定位和固定定位的块元素和行内元素会自动转化为行内块元素

定位元素层级 
定位元素是浮动的正常的文档流之上的,可以用z-index属性来设置元素的层级

典型定位布局 
1、固定在顶部的菜单(positon:fixed;top:0px;)
2、水平垂直居中的弹框(position:fixed; width: 800px;margin: -325px 0 0 -400px; top:50%;left:50%;)
3、固定的侧边的工具栏(里面的按钮会使用absolute来相对工具栏定位)
4、固定在底部的按钮(positon:fixed;bottom:0px;)

------------------------------------------------------------------------------------------------------------------------------------------------------------

动画的要求是初始宽度左边是100%,右边是0%;切换后宽度左边是10%,右边是90%;并且设置一个覆盖层当页面缩小时候,覆盖层盖住缩小的页面;
.image_page .zoom_in{transform:scale(1);width: 90%;height:600px;animation: animat_zoom_in 0.2s cubic-bezier(0.4, 0, 0.2, 1);}
.image_page .zoom_out{transform:scale(1);width: 10%;height:600px;}
.image_page .zoom_in2{transform:scale(1);width: 100%;height:600px;animation: animat_zoom_out 0.2s cubic-bezier(0.4, 0, 0.2, 1);}
.image_page .zoom_out2{transform:scale(1);width: 0%;height:600px;}

.coverage{position: absolute;display: none;z-index: 106;width: 100%;height: 100%;background-color: #dbe1f9;top:0px;text-align: center;line-height: 600px;font-size:18px; }
function page_switch(flag, image_name, pool_name){
    if(flag){
        //true 显示snaps页面
        $(".image_left").removeClass("zoom_in2").addClass("zoom_out");
        $(".image_right").removeClass("zoom_out2").addClass("zoom_in");
        $(".image_left").find(".coverage").css("display","block");
        $(".image_right").find(".coverage").css("display","none");
     }else {
        //false 显示image页面
        $(".image_right").removeClass("zoom_in").addClass("zoom_out2");
        $(".image_left").removeClass("zoom_out").addClass("zoom_in2");
        $(".image_right").find(".coverage").css("display","block ");
        $(".image_left").find(".coverage").css("display","none");
    }

}

一些场景技巧:

1、jQuery 的 index() 方法返回指定元素相对于其他指定元素的 index 位置,因此可用于获取当前li元素顺序。用来是页面局部刷新后能保持子元素仍然active或者聚焦。

2、按钮发送的消息,很长时间才收到,点击时候修改颜色,数据收到后再遍历按钮清除颜色。、

$.each($(".image_page .snap_btn"), function () {
    finish_request($(this));
});

3、span和input作为内联块元素文字对不齐,原因是文字基线不一样,解决办法

(1)、给其中一个元素设置vertical-align:top

(2)、使用float浮动

(3)、使用posion:absolute定位

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章