【前端学习日记】定位&元素显示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>

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

猜你喜欢

转载自blog.csdn.net/P9ulp/article/details/125817387