【前端学习日记】定位&元素显示or隐藏&精灵图&字体图标&用户界面样式&常见布局技巧

一、定位

1. 定位组成

定位:将盒子定在某一个位置,所以定位也是摆放盒子,按照定位的方式移动盒子

定位=定位模式+边偏移

定位模式用于指定一个元素在文档中的定位方式,边偏移则决定了 该元素的最终位置

1.1 定位模式

通过position属性来设置

语义
staitic静态定位
relative相对定位
absolute绝对定位
fixed固定定位

1.2 边偏移

属性描述
top顶端偏移量
bottom底部偏移量
left左侧偏移量
right右侧偏移量

2. 定位方式

1.3 静态定位static

选择器{position:static}

  1. 静态定位按照标准流特性摆放位置,没有边偏移
  2. 静态定位在布局中很少用到

1.4 相对定位 relative

  1. 它是相对于自己的位置来移动的
  2. 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它(不脱标,继续保留原来位置)

1.5 绝对定位 absolute

  1. 如果没有父元素或父元素没有定位,则以浏览器为准
  2. 如果父元素有定位,则以最近一级的有定位父元素为参考点
  3. 绝对定位不占有位置

1.6 固定定位 fixed

在浏览器页面滚动时元素的位置不会改变

  1. 以浏览器的可视窗口为参照点移动元素
  • 跟父元素没有关系
  • 不随滚动条滚动
  1. 固定定位不在占有原先位置
  2. 固定定位也是脱标的,其实固定定位也可以看做时一种特殊的绝对定位

特殊固定定位:固定在版心右侧位置
小算法:

  1. 让固定定位的盒子left:50%,走到浏览器可视区的一半位置
  2. 让固定定位盒子margin-left版心宽度的一半距离

1.7 粘性定位 stickly

  1. 以浏览器的可视窗口为参照点移动元素
  2. 占有原来位置
  3. 必须添加top等才有效

3. 子绝父相

子级使用绝对定位,父级则需要相对定位

  • 子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
  • 父盒子需要加定位限制子盒子在父盒子内显示

相对定位经常用来作为绝对定位的父级
因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位

4. 定位的叠放顺序z-index

选择器{z-index:1}

  • 数值可以是正整数,负数或0,数值越大盒子越靠上
  • 如果属性值相同,则按照书写顺序,后来居上
  • 数字不能加单位
  • 只有有定位的盒子才有z-index属性

5. 定位的拓展

5.1 绝对定位的盒子居中

加了绝对定位的盒子不能通过marigin:0 auto水平居中,但是可以通过一下计算方法实现水平和垂直居中

  1. left:50%:让盒子的左侧移动到父级元素的水平中心位置
  2. margin-left:-100px,让盒子向左移动自身宽度的一半

5.2 定位的特殊特性

绝对定位和固定定位也和浮动相似

  1. 行内元素添加绝对定位或者固定定位,可以直接设置宽度和高度
  2. 块级元素添加绝对或者固定,如果不给宽度和高度,默认大小是内容的大小

5.3 绝对定位会完全压住盒子

  • 浮动元素不同,只会压住下面标准流的盒子,但是不会压住下面标准流盒子里面的文字 但是绝对定位会压住下面标准流所有的内容
    浮动的产生目的是做文字环绕效果

二、元素的显示和隐藏

本质:让一个元素在页面中隐藏或者显示出来

1. display属性

  • none:隐藏对象
  • block:转换为块级元素and 显示元素
    隐藏后不占有位置

2. visibility可见性

  • visible:元素可视
  • hidden:元素隐藏
    隐藏后保留位置

3.overflow溢出

对溢出的元素进行显示或隐藏

  • visible:不剪切内容也不添加滚动条
  • hidden:不显示超过对象尺寸的内容,超过部分隐藏
  • scoll:显示元素并总是显示滚动条

在这里插入图片描述

  • auto:显示元素但仅在需要的时候显示滚动条
    在这里插入图片描述

三、精灵图

为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度
核心原理:将网页中的一些小背景图整合到一张大图中,这样服务器就需要一次请求

  1. 主要针对于背景图的使用
  2. 大图片也称为sprites精灵图或者雪碧图
  3. 移动背景图片位置,可以使用background-position
  4. 移动距离是目标图片的xy坐标
  5. 一般情况都是往上往左移动,所以数值是负值

缺点:

  1. 图片文件较大
  2. 本身放大和缩小会失真
  3. 更换图片复杂

四、 字体图标

展示的是图标,本质属于字体

  • 轻量级:一个图标字体比一系列图小,一旦字体加载,图标马上渲染出来,减少了服务器的请求
  • 灵活性:本质是文字,可以任意更改颜色,透明旋转等
  • 兼容性:几乎支持所有的浏览器

不能完全替代精灵图,仅用于一些简单的小图标

小图标下载网址:
icomoon字库:http://icomoon.io
阿里iconfont字库:http://www.iconfont.cn/

五、CSS制作三角

原理:在不设置高度宽度仅设置边框情况如下
在这里插入图片描述将其他三个角设置为透明即可

<style>
        .box {
            height: 0px;
            width: 0px;
            border-top: 100px solid transparent;
            border-bottom: 100px solid transparent;
            border-right: 100px solid transparent;
            border-left: 100px solid rgb(255, 252, 159);
            margin: 100px auto;
        }
    </style>

在这里插入图片描述

六、用户界面样式

  • 更改用户的鼠标样式
  • 表单轮廓
  • 防止表单域拖拽

1. 鼠标样式

li{cursor:pointer}

属性值描述
default小白
pointer小手
move移动
text文本
not-allowed禁止

2.轮廓线 outline

给表单添加outline 0或者outline:none样式之后,就可以去掉默认的蓝色边框

3. 防止拖拽文本域 resize

textarea{resize:none;}

七、行内块和文字垂直居中对齐

vertical-align

描述
baseline默认。元素放置在父元素的基线上
top把元素的顶端与行中最高元素的顶端对齐
middle把此元素防止在父元素的中部
bottom把元素的顶端与汉中最低的元素的顶端对齐

解决图片默认空白缝隙问题

  1. 给图片添加vertical-align:middle等
  2. 把图片转换为块级元素

八、溢出文字省略号显示

1.单行文本溢出显示省略号

<!-- 1.先强制一行内显示文本 -->
white-space:nowrap;
<!-- 超出部分隐藏 -->
overflow:hidden;
<!-- 文字省略号替代超出部分 -->
text-overflow:ellipsis;

2.多行文本溢出显示省略号

overflow:hidden;
text-overflow:ellipsis;
<!-- 弹性伸缩盒子模型显示 -->
display:-wedkit-box;
<!-- 限制在一个块元素显示的文本的行数 -->
-wedkit-line-clamp:2;
<!-- 设置或检索伸缩盒对象的子元素的排列方式 -->
-wedkit-box-orient:vertical;

九、常见布局技巧

  1. margin负值的运用
  2. 文字围绕浮动元素
  3. 行内块的巧妙运用
  4. css三角强化

案例

1.淘宝焦点图

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        li {
            list-style: none;
        }

        .promo {
            position: relative;
            width: 846px;
            height: 472px;
            background-color: palegoldenrod;
            margin: 100px auto;
        }

        .promo img {
            width: 846px;
            height: 472px;
        }

        .prev,
        .next {
            position: absolute;
            top: 50%;
            margin-top: -15px;
            width: 40px;
            height: 50px;
            background: rgba(0, 0, 0, 0.3);
            text-align: center;
            line-height: 50px;
            color: aliceblue;
            text-decoration: none;
        }

        .prev {
            left: 0;
            border-radius: 0 25px 25px 0;
        }

        .next {
            right: 0;
            border-radius: 25px 0 0 25px;
        }

        .promo-nav {
            position: absolute;
            bottom: 20px;
            left: 50%;
            margin-left: -70px;
            width: 140px;
            height: 26px;
            background-color: rgba(255, 255, 255, .3);
            border-radius: 13px;

        }

        .promo-nav li {
            float: left;
            width: 16px;
            height: 16px;
            background-color: aliceblue;
            border-radius: 50%;
            margin: 6px 6px;
        }

        .promo-nav .selected {
            background-color: #ff5000;
        }
    </style>
</head>

<body>
    <div class="promo">
        <div class="pic">
            <img src="promo.png" alt="">
            <a href="#" class="prev">&lt;</a>
            <a href="#" class="next">&gt;</a>
            <div class="promo-nav">
                <ul>
                    <li class="selected"></li>
                    <li></li>
                    <li></li>
                    <li></li>
                    <li></li>
                </ul>
            </div>
        </div>
    </div>
</body>

</html>

效果如下:
在这里插入图片描述

2. 土豆案例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .tudou {
            position: relative;
            width: 183px;
            height: 257px;
            background-color: blue;
            margin: 100px auto;
        }

        .tudou img {
            width: 100%;
            height: 100%;
        }

        .mask {
            display: none;
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            background: rgba(0, 0, 0, .4) url(背景.png) no-repeat center;
        }

        .tudou:hover .mask {
            display: block;
        }
    </style>
</head>

<body>
    <div class="tudou">
        <div class="mask">

        </div>
        <img src="tudou.jpg" alt="">
    </div>
</body>

</html>

在这里插入图片描述
鼠标经过后:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值