添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

CSS zoom 縮放、resize 手動調整尺寸

CSS 除了標準改變尺寸的樣式,也有一些較為特別的樣式屬性可以「改變尺寸」,分別是 zoom 和 resize,zoom 可以改變元素整體的尺寸,resize 則可以讓使用者手動拖拉改變指定元素尺寸,這篇教學會介紹這些樣式屬性的用法,還會分析 zoom 和 scale 的用法差異。

快速導覽:

  • 縮放 zoom
  • 手動調整尺寸 resize
  • 搭配教學影片一起閱讀,效果會更好! 歡迎大家訂閱 STEAM 教育學習網的 Youtube 頻道

    前往: https://www.youtube.com/@steam.oxxostudio

    下方範例使用不同的 div 呈現 zoom transform: scale() 的效果,特別注意當元素使用 zoom 會佔有實際空間,進而影響整體排版佈局 ,且縮放參考點為 左上角 ,而 transform: scale() 只有視覺效果, 並不佔有實際空間也不影響整體排版佈局 ,預設變形參考點為 中心點 ,此外,範例中也加入 hover 後的轉場效果, 使用 zoom 的元素並不會呈現轉場效果 ,就算搭配 @property 自訂屬性,也只能支援部分效果。

  • 參考: CSS @property 自訂屬性值
  • 線上展示: https://codepen.io/oxxo/pen/QwbbJgM
  • <!-- HTML 程式碼 -->
      <h2>不縮放</h2><h3>OXXO</h3>
      <h2 class="a">scale(2)</h2><h3>OXXO</h3>
      <h2 class="b">zoom:2</h2><h3>OXXO</h3>
      <h2 class="c">zoom:2</h2><h3>OXXO</h3>
    <!-- CSS 程式碼 -->
    <style>
      @property --c {
        syntax: "<number>";
        inherits: false;
        initial-value: 2;
      div {
        border: 2px solid #000;
        width: 250px;
        height: 120px;
        margin: 10px 100px;
      h2, h3 {
        margin: 0;
        border: 3px dashed red;
        background: #0a05;
        width: 200px;
        background: #f003;
        transition: 1s, 1s --c;        /* 轉場效果額外指定自訂屬性 --c */
      .a {transform: scale(2);}        /* 使用 scale() 放大兩倍 */
      .a:hover {transform: scale(1);}
      .b {zoom: 2;}                    /* 使用 zoom 放大兩倍 */
      .b:hover {zoom: 1;}
      .c {zoom: var(--c);}             /* 使用 zoom 搭配自訂屬性放大兩倍 */
      .c:hover {--c: 1;}
    </style>
    
  • 必需搭配「具有明確寬高」的區塊容器元素或「可置換元素」( 例如 divtextareaimgvideoiframe )。
  • 搭配元素的 overflow 屬性值不能是 visible ( 屬性值可為 auto、scroll 或 hidden )。
  • 調整尺寸會影響版面佈局。
  • 目前仍有部分瀏覽器不支援。
  • resize 具有下列屬性值:

    預設值,禁止調整大小 允許水平與垂直調整 horizontal vertical block 邏輯屬性,垂直排列時,等同於 vertical。 inline 邏輯屬性,水平排列時,等同於 horizontal。

    下方範例會使用三個 div,分別呈現「不能調整大小」、「已經設定但不能調整大小」和「設定後可以調整大小」的效果,特別注意使用 resize 之後會影響原本的版面佈局。

    線上展示:https://codepen.io/oxxo/pen/KwpprbR

    <!-- HTML 程式碼 -->
      <h2>不能手動調整尺寸</h2>
    <div class="a">
      <h2>設定 resize 但無法手動調整尺寸</h2>
    <div class="b">
      <h2>設定 resize 和 overflow,可手動調整尺寸</h2>
    <h3>看看我會不會被影響<h3>
    <!-- CSS 程式碼 -->
    <style>
      div {
        border: 2px solid #000;
        width: 220px;
        height: 100px;
        margin: 10px;
      h2 {margin: 0;}
        resize: both;  /* 因為 overflow 預設 visible,單純設定 resize 無法調整 */
        overflow: auto;
        resize: both;  /* 修改 overflow */
    </style>