CSS 小技巧总结

1、利用 CSS 的 content 属性 attr 抓取资料
代码:

// html
<div data-msg="Open this file in Github Desktop">  
hover
</div>

//css
div{
width:100px;
border:1px solid red;  
position:relative;
}
div:hover:after{
content:attr(data-msg);
position:absolute;
font-size: 12px;
width:200%;
line-height:30px;
text-align:center;
left:0;
top:25px;
border:1px solid green;
}

效果:


2、利用max-height做高度不确定的过渡动画
代码:

// html
<ul>
  <li>
    <div class="hd"> 列表1 </div>
    <div class="bd">列表内容<br>内容列表内容<br>内容列表内容<br>内容</div>
  </li>
  <li>
    <div class="hd"> 列表1 </div>
    <div class="bd">列表内容<br>内容列表内容<br>内容列表内容<br>内容</div>
  </li>
  <li>
    <div class="hd"> 列表1 </div>
    <div class="bd">列表内容<br>内容列表内容<br>内容列表内容<br>内容</div>
  </li>
</ul>

//css
.bd {
  max-height:0;
  overflow:hidden;
  transition: all 1s ease-out;
}
li:hover .bd {
  max-height: 600px;
  transition-timing-function: ease-in;
}

3、使用vw+rem实现移动端响应式布局

html{
   font-size: 100vw / 750
}

vw的兼容性如下:

vw兼容性

可见在移动端支持已经很不错了,现在H5页面基本都要求兼容到iOS>=7,Android>=4.4了。
4、pointer-events
考虑这种场景,两个tab,只能有一个激活状态,激活通过鼠标click触发,对处于激活状态的tab继续点击无效,该怎么做?通常是用js控制的,判断激活tab是否有某个类名,如.active,如果有就认为是激活状态,并直接return。要用css该怎么做呢?很简单:

.active{
      ...
      pointer-events:none;
}

另一种场景就是表单提交按钮,当用户提交后可以给按钮添加一个样式,在该样式中应用pointer-events就可以防止重复提交。
pointer-events兼容性超好,放心用吧(IE11以下除外),此外,pointer-events还可以做到点击穿透效果,感兴趣可以研究研究。
5、父元素用font-size:0来清除间距
如果在同一行内有4个25%相同宽度的元素(inline-block),会导致最后一个元素掉下来。是因为他们之间有空格,给父元素设置font-size:0可使这些空格宽度为0,从而排满一行
6、关于template的使用
浏览器对于不支持的标签所包含的内容会直接显示,template在有的浏览器下就不支持,但是这个标签在拼接模板时很好用,如果不用template就只能用<script type='js/template'>,这个写法不太好,所以最好用template,那怎么解决兼容性问题呢,很简单,在common.css里对其设置display:none,由于我们关注的只是template的innerHTML,这个值在不支持template属性的浏览器下也可以拿到,所以可以放心使用啦~
[图片上传失败...(image-56b60a-1514028994032)]
7、一个p标签,宽度自适应,最大不超过D,不超过D时居中,超过D居左的实现

.textAlignLeftOrCenter{
        word-break: break-all; //对纯数字或纯字母强制换行
        max-width: 6rem;
    width: fit-content;   // 宽度随内容实际宽度为准
    margin: auto;         //不足一行居中的关键
    font-size: .28rem;
    color: #9B9B9B;
}

兼容性还不错:


fit-content

8、一种布局的实现
如图:希望点击背景和邮戳时能触发事件A,但点击下方点赞按钮时可以点赞但同时不触发A


布局
// HTML顺序很重要,涉及到z-index的覆盖
.parent
     .postmark
     .bg
     .zan

// CSS 
.parent{
    position:relative;
    .bg{
          position:absolute;
     }
     .postmark{`
           position:absolute;
     }
     .zan{
          position:absolute;
      }
}

然后分别在.bg和.zan上绑定对应事件

  1. css变量 currentColor
    currentColor 表示当前color的值。移动端兼容性也很好,值得推荐
    凡是需要使用颜色值的地方,都可以使用currentColor替换,比方说背景色 – background-color, 渐变色 – gradient, 盒阴影 – box-shadow, SVG的填充色 – fill等等

  2. 布局时首先要考虑页面有几种展示状态,多用min-height占位,可有效避免页面闪烁

11、父元素透明,子元素不透明的实现
对父元素使用 rgba 即可;opacity的方案不行

12、如何避免在一个固定背景上填充文字等信息时因不同屏幕造成的细微错乱
首先将imgWrap的宽高按最原始的设计稿(px)布局,要填充的内容用绝对定位定位好。再根据类cardWrap算出scale,对imgWrap进行缩放。
用JS设置imgWrap

                <div className={style.cardWrap} ref={this.getCardWrap}>
                    <div className={style.imgWrap} ref={this.getCard}>
                        <img className={style.bgImg} src={defaultImg} alt="毕业证书" />
                        <img src={avatar || defaultMyIcon} className={style.avatar} alt="avatar" />
                        <div className={style.nickname}>{nickname}</div>
                        <div className={style.nicknameBottom}>{nickname}</div>
                    </div>
                </div>


// css
    .cardWrap {
        width: 100%;
        overflow: hidden;
    }
.imgWrap {
        position: relative;
        width: 944px;
        height: 1393px;
        transform-origin: left top;

        .bgImg {
            height: 100%;
            width: 100%;
        }

        .avatar {
            position: absolute;
            top: 410px;
            left: 390px;
            width: 160px;
            height: 160px;
            border-radius: 50%;
        }

        .nickname {
            position: absolute;
            top: 594px;
            text-align: center;
            font-size: 34px;
            width: 100%;
            font-weight: bold;
        }

        .nicknameBottom {
            position: absolute;
            top: 696px;
            left: 240px;
            // width: 100%;
            color: #ba9b73;
            font-size: 40px;
            font-weight: bold;
        }
    }
// js
        const width = this.cardWrap.offsetWidth
        const scale = width / cardSize.width
        const height = cardSize.height * scale

        this.cardWrap.style.height = `${height}px`
        this.card.style.webkitTransform = `scale(${scale})`
        this.card.style.transform = `scale(${scale})`

13、-webkit-app-region
这是一个在Electron应用中常使用的一个属性,可以控制窗口具有移动特性:


css奇技淫巧
8个硬核技巧带你迅速提升CSS技术 | 掘金直播总结

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,737评论 1 92
  • wap中,如果是不需要隐藏的导航,而且不需要在其内部使用滚轮,那可以直接使用css3属性代替js 网站上很多使用 ...
    进击的阿群阅读 311评论 0 1
  • 之前不久,由于自己平时涉猎还算广泛,总结了一篇博客:这些JavaScript编程黑科技,装逼指南,高逼格代码,让你...
    微醺岁月阅读 1,278评论 6 32
  • 整理试场,检查卫生,叮咛,安排衣食住行,下午剪头发,晚上看班到九点二十,查寝送表。下雨。
    子非鱼lily阅读 207评论 0 1
  • 整部《北京遇上西雅图之不二情书》看下来,给我内心一震的却是四个字:林唐秀懿。 我相信,我所看到的,却是电影要讲给我...
    从小抓阄阅读 713评论 0 0