溢出(overflow)

- 值解析
    - visible: 溢出的值会在容器之外显示(默认)
    - hidden: 溢出的值会被隐藏
    - scroll: 溢出的内容会被提供滚动条,方便用户显示
    - auto: 有溢出就提供滚动条,没有就不提供滚动条
    - inherit: 继承父容器的overflow属性

    - overflow-x: x轴溢出
    - overflow-y: y轴溢出

- 实例1

    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: yellow;
            overflow: hidden; # 多余的部分剪掉
        }
    </style>
    ......
    <div>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut, quia, tempora. Accusantium ad aperiam cupiditate distinctio dolorum earum error est excepturi nam, possimus quidem temporibus unde ut. Atque, incidunt, molestiae.
    </div>

- 实例2

    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: yellow;
            overflow-y: auto; # y轴方向自动适应
            overflow-x: hidden; # x轴方向隐藏
        }
    </style>
    ......
    <div>很多文字</div>


块级元素(block)/行内元素(inline)


- 依据所占据的空间区分

    - 块级元素:独占一行

    - 行内元素:有多少就占多少


- 宽度和高度区分

    - 块级元素:可以对其设置宽高

    - 行内元素:不可以对其设置宽高

- 行内块元素(inline-block):同时具有块级元素和行内元素的特征

- 常见的块级元素:

    - div/p/ul/ol/li/dl/dt/dd/h1~h6

- 常见的行内元素:

    - a/b/em/i/span/strong

行内块元素


- 常用的两个

    - img

    - input

- 实例: <img> 即可以设置宽高,也可以和 <span>在一块

    <style>
        img {
            width: 100px;
            height: 100px;
        }
    </style>
    ......
    <body>
        <span>111111111111111</span>
        <img src="pretty.png" alt="">
    </body>


- 注意:对于'行内元素',边距只能设置左右,无法设置上下,实例

    <style>
        span {
            background-color:yellow;
            margin:100px;

        }
    </style>
    ......
    <body>
        <span>111111111111111</span> # span效果上,只有左右边距,没有上下
    </body>

- <a>标签与<div>之间样式问题

    - 当<a>标签设置内边距的时候,div的内容会渗透进来
      解决办法: <a>标签变成'行内块'元素即可解决

    - 实例

        <style>
            a {
                background-color:black;
                color:white;
                padding:10px; # 设置内边距
            }
        </style>
        ......
        <body>
            <a href="">链接一</a>
            <a href="">链接二</a>
            <a href="">链接三</a>
            <a href="">链接四</a>
            <div>111111111</div> # 内容会渗透进去
        </body>

    - 解决:加一句即可: display:inline-block;

- display:none 隐藏内容

- 基础示例

    <style>
        .hide {
            display: none; # 隐藏显示,页面上什么都没有
        }
    </style>
    ......
    <body>
        <div class="hide">111111111</div>
    </body>

- 实例:鼠标移动到特定位置,才显示内容;否则就隐藏内容

    <style>
        div {
            width:200px;
            height:200px;
            background-color:yellow;
        }
        p {
            display:none; # 正常状态下,隐藏内容
        }
        div:hover p {
            display: block; # 鼠标移动过来,就显示内容
        }
    </style>
    ......
    <body>
        <div class="container">
            <p>测试内容测试内容测试内容测试内容</p>
        </div>
    </body>


- 选择器之间用'空格',表示"后代选择器"

- 选择器之间用'>',表示"子代选择器"(只有'亲儿子'才会生效)


- 二级菜单示例

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Title</title>

        <style>
            * {
                padding: 0; # 清除所有的边距
                margin: 0;
            }
            .box {
                width: 300px; 
                margin: 0 auto;
            }
            ul {
                list-style: none;
            }

            .box .item {
                float: left;
                /*width: 150px;*/ 有边框的话,宽度会变大,有一个会被挤下去
                width: 148px;
                text-align: center;
                border: 1px solid blue;
                background-color: blue;
                color: white;
                line-height: 40px;
            }

            .item:hover {
                background-color: lightblue;
            }

            .item ul {
                display: none;
                background-color: white;
                color: black;
            }

            .item:hover ul {
                display: block;
            }
            .item li:hover {
                color: blue;
            }
        </style>
    </head>

    <body>

        <ul class="box">
            <li class="item">视频教程
                <ul>
                    <li>全部视频教程</li>
                    <li>Python教程</li>
                    <li>Java教程</li>
                    <li>Go教程</li>
                </ul>
            </li>
            <li class="item">认证考试
                <ul>
                    <li>英语认证考试</li>
                    <li>C++认证考试</li>
                </ul>
            </li>
        </ul>

        <script>

        </script>
    </body>
</html>


- 二级菜单练习:自己的写法

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

    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="vue2.js"></script>
        <style>

            * {
                margin: 0;
                padding: 0;
            }

            .container {
                width:100%;
                height:50px;
                background-color: #018dd6;
            }

            .list {
                list-style: none;
                width: 300px;
                margin: 0 auto;

            }
            .item {
                float: left;
                width:148px;
                text-align: center;
                line-height:50px;
                border:1px solid white;

            }
            .item:hover {
                background-color:navajowhite;
            }
            .list-son {
                list-style: none;
                background-color:greenyellow;
                display:none;
            }

            .item:hover ul {
                display:block;
            }

            .item ul li:hover {
                color:red;
            }


        </style>
    </head>

    <body>

        <div class="container">
            <ul class="list">
                <li class="item">菜单一
                    <ul class="list-son">
                        <li class="item-son">子菜单一</li>
                        <li class="item-son">子菜单一</li>
                        <li class="item-son">子菜单一</li>
                    </ul>
                </li>
                <li class="item">菜单二
                    <ul class="list-son">
                        <li class="item-son">子菜单二</li>
                        <li class="item-son">子菜单二</li>
                        <li class="item-son">子菜单二</li>
                    </ul>
                </li>
            </ul>
        </div>

        <script>


        </script>
    </body>
</html>

position 位置


- 重要参数

    - static: 默认值

    - absolute: 绝对定位

        - 当没有父元素/父元素没有定位,参照物是浏览器窗口的'第一屏'

        - 有父元素且父元素有定位,参照父元素

    - relative: 相对定位

        - 参照 自己本身的 初始位置

    - fixed: 固定定位

        - 固定在浏览器窗口

    - sticky: 粘性定位

        - 可以做出'吸顶效果'(兼容性不好)


- 四个值:

    - left/right/top/bottom

- 其他值

    - z-index: 值越大,该元素越往上

position 实例


- 实例1:三个色块盒子,static(静态)演示

    <style>
        * {
                margin: 0;
                padding: 0;
            }
        div {
            width: 200px;
            height: 200px;
        }
        .box1 {
            background-color: yellow;
            position: static; <!--默认值-->
            top:100px; <!--无效果-->
        }
        .box2 {
            background-color: red;
        }
        .box3 {
            background-color: blue;
        }
    </style>
    ......
    <body>

        <div class="box1"></div>
        <div class="box2"></div>
        <div class="box3"></div>
    </body>

- 实例2: relative演示,相对于自身
  效果: box2色块位置虽然空出来,但是其他两个色块并没有趁机占空间,还是在原来的位置

    ......
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        div {
            width: 200px;
            height: 200px;
        }
        .box1 {
            background-color: yellow;
        }
        .box2 {
            background-color: red;
            position: relative; <!--相对于自身移动位置-->
            top: 100px; <!--设定要移动的像素-->
            left: 100px;
        }
        .box3 {
            background-color: blue;
        }
    </style>

    - 注意事项: top/left 也可以使用负值,比如写成'-100px'


- 实例3: absolute演示,当没有父元素/父元素没有定位的时候,参考窗口

    .....
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            width: 200px;
            height: 200px;
            background-color: blue;
            position: absolute; <!--相对与浏览器窗口,左/上各移动了100px-->
            left: 100px;
            top:100px
        }
    </style>
    ......
    <body>
        <div class="box"></div>
    </body>

    - 此时若再来一个div块,里面填充很多文本,box颜色块依然会'浮动'在文本上面,脱离文档流..


    - 当有父元素,但是父元素没有定位的时候,依旧是参考浏览器

        <style>
            * {
                margin: 0;
                padding: 0;
            }

            .parent {
                width: 500px;
                height: 500px;
                background-color: blue;
                margin: 0 auto; <!--父元素没有定位-->
            }
            .child {
                width: 200px;
                height: 200px;
                background-color: red;
                position: absolute; <!--依旧参考浏览器-->
                left: 100px;
                top: 100px;
            }
        </style>
        ......
        <div class="parent">
            <div class="child"></div>
        </div>


    - 当父元素也有定位的时候(一般设置成 relative,但是不设置left/top),子元素就会参考父元素的位置

        <style>
            * {
                margin: 0;
                padding: 0;
            }

            .parent {
                width: 500px;
                height: 500px;
                background-color: blue;
                margin: 0 auto; 
                position: relative; <!--父元素有定位,一般不设置 left/top -->
            }
            .child {
                width: 200px;
                height: 200px;
                background-color: red;
                position: absolute; <!--依旧参考浏览器-->
                left: 100px;
                top: 100px;
            }
        </style>
        ......
        <div class="parent">
            <div class="child"></div>
        </div>

        - 注意事项:若此时 父元素 position 修改为: absolute,margin居中的效果会消失
        容器移动到浏览器的左上角(默认效果),子容器依然会距离父元素100px
        即父元素变了,但子元素不会变


fixed 永远固定在指定的位置

  • 两个色块(一个设置很高的高度,另一个充当'广告位')

    <style>
        * {
            padding: 0;
            margin: 0;
        }

        .box {
            width:100%;
            height:1500px;
            background-color: yellow;
        }
        .ad {
            width:200px;
            height: 100px;
            background-color:red;
            position: fixed; /*位置固定,且必须指定固定的位置,这里如果修改成 absolute,那么当滚动到下方的时候,'广告位'就消失了*/
            right: 0; /*永远固定在右上角*/
            top: 0;
        }

    </style>
    ......
    <body>

        <div class="box"></div>
        <div class="ad"></div>

    </body>

sticky 粘性定位


- 三个色块(菜单栏,小块的导航条,大块内容部分)
  当鼠标滚动下来时,固定住'导航条'(需指示固定的位置)


  <style>
        * {
            padding: 0;
            margin: 0;
        }

        .header {
            height: 100px;
            background-color:yellow;
        }

        .nav {
            width: 500px;
            height: 50px;
            background-color:red;
            margin: 0 auto;
            position: sticky; /*粘性定位*/
            top:0; /*与顶部没有边距*/
        }

        .body {
            height: 1000px;
            background-color:green;
        }

    </style>
    ......
    <body>

        <div class="header"></div>
        <div class="nav"></div>
        <div class="body"></div>

    </body>



- 是否脱离文档流

    - fixed/absolute 会脱离文档流,其他均不会脱离

案例:容器里面,图片的定位


    ......
    <style>
       .container { /*外层容器设置宽,高度,居中背景色显示*/
           width:500px;
           height:500px;
           margin:0 auto;
           background-color: yellow;
       }
       .box { /*里层容器设置宽,高度,边框,并设置'相对定位',用来定位图片*/
           width:275px;
           height:275px;
           border:6px solid red;
           position:relative;
       }
       .box .pic { /*大图片占满整个'里层容器'*/
           width:100%;
           height:100%;
       }
       .box .icon { /*小图片设置'绝对定位',并设置图片的'不透明度'*/
           position:absolute;
           left:7px;
           bottom:7px;
           opacity:0.5;
       }
       .box .greenicon { /*鼠标移动到'里层容器',小图片的'显示'和'不显示'*/
           display:none;
       }
       .box:hover .greenicon {
           display:block;
       }
    </style>
    ......
    <div class="container">
       <div class="box">
           <img src="bg.jpg" alt="" class="pic">
           <img src="1.png" alt="" class="icon greenicon">
       </div>
    </div>