CSS 经验

2019/04/08 CSS

男人彻底懂得一个女人之后,是不会爱她的。

1、CSS 样式修改

如果选中的 div 的大小或者 style 没有你要的,那就点点他周围的 div,或许有意外的发现呢

2018-12-04 20:30 就像今晚在看一个自适应的 img,一直找不到他的大小,应该说知道大小是 width:100%,那就一定是他包围着的 div 控制的大小,如果这个 div 还看不到大小,那肯定还有一个 div 在控制着这个 div 的大小了,总着周围的 div 多点出来看看,总有意外的发现的额,第二次 犯这种错误的了

2019-04-08 17:28 就像下午一直再看一个样式,全都看完了,就是不知道怎么居中的,结果点了上下的样式,才发现,居中的是父样式控制的,看来以后的样式主要还是要看看父样式,当前的样式没有的话,就要看看父样式了,第三次犯错了啊

2019-06-14 10:12 style=”flex-grow: 1;text-align: right;” avatar

2019-06-14 16:40 在表单里面的,偶尔使用 span 也是不错的

<i-form>
    <form-item >
        <span style="font-size: 16px">积分提现:</span>
        <i-switch @on-change="editWithDrawlPointSysStatus" v-model="reportData.withDrawlPointSysStatus" size="large">
            <span slot="open">开启</span>
            <span slot="close">关闭</span>
        </i-switch>
    </form-item>
</i-form>

2、苹果 移动端 position:fixed 滑动问题

<!--错误写法-->
<div style=" overflow : scroll">
     <div style="position:fixed"></div>
</div>
<!--正确写法,应该将两个属性按照同级使用不能用包含的形式-->
 <div style="position:fixed"></div>
<div style=" overflow : scroll"></div>

3、使用 mint-ui 的上拉下滑必须使用以下属性

 <div class="wrapper" style="height:100vh;overflow-y:scroll;-webkit-overflow-scrolling:touch" ></div>

4、vue 回到顶部组件

<template>
    <div class="gotoTop">
        <img class="go-top" v-if="btnFlag" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAEE0lEQVRoQ92ayUsrQRCHa9S4axT0ICqagwui4r4dBJf/2IOXJIIH44aGKOJycMeDgnvcncevoMMkmSQ9Mz2T5xQMPHyd6v66qqurakbTdV0nBfL29kZ3d3f08PBAr6+v/Hx9fdH39zdrLysro0AgQDU1Nfw0NDRQU1MTVVVVKZidSHMCkkwm6erqih8s3I4Aqq2tjZ/q6mo7Kvg3tkAeHx/p5OSEbm5ubE9s9sOWlhbq6uqiYDBoWa8lkI+PDzo4OGALuCmwTl9fH1VUVEhPIw1yfX1Ne3t77PdeCM7TwMAAtba2Sk1XEOT395f29/fp/PxcSqHqQR0dHdTf308lJSV5VecFQcTZ2triaFRMQXQbHx/nyJdLcoIAIhaLcTj9HwThenp6OieMKQjcaWNjo+iWyNxAWGZyctLUzUxBEolE0c5EIevjzAwODmYNywJBdNrZ2Smkr6j/PzIykhXN0kBwT6ysrHgWYu3uBkLz3Nxc2j2TBrK7u2vpskOeVCgsyi4W5xL5mqzg0hweHk4NT4Eg7VhdXZXVQ729vZxOqBSkPYeHh9IqZ2dnU+lMCmR7e9tS7tTT00Pd3d3Sk8oMPD4+pqOjI5mhPAa52djYGP+bQZDFRiIRaQViIHIhla6FM2pVFhYWOGtmEKs7YWUyAYoz4IYIz2CQaDRqu57It7i6ujqampriIevr6/T8/KycBfXM/Pw8aclkUg+Hw8onqK+v55SivLycdX9+ftLa2porMIuLi6RdXFzo8XhcKUgmhFAOGORvT09PSucbGhoiLZFI6GdnZ8oUo7qDO8ESOBfijPz8/FBpaSlbBm6GcK9KOjs7SYvFYvrt7a0SnchQAYGbFwtGITY6Osq6Nzc3CTsHQBRnsIwqmObmZtLC4TCHX6dihEAYxULRoEEqAcE5RD2Bc4OwDRhYRkWZwOF3eXlZd1q+NjY2cnoNSwgIRKja2to0EKQgiGRGGJQL9/f3jvYR82pLS0tOOkIECLgTdvv9/Z0t8fLywgszAxF/B0xlZSX3vWAZJzCapjkDMVZtgEB4Nfa3coGYwTipRhnEiWuhKRAKhdgSmRD5LCL8CJfZzMwMW+b09JSbHHaEXcvJYccC2tvbOfU3S8HzWUQsGKUAUvLLy0veEDvCh11l+M1chAyInYVn/obDr+oL0TiJVyB8IbqRoggYr0A4RXEraZQ57CrcCjo4aXQzjffCIqk03s3CyguQtMLKbqlbyDW8AEkrdbEgq82HQhBenJGs5gMmtdoOkgFB6jAxMcF1Cbr6qsW0HYRJrDboVC/Mir6cDToo8U3LFDC+aGIL0/ritQJgfPOiBzC+ePUmXMwXL0MFjC9eTxvj+p//YMAI44tPOIxAf/6jmswU4s9/5mSWExX7w7N/RVwpTJxVLTkAAAAASUVORK5CYII=" @click="backTop">
    </div>
</template>

<script>
    export default {
        name: "GotoTop",
        data() {
            return {
                btnFlag: false,
                scrollTop: 0,
            }
        },
        mounted () {
            window.addEventListener('scroll', this.scrollToTop, true)
        },
        destroyed () {
            window.removeEventListener('scroll', this.scrollToTop,true)
        },


        methods: {
            // 点击图片回到顶部方法,加计时器是为了过渡顺滑
            backTop () {
                const that = this
                let timer = setInterval(() => {
                    let ispeed = Math.floor(-that.scrollTop / 5)
                    let dom =document.getElementsByClassName('wrapper')[0];
                    dom.scrollTop = that.scrollTop + ispeed;
                    if (that.scrollTop === 0 || that.scrollTop === 1) {
                        clearInterval(timer)
                    }
                }, 16)
            },

            // 为了计算距离顶部的高度,当高度大于 120 显示回顶部图标,小于 120 则隐藏
            scrollToTop () {
                const that = this
                // 获取到某一个元素,然后获取他的属性值
                // 这个 wrapper 的 scrollTop 还不是一般就能获取到的,好像是还要设置固定 height: 100vh 和 overflow-y: scroll 的类名才能获取到的
                let dom =document.getElementsByClassName('wrapper')[0];
                let scrollTop = dom.scrollTop;

                that.scrollTop = scrollTop
                if (that.scrollTop > 120) {
                    that.btnFlag = true
                } else {
                    that.btnFlag = false
                }
            }
        }
    }
</script>

<style scoped>
    .go-top{
        position: fixed;
        bottom: 60px;
        right: 10px;
        width: 30px;
        height: 30px;
        cursor: pointer;
        background: #fff;
        border-radius: 50%;
        z-index: 99;
    }
</style>

5、document 获取滚动条的位置

    // 获取到某一个元素,然后获取他的属性值
    let dom =document.getElementsByClassName('wrapper')[0];
    let scrollTop = dom.scrollTop;
    // 也可以直接赋值改变他的属性值
    dom.scrollTop = 0;
    
    // 这些是获取 body、等其他的大方面的 scrollTop(滚动条的位置) 
    var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;

6、document 获取全局点击属性

    let body = document.querySelector('body')
    body.addEventListener('touchstart',(e)=>{ // 手机屏幕用的是 touchstart
        // debugger
        console.log(e.target.offsetParent.className )
        // 忽略掉原来的 div,不然会冲突,看不到效果
        if(e.target.parentElement.className != 'mobile-menu-icon' && e.target.parentElement.className != 'col-lg-6 col-md-8 col-sm-9' && e.target.offsetParent.className != 'tm-nav show'){
            // debugger
            this.tabbar = false
        }
    },false)

7、弹窗之后父窗口还会滚动

    // 打开弹窗时修改属性
    document.getElementsByClassName('wrapper')[0].style.position = 'fixed';
    document.getElementsByClassName('wrapper')[0].style.overflow = 'hidden';

    // 关闭弹窗时修改成原来的属性
    document.getElementsByClassName('wrapper')[0].style.position = 'relative';
    document.getElementsByClassName('wrapper')[0].style.overflow = 'scroll';

8、CSS 消除 ios 点击按钮时出现的一个半透明的灰色背景

    body{
        -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
    }

9、兄弟组件通信 —— eventBus 的用法

1、新建eventBus.js

    import Vue from 'vue'
    export default new Vue()

2、触发事件 —— 用来被监听

    import eventBus from './eventBus'
    //...
    methods: {  
       addCart(event) {  
            eventBus.$emit('getTarget', event.target);   
       }  
    } 

3、监听事件 —— 之后调用

   import eventBus from './eventBus'

   created () {
     eventBus.$on('getTarget', args => {
        console.log(args);  
     }) 
   }

记:这样,在每次【触发事件】组件的点击事件中,就会把 event.target 传递到【监听事件】中,并console出来。

10、ios 中 z-index 失效导致的坑

1、页面上加上 ios 的弹性滑动属性 -webkit-overflow-scrolling: touch 会导致苹果上 z-index 属性失效,安卓正常
将弹性滑动属性的css全局样式-webkit-overflow-scrolling: touch去掉后z-index属性正常。

11、console.log(parent)

1、打印出来之后只能自己根据需要一个一个找了 例:layui 查找弹窗之后的兄弟弹窗

// data 为需要传递的值,这个方法是获取父窗口的函数,然后从子窗口传值给父窗口
// 这个获取到的是兄弟窗口
// 鼠标移动到属性值上,它会教你怎么获取那个值,如果写法错误,那么获取不到值
// 以后查找 js 上有什么函数,方法都可以先打印出来看下,然后查找
 parent.document["layui-layer-iframe1"].vm.getChildrenData(this.select_data);

  getChildrenData(data){
            console.log('从子页面传递回到数据:');
            console.log(data);
        }

12、layui 父页面获取子页面(弹窗)的值:

    $(document).ready(function() {
     
        //拿到子窗口中传回的数据
         function getChildrenData(data){
            console.log('从子页面传递回到数据:');
            console.log(data);
            
         }
     
    });
// 原文链接:https://blog.csdn.net/qq_38313548/article/details/92636914

子页面调用父页面的取值方法:

    parent.getChildrenData(data);//data为需要传递的值

13、绝对定位 与 相对定位

绝对定位:position:absolute
相对定位:position:relative
绝对定位使用通常是父级定义 position:relative 定位,子级定义 position:absolute 绝对定位属性,并且子级使用 left 或 right 和 top 或 bottom 进行绝对定位。 自己的个人中心模板就是一个例子

14、关于行内图标字体与普通文字的垂直居中对齐问题的研究

https://www.jianshu.com/p/afbe7fd1dbe7

15、css 中单位 em 和 rem 的区别

em相对于父元素,rem相对于根元素。
像素(px):用于元素的边框或定位。
em/rem:用于做响应式页面,不过我更倾向于rem,因为em不同元素的参照物不一样(都是该元素父元素),所以在计算的时候不方便, 相比之下rem就只有一个参照物(html元素),这样计算起来更清晰。

16、移动端 rem.js 的使用方法

Search

    Table of Contents