Page 197 - css揭秘
P. 197

动手试试才知道!
                                                  我们的第一个念头可能是列出两个 <img> 元素。但是,直接对一个
                                              <img> 元素应用 resize 看起来会很怪异,因为直接调整图片大小会导致其
                                              变形失真    1① 。如果用一个 <div> 作为它的容器,再对这个容器应用 resize
                                              属性,那就合理多了。于是,结构代码会变为:
                                                                                                         HTML
                                                  <div class="image-slider">
                                                      <div>
                                                          <img src="adamcatlace-before.jpg" alt="Before" />
                                                      </div>
                                                      <img src="adamcatlace-after.jpg" alt="After" />
                                                  </div>

                                                  接下来还需要添加一些 CSS,完成定位和设置尺寸的工作:


                                                  .image-slider {
                                                      position:relative;
                                                      display: inline-block;
                                                  }

                                                  .image-slider > div {
                                                      position: absolute;
                                                      top: 0; bottom: 0; left: 0;
                                                      width: 50%; /* 初始宽度 */
                                                      overflow: hidden; /* 让它可以裁切图片 */
                                                  }

                                                  .image-slider img { display: block; }

                                                  现在的效果如图 6-26 所示,但它还是静态的。如果手工修改宽度值,
                                              就可以模拟用户在调整大小时所能看到的各个阶段的效果。为了让它的宽度
                    图 6-26                    可以动态地根据用户的交互发生改变,我们就要请出 resize 属性了:
                    在加入了一些基本样式之后,这
                    个控件已经变得挺像那么回事儿                .image-slider > div {
                                                      position: absolute;
                    了,但我们暂时还不能调整上层
                                                      top: 0; bottom: 0; left: 0;
                    图片的宽度                             width: 50%;
                                                      overflow: hidden;
                                                      resize: horizontal;
                                                  }

                                                  虽然能看出的变化只有上层图片右下角的那个调节手柄(参见图
                                              6-27),但我们已经可以拖动这个手柄来随心所欲地调整上层图片的宽度
                                              了!不过,在稍作尝试之后,我们还是会发现一些缺点。

                                                     „ 可以把 <div> 的宽度拉伸到超过图片宽度的程度。
                                                     „ 调节手柄不容易辨认。



                                              ①  一旦 object-fit 和 object-position 得到浏览器的广泛支持,就不存在这个问题了。因为
                                                有了这两个属性,我们就可以像控制背景图像的缩放那样去控制图片的缩放了。



                  166   第 6 章 用户体验







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