如何通过 CSS 创建一个一侧有角度且圆角的盒子?
P粉068174996
P粉068174996 2023-08-25 19:46:29
0
1
375
<p>我目前发现自己需要制作这样的东西。</p> <p>我的第一个想法是使用clip-path,但是圆角很难拉下来,而且当按钮因其内容而改变宽度时很难保持22.5度。</p> <p>所以我最终将每个按钮制作为两个 <em>div</em>,其中一个 div 倾斜 22.5 度并与常规矩形 div 重叠。然后我为两者添加了边框半径。</p> <p><br /></p> <pre class="brush:css;toolbar:false;">body { line-height: 0; font-size: 16px; background-color: black; } .cta-button-group { display: flex; gap: 2rem; align-items: center; } .button-angular-wrapper-left { display: flex; isolation: isolate; position: relative; height: 40px; width: fit-content; } .button-angular-wrapper-left .button-angular-main { border-radius: 7px 0 0 7px; height: 100%; display: inline-grid; place-items: center; padding-inline: 8px 16px; margin-right: 13px; transition: background-color 50ms; } .button-angular-wrapper-left .button-angular-slant { border-radius: 0 7px 7px 0; height: 100%; width: 24px; position: absolute; right: 0; top: 0; bottom: 0; z-index: -1; transition: background-color 50ms; } .button-angular-wrapper-left .button-angular-slant.back-slash { transform: skewX(22.5deg); } .button-angular-wrapper-left .button-angular-slant.forward-slash { transform: skewX(-22.5deg); } .button-angular-wrapper-left.button-angular-color-solid-white .button-angular-main, .button-angular-wrapper-left.button-angular-color-solid-white .button-angular-slant { background: white; border: 3px solid white; color: blue; } .button-angular-wrapper-left.button-angular-color-solid-white .button-angular-main { border-right: none; } .button-angular-wrapper-left.button-angular-color-solid-white .button-angular-slant { border-left: none; } .button-angular-wrapper-right { display: flex; isolation: isolate; position: relative; height: 40px; width: fit-content; } .button-angular-wrapper-right .button-angular-main { border-radius: 0 7px 7px 0; height: 100%; display: inline-grid; place-items: center; padding-inline: 8px 16px; margin-left: 13px; } .button-angular-wrapper-right .button-angular-slant { border-radius: 7px 0 0 7px; height: 100%; width: 24px; position: absolute; left: 0; top: 0; bottom: 0; z-index: -1; } .button-angular-wrapper-right .button-angular-slant.back-slash { transform: skewX(22.5deg); } .button-angular-wrapper-right .button-angular-slant.forward-slash { transform: skewX(-22.5deg); } .button-angular-wrapper-right.button-angular-color-outline-white .button-angular-main, .button-angular-wrapper-right.button-angular-color-outline-white .button-angular-slant { border: 3px solid white; } .button-angular-wrapper-right.button-angular-color-outline-white .button-angular-main { border-left: none; } .button-angular-wrapper-right.button-angular-color-outline-white .button-angular-main .icon-call { color: white; } .button-angular-wrapper-right.button-angular-color-outline-white .button-angular-main .cta-text { color: white; } .button-angular-wrapper-right.button-angular-color-outline-white .button-angular-slant { border-right: none; }</pre> <pre class="brush:html;toolbar:false;">&lt;div class="cta-button-group"&gt; &lt;div class="button-angular-wrapper-left button-angular-color-solid-white" href=""&gt; &lt;div class="button-angular-main"&gt; &lt;span class="cta-text"&gt; Learn More Today &lt;/span&gt; &lt;/div&gt; &lt;div class="button-angular-slant back-slash"&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="button-angular-wrapper-right button-angular-color-outline-white" href=""&gt; &lt;div class="button-angular-main"&gt; &lt;span class="cta-text tel-link-no"&gt; 1800-1-5555 &lt;/span&gt; &lt;/div&gt; &lt;div class="button-angular-slant back-slash"&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;</pre> <p><br /></p> <p>CodePen:https://codepen.io/katylar/pen/yLRjKaO</p> <p>它有效,但并不完美。我注意到某些浏览器在某些分辨率下会出现明显的伪影和奇怪的角/边缘。</p> <p>有什么好的解决办法吗?这不涉及面具(我总是很难使用面具,尺寸方面)?</p>
P粉068174996
P粉068174996

membalas semua(1)
P粉928591383

我已经用伪元素尝试过这种方法。该形状的左侧是一个 ::before 元素,为了实现悬停效果,我将按钮和伪元素上的特定边设为不可见,并更改了特定角的边框半径。

.button {
  color: white;
  background-color: black;
  text-align: center;
  text-transform: uppercase;
  padding: 5px 10px;
  margin: 11px;
  display: inline-block;
  border-radius: 4px;
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
  border: 2px solid black;
  -ms-transform: skewX(-20deg);
  -webkit-transform: skewX(-20deg);
  transform: skewX(-20deg);
}

.button-left::before {
  content: " ";
  display: block;
  position: absolute;
  top: -2px;
  left: -12px;
  z-index: -10;
  background-color: black;
  width: 20px;
  height: 100%;
  -ms-transform: skewX(20deg);
  -webkit-transform: skewX(20deg);
  transform: skewX(20deg);
  border-radius: 4px;
  border: 2px solid black;
}

.button-left:hover {
  background: rgba(0,0,0,0);
  box-sizing: border-box;
  border: 2px solid black;
  border-left: 2px solid rgba(0,0,0,0);
  color: black;
  border-top-left-radius: 0;
}

.button-left:hover::before {
  border-right: 2px solid rgba(0,0,0,0);
  background: rgba(0,0,0,0);
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}

.button-content {
  -ms-transform: skewX(20deg);
  -webkit-transform: skewX(20deg);
  transform: skewX(20deg);  
  display: inline-block;
}
<div class="button button-left">
  <span class="button-content">Slanted Button</span>
</div>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!