# overflow

overflow 是 CSS 的简写属性,其设置了元素溢出时所需的行为——即当元素的内容太大而无法适应它的块级格式化上下文时。

# uni-app x 兼容性

Web Android iOS
4.0 3.9 4.11

# 浏览器兼容性

Chrome Edge Firefox Opera Safari IE
√( 1 ) √( 12 ) √( 1 ) √( 7 ) √( 1 ) √( 4 )

# 语法

overflow: [ visible | hidden | clip | scroll | auto ]{1,2};

# overflow 的属性值

名称 兼容性 描述
visible
暂时仅view组件支持visible,其他组件支持不支持
hidden
如果需要,内容将被裁减以适应边距(padding)盒。不提供滚动条,也不支持允许用户滚动(例如通过拖拽或者使用滚轮)。内容可以以编程的方式滚动(例如,通过设置 scrollLeft 等属性的值或 scrollTo() 方法), 因此该元素仍然是一个滚动的容器。
scroll
如果需要,内容将被裁减以适应边距(padding)盒。无论是否实际裁剪了任何内容,浏览器总是显示滚动条,以防止滚动条在内容改变时出现或者消失。打印机可能会打印溢出的内容。
auto
取决于用户代理。如果内容适应边距(padding)盒,它看起来与 visible 相同,但是仍然建立了一个新的块级格式化上下文。如果内容溢出,则浏览器提供滚动条。
clip
类似于 hidden,内容将以元素的边距(padding)盒进行裁剪。clip 和 hidden 之间的区别是 clip 关键字禁止所有滚动,包括以编程方式的滚动。该盒子不是一个滚动的容器,并且不会启动新的格式化上下文。如果你希望开启一个新的格式化上下文,你可以使用 display: flow-root 来这样做。

# 默认值

平台 默认值
uvue hidden

注意:W3C 默认值为:visible

# 示例

hello uni-app x

扫码体验(手机浏览器跳转到App直达页)

Template

Script

<template>
  <!-- #ifdef APP -->
  <scroll-view style="flex:1;">
  <!-- #endif -->
    <text style="font-size: 15px;">overflow=hidden效果子元素是view border圆角</text>
    <view class="backgroundview">
      <view class="box-hidden-border-radius">
        <view style="width: 50px; height: 150px; background-color: greenyellow;"></view>
      </view>
    </view>

    <text style="font-size: 15px;">overflow=hidden效果 子元素是view border边框</text>
    <view class="backgroundview">
      <view class="box-hidden-border-width">
        <view style="width: 50px; height: 150px; background-color: greenyellow;"></view>
      </view>
    </view>

    <text style="font-size: 15px;">overflow=visible效果 子元素是view border圆角</text>
    <view class="backgroundview">
      <view class="box-visible-border-radius">
        <view style="width: 50px; height: 150px; background-color: greenyellow;"></view>
      </view>
    </view>

    <text style="font-size: 15px;">overflow=visible效果 子元素是view border边框</text>
    <view class="backgroundview">
      <view class="box-visible-border-width">
        <view style="width: 50px; height: 150px; background-color: greenyellow;"></view>
      </view>
    </view>

    <view style="flex-grow: 1">
      <text style="font-size: 15px;">overflow=hidden效果 子元素是text</text>
      <view class="backgroundview">
        <view class="box-hidden-border-radius">
          <text class="text1">ABCDEFG</text>
        </view>
      </view>
      <text style="font-size: 15px;">overflow=visible效果 子元素是text</text>
      <view class="backgroundview">
        <view class="box-visible-border-radius">
          <text class="text1">ABCDEFG</text>
        </view>
      </view>

      <text style="font-size: 15px;">overflow=hidden效果 子元素是image</text>
      <view class="backgroundview">
        <view class="box-hidden-border-radius">
          <image style="width: 150px; height: 150px;" src="/static/uni.png"></image>
        </view>
      </view>
      <text style="font-size: 15px;">overflow=visible效果 子元素是image</text>
      <view class="backgroundview">
        <view class="box-visible-border-radius">
          <image style="width: 150px; height: 150px;" src="/static/uni.png"></image>
        </view>
      </view>
      <text style="font-size: 15px;">overflow=visible效果 子元素是view 父是scroll-view</text>
      <scroll-view class="backgroundview">
        <view class="box-visible-border-radius">
          <view style="width: 50px; height: 150px; background-color: greenyellow;"></view>
        </view>
      </scroll-view>

    </view>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>



<style>
  .backgroundview {
    width: 300px;
    height: 300px;
    margin-bottom: 20px;
    background-color: white;
    justify-content: center;
    align-items: center;
  }

  .box-hidden-border-radius {
    width: 100px;
    height: 100px;
    border-radius: 20px;
    overflow: hidden;
    background-color: green;
  }

  .box-hidden-border-width {
    width: 100px;
    height: 100px;
    border-width: 2px;
    border-style: solid;
    background-color: green;
  }

  .box-visible-border-radius {
    width: 100px;
    height: 100px;
    border-radius: 20px;
    overflow: visible;
    background-color: green;
  }

  .box-visible-border-width {
    width: 100px;
    height: 100px;
    border-width: 2px;
    border-style: solid;
    overflow: visible;
    background-color: green;
  }

  .text1 {
    font-size: 50px;
    lines: 1;
  }
</style>

# 参见

# Bug & Tips

  • Android平台 当元素设置 overflow = visible 后会扩大元素的渲染区域,元素渲染及内存占用存在性能消耗,应尽量避免设置 overflow = visible
  • Android平台 uni-app x 父元素设置 overflow = visible,子元素超出父元素的区域,无法正常响应touch、click事件 (4.13版本已修复该问题)
  • iOS平台 当元素四个边设置了不同值的圆角,overflow = visible 会无效,超过父元素会被裁剪
  • Android平台 当设置android-layer-typehardwaresoftware时,overflow: visible不生效。
  • Android平台 当元素设置 overflow = visible 后再动态修改该元素 opacity 透明度可能导致 overflow: visible 不生效