如何在带有边框半径的形状周围包裹文字? [英] How to wrap text around a shape with border-radius?

查看:82
本文介绍了如何在带有边框半径的形状周围包裹文字?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以使用 CSS 自动换行内容,以免剪切掉border-radius溢出的文本?

Is it possible to auto text wrap with CSS the content to avoid cutting-of the text overflowed by a border-radius?

此刻,我的文字被隐藏在框中:

At this moment, my text is hidden out the box:

p {
  border-bottom-right-radius: 100%;
  border: 1px solid;
  padding: 1rem;
  overflow: hidden;
}

<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>

我想像这样包装文字:

推荐答案

更新

这是使用flexbox的更好版本,它将避免设置任何固定高度,但需要一个额外的容器.缺点是部分文本可能仍会溢出.我们需要相应地调整高度以避免这种情况:

Here is a better version using flexbox that will avoid setting any fixed height but require an extra container. The drawback is that part of the text may still overflow. We need to adjust the height accordingly to avoid this:

p {
  overflow: hidden;
  text-align: justify;
  margin: 0;
  height:135%; /* we need to adjust this */
  border-bottom-right-radius: 100%;
  border: 1px solid;
}
p:after {
  content:"last";
  color:red;
}

p::before {
  content: "";
  float: right;
  width: 100%;
  height: 100%;
  shape-outside: radial-gradient(farthest-side at top left, transparent 99%, #fff 100%);
}

.box {
  display: flex;
}

<div class="box">
  <div>
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
      in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. At vero eos et accusamus et iusto odio dignissimos ducimus
      qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum
      quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem
      quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur
      aut perferendis doloribus asperiores repellat.
    </p>
  </div>
</div>

外部形状可以做到这一点.唯一的缺点是它需要固定的高度才能工作:

Shape-outside can do this. The only drawback is that it requires a fixed height to work:

p {
  border-bottom-right-radius: 100%;
  border: 1px solid;
  padding: 1rem;
  overflow: hidden;
  height:350px;
  text-align:justify;
}
p::before {
  content:"";
  float:right;
  width:100%;
  height:100%;
  shape-outside:radial-gradient(farthest-side at top left,transparent 98%,#fff 100%);
}

<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>

您可以使用vw单位近似完美的高度,但由于新形状的性质,仍然不容易.

You can approximate the perfect height using vw unit but still not easy due to the nature of the new shape.

p {
  border-bottom-right-radius: 100%;
  border: 1px solid;
  padding: 1rem;
  overflow: hidden;
  height:calc(500px - 20vw);
  text-align:justify;
}
p::before {
  content:"";
  float:right;
  width:100%;
  height:100%;
  shape-outside:radial-gradient(farthest-side at top left,transparent 98%,#fff 100%);
}

<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>

基于内容的固定宽度/高度将提供完美的结果:

A fixed width/height based on the content will give a perfect result:

p {
  border-bottom-right-radius: 100%;
  border: 1px solid;
  padding: 1rem;
  overflow: hidden;
  height:310px;
  width:700px;
  text-align:justify;
}
p::before {
  content:"";
  float:right;
  width:100%;
  height:100%;
  shape-outside:radial-gradient(farthest-side at top left,transparent 98%,#fff 100%);
}

<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>

这里和两侧都弯曲的想法:

Here and idea to have curve on both sides:

p {
  border-radius:0 0 1000px 1000px;
  border: 1px solid;
  padding: 1rem;
  overflow: hidden;
  height:310px;
  width:700px;
  text-align:justify;
}
p::before {
  content:"";
  float:left;
  width:50%;
  height:100%;
  shape-outside:radial-gradient(farthest-side at top right,transparent 98%,#fff 100%);
}
p span::before {
  content:"";
  float:right;
  width:50%;
  height:100%;
  shape-outside:radial-gradient(farthest-side at top left,transparent 98%,#fff 100%);
}

<p><span></span>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>

相关文章(我写过),您可以在其中找到更多奇特的形状: https://css-challenges.com/custom-text-shape/

Related article (I wrote) where you can find more fancy shapes: https://css-challenges.com/custom-text-shape/

这篇关于如何在带有边框半径的形状周围包裹文字?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆