css 积累

作者: warryy | 来源:发表于2018-01-10 16:49 被阅读1次

    各种理解

    vh & vw
    100vh = window.innerHeight
    //即浏览器内容窗口的高度,不包括地址导航书签栏等
    // (包括横向滚动条)
    100vw = window.innerWidth
    //即浏览器内容窗口的宽度
    // (包括纵向向滚动条)
    
    input 标签 type= button 时移动端点击出现光标

    原因:input 有一个私有属性 user-modify:read-write-plaintext-only
    解决:

    input[type="button"] {
      -webkit-user-modify: read-plaintext-only;
      -moz-user-modify: read-plaintext-only;
      -ms-user-modify: read-plaintext-only;
      -ms-user-modify: read-plaintext-only;
      user-modify: read-plaintext-only;
    }
    
    BFC(Block Formatting Context)块级格式化上下文:

    想做一个三栏布局的 demo,用到了清除浮动,发现不知为什么伪类的方法不行了,于是发现了这个东西。

    产生:

    1. 元素 display 属性 table-cell, flex, flow-root 等等;
    2. 元素 position 属性不为 staticrelative;
    3. 元素 floate 属性不为 none;
    4. 元素 overflow 属性不为 visible
      作用:
    5. 清除内部元素的浮动,即自身宽高将包括内部的浮动元素,自己在文档中独立成一部分;
    6. 清除 margin 重叠,当父元素和子元素同时设置了外边距且父元素没有设置 borderpadding 时,父子元素外边距会发生重叠,BFC 会清除父子元素外边距的重叠效果。
    图片文字一行展示垂直居中(此方法有时会偏差几像素,原因暂不知道,可用flex布局解决)

    默认文字和图片的对其方式是图片和此行的基线对齐,即 vertical-align: base-line;该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。 此时纵使你设置了文字的行高等于父元素的高度,文字也不会居中,因此应该设置图片的 css:vertical-align: middle;。即图片中线和父元素中线对齐。
    点此查看更多 vertical-align 属性。

    input 修改placeholder样式
    ::-webkit-input-placeholder {}  /* webkit 内核浏览器 */
    :-moz-placeholder {}  /* ff4-18浏览器 */
    ::-moz-placeholder {}  /* ff19+浏览器 */
    :-ms-input-placeholder {}  /* IE内核浏览器 */
    
    input 修改光标颜色
    -webkit-caret-color: #ccc;
    caret-color: #ccc;
    
    文本换行
    <style>
        .s{
            width: 180px;
            padding: 10px;
            background-color: #46A0F0;
        }
    </style>
    <div>
        <div class="s">聪明聪明聪明聪明聪明聪明聪明聪明聪明聪明聪明聪明聪明聪明聪明</div>
        <div class="s">ffffffffffffffffffffffffffffffffffffffffffffffffff</div>
        <div class="s">asdf asdf asdf asdf asdf asdf fffffffffffffffffffffffff</div>
    </div>
    

    两种方法:

    1. word-wrap: normal | break-word
      word-wrap: normal
      word-wrap: break-word
    2. word-break: normal | break-all
      word-break: normal
      word-break: break-all
      方法对比(竖排相对于横排)
    word-wrap: normal word-wrap: break-word word-break: normal word-break: break-all
    word-wrap: break-word 1.中文同
    2.英文一个单词:不会独占一行,会换行
    3.英文多个单词:一行中最后一个单词不会被截断,会换行
    英文多个单词:一行中最后一个单词不会被截断
    word-break: break-all 英文多个单词:一行中最后一个单词会被截断 1.中文同
    2.英文一个单词:不会独占一行,会换行
    3.英文多个单词:一行中最后一个单词会被截断,会换行
    文字 n 行打点(不兼容ff)
    // 超出部分隐藏
    overflow: hidden;
    // 设置为 -webkit-box
    display: -webkit-box;
    // 设置垂直排列方式
    -webkit-box-orient: vertical;
    // 行数
    -webkit-line-clamp: n;
    
    文字单行打点
    <style>
        .nobr{
            display: block;
            width: 100%;
            overflow: hidden;
            text-overflow: ellipsis;
        }
    </style>
    <nobr class="nobr">一段很长的文字一段很长的文字一段很长的文字一段很长的文字</nobr>
    

    兼容性问题

    border-radius:

    只设置 input 左上左下 2px,右上右下不设置,浏览器中没问题、mx6手机浏览器没问题。iPhone5手机右上右下也会出现 2px 的圆角:解决右上右下要设置radius 为0;
    calc()translate() 方法要考虑兼容性:加上前缀:-webkit- ;(对应的前缀还有:-moz- -ms- -0-);

    input[type="button"]
    1. 当设置 disabled 属性为真时,ios会默认在样式上加一属性:opacity:0.4; 这会导致 android 和 ios 两端不一致。
      解决: input:disabled{opacity:1}
    flex布局

    ios8不支持 flex ,要加上兼容性前缀:-webkit-flex
    且用各种属性的时候也要在属性前添加,例如:

    -webkit-justify-content: space-between;
    -webkit-flex:1;
    
    input 内部光标高度兼容Safari浏览器

    input 光标高度:
    IE&Chrome&Firefox:不管该行有没有文字,光标高度与font-size大小一致。
    Safari:没有设置行高时,获取到焦点后,光标光标高度和font-size大小一致
    设置了行高时,获取到焦点后,光标和行高一致,输入内容后,光标高度为从行高顶部到文字底部
    所以不应该在input中设置行高

    IE 设置元素 z-index 但是元素仍会被底部文字或图片遮挡导致无法点击

    偶遇一神奇 bug:absolute 定位的元素 A 设置 z-index: 10; 并添加一点击事件,在chrome浏览器中无问题,在ie(版本已到ie10)中,点击 A 下面的文字和图片无反应,即A的z-index并没有将其下面的元素覆盖掉,但是设置 A 背景色后,A 却会遮挡住其下面的元素,因此想到设置 A 的 css: background-color: rgba(0,0,0,0),但是仍没有反应,因为浏览器会将这一颜色转换为 background-color: transparent; 这时我们将其改为background-color: rgba(255, 255, 255, 0); 这时 A 便将下面的元素完全覆盖,点击 A 的任意位置都能触发 A 的点击事件

    相关文章

      网友评论

        本文标题:css 积累

        本文链接:https://www.haomeiwen.com/subject/zhmonxtx.html