• 【html、CSS、javascript-5】css应用场景补充


    一、CSS全局应用

    父标签div下包含两个子标签div,当子标签dvi全部向左float,此时父标签设置的背景色是不显示的

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div_a{
                background: red;
            }
            .div_a1,.div_a2{
                float: left;
            }
        </style>
    </head>
    <body>
        <div class="div_a">
            <div class="div_a1">div_a1</div>
            <div class="div_a2">div_a2</div>
        </div>
    </body>
    </html>
    父标签包含两个左漂标签,父标签背景色不显示

    如果想显示父标签的背景色,可以在子标签中再加一个div,则代码为:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div_a{
                background: red;
            }
            .div_a1,.div_a2{
                float: left;
            }
            .div_a3{
                clear: both;
            }
        </style>
    </head>
    <body>
        <div class="div_a">
            <div class="div_a1">div_a1</div>
            <div class="div_a2">div_a2</div>
            <div class="div_a3">div_a3</div>
        </div>
    </body>
    </html>
    通过在子标签中添加div显示父级的背景色

    设想下假如一个项目中有很多这样的父子div,需要显示父级的背景色,那么没个父子块都需要单独设置样式是非常繁琐的事,那么通过什么方式解决呢?

    首先:div:afer{content:"abcd"}这样的方式可以在标签的后面加上内容,实质上通过after加上的内容也作为一个内联标签存在的。

    所以通过after的方式可以实现上面的效果:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div_a:after{
                content: "abcd";
                display: block;
                clear: both;
            }
            .div_a{
                background: red;
            }
            .div_a1,.div_a2{
                float: left;
            }
            .div_a3{
                clear: both;
            }
        </style>
    </head>
    <body>
        <div class="div_a">
            <div class="div_a1">div_a1</div>
            <div class="div_a2">div_a2</div>
        </div>
    </body>
    </html>
    通过after加内容

    现在需要把加上的内容去掉,并且可以应用的其他父子模块:

    visibility: hidden 可以隐藏模块,并且不占用位置,而display:none是隐藏并占据原来的位置

    visibility用在after中还要加上height:0px 才能不占用位置,否则还占据abcd那一行的位置

    定义通用模块只需要在style中自定义一个名字叫clearfix的class就可以,.clearfix{},然后如果有相同的模块想用这种格式,只需要在标签class的属性值中添加clearfix就可以

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .clearfix:after{
                content: "abcd";
                display: block;
                clear: both;
                visibility: hidden;
                height: 0;
            }
            .div_a{
                background: red;
            }
            .div_a1,.div_a2{
                float: left;
            }
            .div_a3{
                clear: both;
            }
        </style>
    </head>
    <body>
        <div class="div_a clearfix">
            <div class="div_a1">div_a1</div>
            <div class="div_a2">div_a2</div>
        </div>
    </body>
    </html>
    通用格式

     二、父类和子类元素hover样式设置

     当父类中包含子类,当鼠标放在父类元素上,父类元素样式变化的同时子类也变化,这个样式怎么设置呢?

    首先来看一个给父类增加边框的实例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div_a:hover{
                border: solid red 2px;
            }
        </style>
    </head>
    <body>
        <div class="div_a">
            <div class="div_a1">aaaaa</div>
            <div class="div_a2">vvvvv</div>
        </div>
    
    </body>
    </html>
    父类鼠标悬停显示红色边框

    那么鼠标放到父类上,子类样式也变化呢?

    只需要:选择父类元素:hover 选择子类元素{color:red}

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div_a:hover{
                border: solid red 2px;
            }
            .div_a:hover .div_a2{
                color: red;
            }
        </style>
    </head>
    <body>
        <div class="div_a">
            <div class="div_a1">aaaaa</div>
            <div class="div_a2">vvvvv</div>
        </div>
    
    </body>
    </html>
    子类颜色样式

    问题又来了,当鼠标放上去的时候,因为边框增加了两个像素,整体下移造成了动画效果,如果不想显示动画效果呢?

    解决方案:可以提前给div加上两个像素的边框,让边框透明不显示

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div_a{
                border:solid 2px white;
            }
            .div_a:hover{
                border: solid red 2px;
            }
        </style>
    </head>
    <body>
        <div class="div_a">
            <div class="div_a1">aaaaa</div>
            <div class="div_a2">vvvvv</div>
        </div>
    
    </body>
    </html>
    提前增加边框来消除边框动画效果

     三、鼠标悬停背景色

    悬停前后对比

    方案:触发条件是鼠标移动至图片,所以要用到hover

    鼠标移动至图片后,显示同样大小的DIV覆盖图片,并保证图片大小改变,覆盖的DIV随着变化,父类标签设置为:position: relative

    覆盖图片的div设置为:position:absolute,并且上下左右距离为0,并设置透明度。

    注意父类的div是根据子类的高度变化而变化的,当父类设置的高度小于子类内容高度时,高度将不起作用;会被子类内容高度撑起,但加上overflow后就可以了,会只截取显示部分,所以为了防止界面变乱,凡是图片都建议加高度、宽度、overflow: hidden

    具体见代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div_a{
                height: 262px;
                width: 403px;
                /*注意父类的div是根据子类的高度变化而变化的,当父类设置的高度小于子类内容高度时,高度将不起作用*/
                /*会被子类内容高度撑起,但加上overflow后就可以了,会只截取显示部分*/
                /*所以为了防止界面变乱,凡是图片都建议加高度、宽度、overflow: hidden*/
                overflow: hidden;
                position: relative;
            }
            .div_a2{
                /*子类position: absolute会去找父类的position: relative,如果父类没有再去父类的父类找,*/
                /*如果一直找不到则是相对html的位置*/
                position: absolute;
                top:0;
                right: 0;
                bottom:0;
                left: 0;
                background: black;
                opacity: 0.5;  /*设置透明度,也可以用:background-color: rgba(0,0,0,0.5)*/
                color: white;
                visibility: hidden;
            }
            .div_a:hover .div_a2{
                visibility: visible;
            }
        </style>
    </head>
    <body>
        <div class="div_a">
            <div class="div_a1"><img src="shoes.png"></div>
            <div class="div_a2">你好</div>
        </div>
    </body>
    </html>
    悬停图片阴影显示

    效果见下图:

     四、CSS画方向三角图标

    在网页中会经常看到一些方向小图标,小图标可以是图片,当然用CSS也可以简单的画出来的哦。

    boder的上、右、下、左分别设置宽度、实线、背景色,并且设置为inlie-block样式,则会出现下图所示效果:

    那么可以通过其他边设置透明色的方式来取到三角,代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .up{
                border-top:30px solid red;
                border-right: 30px solid black;
                border-bottom:30px solid green;
                border-left: 30px solid blue;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <div class="up"></div>
    </body>
    </html>
    border实现画三角

    例如画个向下的三角,那么只需要把其他几个边的背景色设置为透明色:transparent即可,代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .down{
                border-top:30px solid red;
                border-right: 30px solid transparent;
                border-bottom:30px solid transparent;
                border-left: 30px solid transparent;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <div class="down"></div>
    </body>
    </html>
    向下三角

    如图所示:

    还可以将上图的下三角再进行平分,这样只需要将下、左boder注释掉就可以,代码如下

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .down{
                border-top:30px solid red;
                border-right: 30px solid transparent;
                /*border-bottom:30px solid transparent;*/
                /*border-left: 30px solid transparent;*/
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <div class="down"></div>
    </body>
    </html>
    平分向下三角

    如图所示:

     如果三角本来是朝下的如何让鼠标一旦指向就变为向上的呢?

    解决方案:鼠标指向的时候,向下的显示出来,向上的隐藏,显示后正方形整体上移几个像素

    设计:增加一个父标签,父标签中的子标签为boder倒三角,子标签的上边距为30px,鼠标移到标签上后上边距为0,子标签底部三角显示,其他隐藏

    代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .down{
                margin:30px 0;
                border-top:30px solid red;
                border-right: 30px solid transparent;
                border-bottom:30px solid transparent;
                border-left: 30px solid transparent;
                display: inline-block;
            }
            .down:hover{
                margin: 0;
                border-top:30px solid transparent;
                border-right: 30px solid transparent;
                border-bottom:30px solid red;
                border-left: 30px solid transparent;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <div>
            <div class="down"></div>
        </div>
    </body>
    </html>
    动态变化三角方向

     五、图标的几种方式

    1、前端工程师,专业画图切图,通过图片的方式插入

    2、通过CSS的方式制作,如上面的三角图标

    3、通过插件的方式,这种方式一般都能满足需求。Font Awesome,官方网站:http://www.fontawesome.com.cn/

    1)通过官方网站下载插件,下载后解压,然后放置html所在的目录

    2)通过link引入<link rel="stylesheet" href="font-awesome/css/font-awesome.css">

    3) 然后可以通过calss的属性值来引用:<span class="fa fa-bicycle"></span>

     代码如下插入一个自行车图标:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="font-awesome/css/font-awesome.css">
    </head>
    <body>
        <span class="fa fa-bicycle"></span>
    </body>
    </html>
    插件图标

    六、文件目录

    1、app目录:存放html文件。如:s1.html  s2.html

    2、css目录:存放css文件。如:commons.css

    3、script目录:存放js文件。如:conmmons.js

    4、plugin目录:存放第三方的插件。如:bootstrap bxslider等

     七、import改变css执行的优先级

    css是从上至下执行的,所以出现相同属性被设置时,靠近离css最近的会生效,如果想前面的代码生效,则只需要在属性后面加上 !important就可以。

    下面代码最终div的背景色显示为红色:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div1{
                height: 200px;
                background-color: red !important;
            }
            .div1{
                background-color: blue;
            }
        </style>
    </head>
    <body>
        <div class="div1">
    
        </div>
    </body>
    </html>
    important

     八、后台管理布局

    后台管理布局如图所示:

    上图所示B区是固定大小,那么问题是C区怎么随着屏幕的大小而改变呢?

    解决方案:B区固定大小后,然后设置C区position:absolute,然后C区距离左边距为B区的宽度,距离右边距为0,距离上边的距离为A区的高度,那么C区会自动拉伸大小填充满

    代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            body{
                margin: 0;
            }
            .pg-head{
                height: 48px;
                background-color: #396bb3;
            }
            .pg-body-left{
                width: 100px;
                height: 200px;  /*为了显示*/
                background-color: #c0cddf;
            }
            .pg-body-right{
                position: absolute;
                height: 200px; /*为了显示*/
                background-color: antiquewhite;
                top:48px;
                right: 0;
                left: 100px;
    
    
            }
        </style>
    </head>
    <body>
        <div class="pg-head"></div>
        <div class="pg-body">
            <div class="pg-body-left"></div>
            <div class="pg-body-right"></div>
        </div>
    </body>
    </html>
    后台布局自动拉伸

    效果如下:

     那么又有一个问题,如果要实现A区和B区不动,C区可以滚动下拉,那么应该怎么做呢?

    解决方案:C区设置overflow:auto,然后position:absolute,bottom:0

    代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            body{
                margin: 0;
            }
            .pg-head{
                height: 48px;
                background-color: #396bb3;
            }
            .pg-body-left{
                width: 100px;
                height: 200px;  /*为了显示*/
                background-color: #c0cddf;
            }
            .pg-body-right{
                position: absolute;
                background-color: antiquewhite;
                top:48px;
                right: 0;
                left: 100px;
                bottom: 0;
                overflow: auto;  /*如果超出高度,然么此div本身会加滚动条*/
            }
        </style>
    </head>
    <body>
        <div class="pg-head"></div>
        <div class="pg-body">
            <div class="pg-body-left"></div>
            <div class="pg-body-right">
                <p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p>
                <p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p>
                <p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p>
                <p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p><p>1</p>
            </div>
        </div>
    </body>
    </html>
    AB区不变,C区滚动

     九、边缘提示框

    如下图所示,确定和取消是怎么做的呢?

    思路:td内加一个父级的div,然后包含一个子集的div,子集的div包含确定和取消按钮,然后父级position:relative ,子集的position:absolute,通过left和top来定位位置

    代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div_a{
                position: relative;
            }
            .div_a1{
                position: absolute;
                left: 107px;
                top: -4px;
            }
            .div_a1>input{
                display: block;
                float: left;
            }
        </style>
    </head>
    <body>
        <table border="1">
            <tr><td>第1行</td><td>第1行</td><td>第1行</td>
                <td>
                    <div class="div_a">
                        第1行,第4列
                        <div class="div_a1">
                            <input type="button" value="确定">
                            <input type="button" value="取消">
                        </div>
                    </div>
                </td>
            </tr>
            <tr><td>第2行</td><td>第2行</td><td>第2行</td><td>第2行</td></tr>
            <tr><td>第3行</td><td>第3行</td><td>第3行</td><td>第3行</td></tr>
            <tr><td>第4行</td><td>第4行</td><td>第4行</td><td>第4行</td></tr>
        </table>
    </body>
    </html>
    边缘提示框

     十、登陆页图标

    如下图,登陆页的图标是怎么显示的呢 ?

    解决方案:div中包含两个子类的div,子类div一个是input标签,一个是图标,然后父级position:relative ,子集的position:absolute,。

    input通过margin来设置内边距,防止图片区域输入文字

     代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div_a{
                position: relative;
            }
            .div_a2{
                position: absolute;
                left: 141px;
                top:6px ;
            }
            .div_a1>input{
                padding-right:20px ;
                width: 130px;
                height:25px;
            }
        </style>
    </head>
    <body>
        <form>
            <div class="div_a">
                <div class="div_a1">
                    <input type="text">
                </div>
                <div class="div_a2">
                    R  <!--R用来表示图标-->
                </div>
            </div>
        </form>
    </body>
    </html>
    input图标

    十一、模态对话框

    如下图,模态对话框的位置是怎么设置的呢?

    分析:一共分为三层,第1层:模态对话框按钮层;第2层:黑色半透明遮罩层;第3层:对话框层

    解决方案:

    第2层:完全遮住浏览器,父级div下面包含遮罩层的div,遮罩层的div设置为:position:fixed,然后top right bottom left都设置为0

    第3层:设置div的position:fixed,然后设置top:50% left:50%,此时对话框层的左上角为中心,然后设置外边距margin-top上移对话框的高度的一半,margin-left左移对话框宽度的一半。注意:设置position:fixed,并设置了top和left之后,可以通过magin-left和magin-top来调整具左边和上边的位置

    把对话框作为div,代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div_a1{
                position: fixed;
                top:0;
                right: 0;
                bottom: 0;
                left:0;
                background-color: rgba(0,0,0,0.6);
            }
            .div_a2{
                background-color: white;
                width: 400px;
                height: 300px;
                position: fixed;
                left:50%;
                top: 50%;
                margin-left:-200px;
                margin-top:-150px;
            }
        </style>
    </head>
    <body>
        <div class="div_a">
            最底层
            <div class="div_a1"></div>
            <div class="div_a2"></div>
        </div>
    </body>
    </html>
    模态对话框

     十一、bxslider插件可以显示轮播图

     十二、商品数量加减实现方式

    如下图,加减数量是怎么实现的呢?

     解决方案:父类div包含三个子类div,分别为div input div,代码如下:

    cursor: pointer  当移动到该标签时鼠标变为手型
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .left{
                float: left;
            }
            .wrap{
                background-color: #dddddd;
                height: 25px;
                width: 150px;
                border:1px solid #dddddd;
            }
            .minus{
                width: 25px;
                height: 25px;
                text-align: center;
                cursor: pointer;  /*鼠标移动到div显示手形状*/
            }
            .count input{
                padding: 0; /* 默认input有个1px的内边距*/
                border: 0;
                height: 25px;
                width: 100px;
            }
    
            .plus{
                width: 25px;
                height: 25px;
                text-align: center;
                cursor: pointer; /*鼠标移动到div显示手形状*/
            }
        </style>
    </head>
    <body>
        <div class="wrap" >
            <div class="minus left">-</div>
            <div class="count left">
                <input type="text">
            </div>
            <div class="plus left">+</div>
        </div>
    </body>
    </html>
    商品数量加减实现方式

    用JavaScript实现单击增加或减少数量,代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .left{
                float: left;
            }
            .wrap{
                background-color: #dddddd;
                height: 25px;
                width: 150px;
                border:1px solid #dddddd;
            }
            .minus{
                width: 25px;
                height: 25px;
                text-align: center;
                cursor: pointer;  /*鼠标移动到div显示手形状*/
            }
            .count input{
                padding: 0; /* 默认input有个1px的内边距*/
                border: 0;
                height: 25px;
                width: 100px;
            }
    
            .plus{
                width: 25px;
                height: 25px;
                text-align: center;
                cursor: pointer; /*鼠标移动到div显示手形状*/
            }
        </style>
    </head>
    <body>
        <div class="wrap" >
            <div class="minus  left" onclick="Minus();">-</div>
            <div class="count left">
                <input id="count" type="text">
            </div>
            <div class="plus left" onclick="Plus()">+</div>
        </div>
        <script type="text/javascript">
            //定义函数
    //        function Plus() {
    //            alert('这是弹出对话框')
    //        }
            function Plus() {
                var old = document.getElementById('count').value
                var newInt = parseInt(old)
                var newIntPlus = newInt + 1
                document.getElementById('count').value = newIntPlus
            }
            function Minus(){
                var old = document.getElementById('count').value
                var newInt = parseInt(old)
                var newIntMinus = newInt - 1
                document.getElementById('count').value = newIntMinus
            }
        </script>
    </body>
    </html>
    实现单击增加减少
     
  • 相关阅读:
    《Troubleshooting Windows 7 Inside Out》文摘-1
    快与慢、空和满
    学习心得-4
    word::替换::突出显示
    word
    system.run
    kafka server.properties
    zookeeper.conf
    elasticsearch
    filebeat.yml
  • 原文地址:https://www.cnblogs.com/sunshuhai/p/9060892.html
Copyright © 2020-2023  润新知