Movatterモバイル変換


[0]ホーム

URL:


  1. 面向开发者的 Web 技术
  2. CSS:层叠样式表
  3. CSS 参考
  4. Properties
  5. shape-outside

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in EnglishAlways switch to English

shape-outside

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2020年1月⁩.

* Some parts of this feature may have varying levels of support.

shape-outsideCSS 属性定义了一个可以是非矩形的形状,相邻的内联内容应围绕该形状进行包装。默认情况下,内联内容包围其边距框;shape-outside提供了一种自定义此包装的方法,可以将文本包装在复杂对象周围而不是简单的框中。

尝试一下

shape-outside: circle(50%);
shape-outside: ellipse(130px 140px at 20% 20%);
shape-outside: url(/shared-assets/images/examples/round-balloon.png);
shape-outside: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
<section>  <div>    <img                src="/shared-assets/images/examples/round-balloon.png"      width="150" />    We had agreed, my companion and I, that I should call for him at his house,    after dinner, not later than eleven o’clock. This athletic young Frenchman    belongs to a small set of Parisian sportsmen, who have taken up “ballooning”    as a pastime. After having exhausted all the sensations that are to be found    in ordinary sports, even those of “automobiling” at a breakneck speed, the    members of the “Aéro Club” now seek in the air, where they indulge in all    kinds of daring feats, the nerve-racking excitement that they have ceased to    find on earth.  </div></section>
.example-container {  text-align: left;  padding: 20px;}#example-element {  float: left;  width: 150px;  margin: 20px;}

语法

css
/* 关键字值 */shape-outside: none;shape-outside: margin-box;shape-outside: content-box;shape-outside: border-box;shape-outside: padding-box;/* 函数值 */shape-outside: circle();shape-outside: ellipse();shape-outside: inset(10px 10px 10px 10px);shape-outside: polygon(10px 10px, 20px 20px, 30px 30px);/* <url> 值 */shape-outside: url(image.png);/* 渐变值 */shape-outside: linear-gradient(45deg, rgba(255, 255, 255, 0) 150px, red 150px);/* 全局值 */shape-outside: initial;shape-outside: inherit;shape-outside: unset;

shape-outside 属性指定使用下面列表的值来定义浮动元素的浮动区域。这个浮动区域决定了行内内容(浮动元素)所包裹的形状。

none

该浮动区域不产生影响,行内元素以默认的方式包裹着该元素的 margin box。

<shape-box>

根据浮动元素的边缘(通过CSS box model 来定义)形状计算出浮动的区域。可能是margin-box,border-box,padding-box, 或者content-box。这个形状包括了由border-radius 属性制造出来的弧度(与background-clip 的表现类似)。

margin-box

定义一个由外边距的外边缘封闭形成的形状。这个形状的角的半径由相应的border-radiusmargin 的值决定。如果border-radius / margin 的比率大于等于1 , 那么这个 margin box 的角的弧度就是border-radius + margin ;如果比率小于1,那么这个 margin box 的角的弧度就是border-radius + (margin * (1 + (ratio-1)^3))

border-box

定义一个由边界的外边缘封闭形成的形状。这个形状遵循正常的边界外部圆角的形成规则。

padding-box

定义一个由内边距的外边缘封闭形成的形状。这个形状遵循正常的边界内部圆角的形成规则。

content-box

定义一个由内容区域的外边缘封闭形成的形状(译者:表述的不太好,就是被 padding 包裹的区域,在 chrome 控制台中的盒子模型图中的蓝色区域。)。每一个角的弧度取0border-radius - border-width - padding 中的较大值。

<basic-shape>

基于inset()circle()ellipse()polygon() 其中一个创造出来的形状计算出浮动区域。如果同时存在<shape-box>,那么会为<basic-shape> 方法定义一个参考盒,这个参考盒默认为margin-box

<image>

提取并且计算指定<image> 的 alpha 通道得出浮动区域(译者:即根据图片的非透明区域进行包裹)。就跟通过shape-image-threshold来定义一样。

备注:用户代理 必须使用由 HTML5 规范定义的 CORS-enabled fetch 方法来处理shape-outside 的值中的所有 URL。当捕获的时候,用户代理必须使用“匿名”模式来设置层叠样式表的 URL 的 referrer source 和设置所在文档的 URL 的 origin。如果这导致出现没有有效的备份图像这样的网络错误,产生的影响就跟指定了值none 一样。

正式语法

shape-outside =
none|
[<basic-shape>||<shape-box>]|
<image>

<shape-box> =
<visual-box>|
margin-box|
half-border-box

<image> =
<url>|
<image()>|
<image-set()>|
<cross-fade()>|
<element()>|
<gradient>

<visual-box> =
content-box|
padding-box|
border-box

<image()> =
image(<image-tags>?[<image-src>? ,<color>?]!)

<image-set()> =
image-set(<image-set-option>#)

<cross-fade()> =
cross-fade(<cf-image>#)

<element()> =
element(<id-selector>)

<image-tags> =
ltr|
rtl

<image-src> =
<url>|
<string>

<image-set-option> =
[<image>|<string>][<resolution>||type(<string>)]?

<cf-image> =
[<image>|<color>]&&
<percentage [0,100]>?

<id-selector> =
<hash-token>

插值

当在两个<basic-shape> 之间产生动画时,将会应用以下规则。shape 里的值将会被当成一个简单列表插入。插入列表的值的类型可能是<length><percentage>,或calc()。如果列表的值不是以上的几种类型,但是都相同的话(如在两个列表的相同位置找到了nonzero ),那些值会插入到列表中。

  • 两个形状必须使用同样的参考盒。
  • 如果两个形状都是ellipse()circle()类型,并且它们的 radii 都没有使用closest-sidefarthest-side 关键字,则将两个形状对应值之间的值插入到 shape 方法中。
  • 如果两个形状的类型都是inset(),则将两个形状对应值之间的值插入到 shape 方法中。
  • 如果两个形状都是polygon(),两个多边形之间有相同的定点数量并且<fill-rule> 相同,则将两个形状对应值之间的值插入到 shape 方法中。
  • 其余所有情况都不会发生插入。

示例

HTML

html
<div>  <div></div>  <div></div>  <p>    Sometimes a web page's text content appears to be funneling your attention    towards a spot on the page to drive you to follow a particular link.    Sometimes you don't notice.  </p></div>

CSS

css
.main {  width: 500px;}.left,.right {  width: 40%;  height: 12ex;  background-color: lightgray;}.left {  -webkit-shape-outside: polygon(0 0, 100% 100%, 0 100%);  shape-outside: polygon(0 0, 100% 100%, 0 100%);  float: left;  -webkit-clip-path: polygon(0 0, 100% 100%, 0 100%);  clip-path: polygon(0 0, 100% 100%, 0 100%);}.right {  -webkit-shape-outside: polygon(100% 0, 100% 100%, 0 100%);  shape-outside: polygon(100% 0, 100% 100%, 0 100%);  float: right;  -webkit-clip-path: polygon(100% 0, 100% 100%, 0 100%);  clip-path: polygon(100% 0, 100% 100%, 0 100%);}p {  text-align: center;}

Result

规范

Specification
CSS Shapes Module Level 1
# shape-outside-property

浏览器兼容性

参见

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp