zoukankan      html  css  js  c++  java
  • 实现微信聊天的尖角图片样式

    参考连接 http://www.jianshu.com/p/f77f54720202,不过我感觉他这里实现的不是很完美,因为三角是继承的整个图片,所以做了一些更改

    效果如下,哈哈在safari里一放大明显能看出来怎么弄的,不过下面两种方式兼容性都不好,最好让UI出图扣出这个效果

    第一种实现方式

    如上图,方式是一个透明三角和两个矩形去覆盖图片右侧内容,不过这样会是原本图片右侧的两个border-radius失效,然后再弄两个圆弧盖住右上角和右下角。。感觉有点傻,在android上还有兼容性问题,代码如下,效果如下图

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <style>
     6 .container{
     7     height: 100px;
     8     float: left;
     9     position: relative;
    10 }
    11 .container img{
    12     height: 100px;
    13     border-radius: 6px;
    14 }
    15 .container:after{
    16     content: ''; 
    17     position: absolute; 
    18     top: 24px; 
    19     right: -14px;
    20     border: solid #fff; 
    21     border-width: 14px; 
    22     border-left-color: transparent; 
    23     background: inherit; 
    24     background-size: auto; 
    25     background-clip: border-box; 
    26     background-origin: border-box;
    27 }
    28 .container .top{
    29     width: 14px;
    30     height: 24px;
    31     position: absolute;
    32     top: 0;
    33     right: 0;
    34     background: #fff;
    35 }
    36 .container .bottom{
    37     position: absolute;
    38     width: 14px;
    39     height: 62px;
    40     top: 52px;
    41     right: 0;
    42     background: #fff;
    43 }
    44 .container .top_left_circle{
    45     width: 12px;
    46     height: 12px;
    47     background-color: transparent;
    48     border-radius: 50%;
    49     border-left: 6px solid transparent;
    50     border-right: 6px solid transparent;
    51     border-bottom: 6px solid transparent;
    52     border-top: 6px solid #fff;
    53     position: absolute;
    54     top: -6px;
    55     right: 8px;
    56     transform: rotate(45deg);
    57 }
    58 .container .bottom_left_circle{
    59     width: 12px;
    60     height: 12px;
    61     background-color: transparent;
    62     border-radius: 50%;
    63     border-left: 6px solid transparent;
    64     border-right: 6px solid transparent;
    65     border-bottom: 6px solid #fff;
    66     border-top: 6px solid transparent;
    67     position: absolute;
    68     bottom: -6px;
    69     right: 8px;
    70     transform: rotate(-45deg);
    71 }
    72 </style>
    73 </head>
    74 <body>
    75 <div class="container">
    76     <img src="http://pic136.nipic.com/file/20170727/18708972_230433430000_2.jpg">
    77     <div class="top_left_circle"></div>
    78     <div class="top"></div>
    79     <div class="bottom_left_circle"></div>
    80     <div class="bottom"></div>
    81 </div>
    82 </body>
    83 </html>

    然后,就想到了第二种实现方式,

    这种方式是放左右两个图片,左边图片有div容器负责border-radius,并且左边图片把右边(三角形高度的)宽度隐藏;右边图片定位到右侧并剪切成(三角形底边的宽,三角形高的长)的矩形,见到那来说就是将两张图片拼成原来的图片,然后裁剪和用三角形遮盖。
    这里不用裁剪也行可以把右侧的图片也加div容器,不过好像会麻烦点,图片如下,代码如下

    两张图片拼成原图

    右侧图片裁剪

    三角形覆盖

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <style>
     6 body{
     7     padding: 20px;
     8 }
     9 .container{
    10     height: 100px;
    11     float: left;
    12     position: relative;
    13 }
    14 .container img{
    15     height: 100px;
    16 }
    17 .container:after{
    18     content: ''; 
    19     position: absolute; 
    20     top: 24px; 
    21     right: -14px;
    22     border: solid #fff; 
    23     border-width: 14px; 
    24     border-left-color: transparent; 
    25     background: inherit; 
    26     background-size: auto; 
    27     background-clip: border-box; 
    28     background-origin: border-box;
    29 }
    30 .container .leftDiv{
    31     border-radius: 6px;
    32     overflow: hidden;
    33     height: 100px;
    34     width: 129px;
    35     margin-right: 14px;
    36 }
    37 .container .rightImg{
    38     -webkit-clip-path: inset(24px 0 48px 128px);
    39     clip-path: inset(24px 0 48px 128px);
    40     position: absolute;
    41     right: 0;
    42     top: 0;
    43 }
    44 </style>
    45 </head>
    46 <body>
    47 <div class="container">
    48     <div class="leftDiv">
    49         <img src="http://pic136.nipic.com/file/20170727/18708972_230433430000_2.jpg">
    50     </div>
    51     <img class="rightImg" src="http://pic136.nipic.com/file/20170727/18708972_230433430000_2.jpg">
    52 </div>
    53 </body>
    54 </html>
  • 相关阅读:
    day02_1spring3
    day01_2spring3
    动态代理的介绍
    day04_1hibernate
    day03_2hibernate
    Oracle11gR2安装完成后不手动配置监听的使用方法
    css的样式和选择符的优先权
    调用css时,link和@import url的区别
    jquery 获取和修改img标签的src属性
    正则表达式实现6-10位密码由数字和字母混合组成
  • 原文地址:https://www.cnblogs.com/nightfallsad/p/7521688.html
Copyright © 2011-2022 走看看