Page 198 - css揭秘
P. 198

第一个问题是比较容易解决的。我们要做的就是把它的 max-width 指
                    定为 100%。不过第二个问题就稍稍有些复杂。不幸的是,目前还没有任何
                    标准的方法可以设置这个调节手柄的样式。有些渲染引擎特别为这个需求提
                    供了私有的伪元素(比如 ::-webkit-resizer),但不论是在兼容性方面,
                    还是在样式的灵活性方面,这个方式都有着不小的局限。面对山穷水尽的局
                    面,我们冒出了一个大胆的想法:用一个伪元素覆盖在调节手柄之上。这
                    一方面可以很方便地设置样式;另一方面,即使在不加 pointer-events:
                    none 的情况下,这个伪元素也不会干扰调节手柄的功能。因此,一个跨浏
                    览器的调节手柄美化方案只需要把一个假的调节手柄覆盖在它上面。让我们
                                                                                         图 6-27
                    来试试看吧:
                                                                                         我们的图片滑动控件已经可以发
                                                                                         挥它该有的作用了,但仍然存在
                        .image-slider > div::before {                                    一些问题
                            content: '';
                            position: absolute;
                            bottom: 0; right: 0;
                            width: 12px; height: 12px;
                            background: white;
                            cursor: ew-resize;
                        }


                        请注意 cursor:  ew-resize 这条声明:它提供了额外的自释性,可
                    以提示用户这个区域可以像调节手柄那样拖动。不过,我们不应该只依赖
                    鼠标光标提供唯一的自释性,因为这种自释性只有当用户与之交互时才是
                    可见的。
                                                                                         图 6-28
                        现在,我们的调节手柄会显示为一个白色的方块(参见图 6-28)。到了                               用一个伪元素覆盖上去,可以把
                    这一步,我们就可以尽情地对它设置样式了。比如说,如果我们想把它设置                                    调节手柄美化为一个白色的方块
                    为一个白色三角形,并且让它跟图片的边缘保持 5px 的间隙(参见图 6-29),
                    就可以这样写:

                        padding: 5px;
                        background:
                            linear-gradient(-45deg, white 50%, transparent 0);
                        background-clip: content-box;


                        最后还有一点改进的空间。我们可以对这两张图片应用 user-select:
                    none,这样即使用户在没有点中调节手柄的情况下拖动鼠标,也不会误选图
                    片。把所有想法综合到一起,最终的代码如下所示:
                                                                                         图 6-29
                        .image-slider {                                                  把这个假的调节手柄(实际上是个
                            position:relative;
                            display: inline-block;                                       伪元素)设置为一个三角形,并与
                        }                                                                图片的右下角保持 5px 的间隙

                        .image-slider > div {
                            position: absolute;
                            top: 0; bottom: 0; left: 0;
                            width: 50%;
                            max-width: 100%;



                                                                                   35 交互式的图片对比控件              167







          ඀ࠡ  JOEC
   193   194   195   196   197   198   199   200   201   202   203