超级详细的定位+(淘宝焦点图布局制作案例)

194 阅读3分钟

🍇定位

1.static定位

  • 默认值,即没有定位,遵循正常的文档流对象。静态定位的元素不会受到 top, bottom, left, right影响。

2.relative定位

  • 相对原本的位置

1.元素开启相对定位后,如果不设定偏移量(top,bottom,left,right)本身则不会发生任何变化,也不会使其它元素脱离原来的位置。通常水平垂直方向各设定一个,如设定(left,top)
2. 参照与元素在原本位置上进行定位的
3. 相对定位会提升元素层级
4. 相对定位不会改变元素的性质,块元素还是块元素,行内元素还是行内元素
5. 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它(不脱标,继续保持原来的位置),最典型的应用是给绝对定位当爹的

4.absolute定位

  • 相对于最近的已定位父元素,如果没有祖先元素或者祖先元素没有定名位,则以浏览器为准定位
  1. 元素开启绝对定位后,本身位置不会发生任何变化,但会使其它元素脱离原来的位置(脱标)。故绝对定位会改变元素的性质,行内元素变成块元素,块的宽高会被内容撑开即与内容的宽高一样。
  2. 绝对定位会提升元素层级
  3. 绝对定位元素是相对于其包含块(即当前元素最近的开启了定位的祖先元素)进行定位的,若无位置相对于html
  4. 开启了绝对定位后,水平方向的布局(margin-left+border-left+padding-left+width+padding-right+margin-right)等式就相当与多了left与right(它们默认值是auto)若等式不满足时,会自动调整,故开启定位后想让它在水平中间,就让left与right等于0,而margin-left与margin-right设置为auto.

绝对定位的盒子居中方法

  • 加了绝对定位的盒子不能通过margin:0 auto水平居中,但可通过一下计算实现水平和垂直居中
 1.left50%;(让盒子的左侧移动到父级元素的水平中心位置)
 2.margin-left:-100px;(让盒子向左移动自身宽度的一半)

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

3.fixed定位

  • 大部分特点与绝对定位一样,不同的是元素的位置相对于浏览器窗口是固定位置,即使窗口是滚动的它也不会移动
 1.left50%;(让盒子的左侧移动到父级元素的水平中心位置)
 2.margin-left:-100px;(让盒子向左移动自身宽度的一半)

固定定位小技巧

  • 固定在版心右侧 1.让固定定位的盒子left:50%(即走到版心的一半位置) 2.让固定定位的盒子margin-left:版心宽度的一半距离(就可让盒子贴着版心右侧对齐)

4.sticky定位

  • 粘滞定位,大部分特点与相对定位一样,不同的是sticky可以在元素到达某个位置时将其固定。

5.重叠的元素(z-index)

  • 可以覆盖页面上的其它元素。

z-index的值越大,层级越高也就越优先显示,若层级一样,则优先显示靠下的元素,而祖先元素的层级再高也不会盖住后代元素。

🍇淘宝焦点图布局制作案例

  1. 大盒子可类名为:tb-ad
  2. 里面放一张图片
  3. 左右两个按钮用链接即可,左箭头prev,右箭头next
  4. 底侧小圆点ul继续做,类名ad-nav
<!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>淘宝焦点图</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        li{
            list-style: none;
        }
        .tb-ad {
            /* 相对定位可直接auto */
            position: relative;
            width: 761px;
            height: 425px;
            background-color: pink;
            margin: 100px auto;
        }

        .tb-ad img {
            width: 761px;
            height: 425px;
        }

        /* 把公共部分放到并集选择器 */
        .prev,
        .next {
            /* 会压住图片,用绝对定位,加了定位不用模式转换,就可设置宽和高 */
            position: absolute;
            width: 27px;
            height: 44px;
            background: rgba(0, 0, 0, .7);
            top: 50%;
            margin-top: -22px;
            text-align: center;
            /* 行高等于高度 */
            line-height: 44px;
            color: #fff;
            text-decoration: none;
        }

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

        .next {
            right: 0;
            border-radius: 22px 0 0 22px;
        }
        .ad-nav{
            position: absolute;
            width: 100px;
            height: 20px;
            left: 50%;
            margin-left: -50px;
            bottom: 15px;
            background-color: rgba(255, 255, 255, .3);
            border-radius: 10px;
        }
        .ad-nav li{
           float: left;
           width: 10px;
           height: 10px;
           margin: 4px 5px;
           background-color: #fff;
           border-radius: 50%;
        }
        /* 不要忘记权重问题 */
        .ad-nav .seleceted{
        background-color: #ff5000;
        }
    </style>
</head>

<body>
    <div class="tb-ad">
        <!-- 用相对路径 -->
        <img src="tb-pic1.jpg">
        <!-- 左侧按钮,用绝对定位做 -->
        <a href="#" class="prev">&lt;</a>
        <a href="#" class="next">&gt;</a>
        <ul class="ad-nav">
            <li class="seleceted"></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>

</body>

</html>

image.png