如何填补边框半径与背景颜色之间的间隙?

3
我从一个叫做frontendmentor的网站开始了这个前端挑战。我几乎完成了挑战,但是在这一部分卡住了。 我该如何解决这个问题?
这是包含.summary_results类的包装元素的outerHTML。
<article class = "summary" >
 < div class = "summary__results" > < h1 class = "summary__title" > Your Result < /h1>
<div class="summary__score">
   <p class="summary__finalscore">76</p >
   of 100 < /div>
   <p class="summary__descr"><span>Great</span > You scored higher than 65 % of the people who have taken these tests. < /p>
</div >
< div class = "summary__details" > < p class = "summary__subtitle" > Summary < /p>
<div class="summary__grades">
   <div class="summary__grade" style="background-color: var(--clr-primary-lightRed-100);">
      <p style="color: var(--clr-primary-lightRed-300);"><img src="assets/images / icon - reaction.svg " alt="
         itemicon ">Reaction</p>
      <p><span>80</span> / 100</p>
   </div>
   <div class="
      summary__grade " style="
      background - color: var (--clr - primary - orangeyYellow - 300);
      ">
      <p style="
         color: var (--clr - primary - orangeyYellow - 600);
         "><img src="
         assets / images / icon - memory.svg " alt="
         itemicon ">Memory</p>
      <p><span>92</span> / 100</p>
   </div>
   <div class="
      summary__grade " style="
      background - color: var (--clr - primary - greenTeal - 200);
      ">
      <p style="
         color: var (--clr - primary - greenTeal - 400);
         "><img src="
         assets / images / icon - verbal.svg " alt="
         itemicon ">Verbal</p>
      <p><span>61</span> / 100</p>
   </div>
   <div class="
      summary__grade " style="
      background - color: var (--clr - primary - cobaltBlue - 200);
      ">
      <p style="
         color: var (--clr - primary - cobaltBlue - 500);
         "><img src="
         assets / images / icon - visual.svg " alt="
         itemicon ">Visual</p>
      <p><span>72</span> / 100</p>
   </div>
</div>
<button class="
   button ">Continue</button></div></article>


这是我的CSS文件:
/* Font import */
@import url("https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@500;700;800&display=swap");

:root {
  /* Colors */
  --clr-primary-lightRed-300: hsl(0, 100%, 67%);
  --clr-primary-lightRed-100: hsla(0, 100%, 67%, 0.1);

  --clr-primary-orangeyYellow-600: hsl(39, 100%, 56%);
  --clr-primary-orangeyYellow-300: hsla(39, 100%, 56%, 0.1);

  --clr-primary-greenTeal-400: hsl(166, 100%, 37%);
  --clr-primary-greenTeal-200: hsla(166, 100%, 37%, 0.1);

  --clr-primary-cobaltBlue-500: hsl(234, 85%, 45%);
  --clr-primary-cobaltBlue-200: hsla(234, 85%, 45%, 0.1);

  --clr-white-100: hsl(0, 0%, 100%);
  --clr-paleBlue-100: hsl(221, 100%, 96%);
  --clr-lavender-200: hsl(241, 100%, 89%);
  --clr-lavender-500: hsl(241, 100%, 79%);
  --clr-grayBlue-700: hsl(224, 30%, 27%);

  /* Color Gradients */
  --clr-slateBlue-400: hsl(252, 100%, 67%);
  --clr-royalBlue-400: hsl(241, 81%, 54%);

  /* Circle Color Gradients */
  --clr-violetBlueCircle-500: hsla(256, 72%, 46%, 1);
  --clr-persianBlueCircle-500: hsla(241, 72%, 46%, 0);

  /* Font Family */
  --ff-base: "Hanken Grotesk", sans serif;

  /* Font Weight */
  --fw-regular: 500;
  --fw-bold: 700;
  --fw-extrabold: 800;
}

/*  1. Use a more-intuitive box-sizing model. */
*,
*::before,
*::after {
  box-sizing: border-box;
}

/*  2. Remove default margin  */
* {
  margin: 0;
}

/*
  Typographic tweaks!
  3. Add accessible line-height
  4. Improve text rendering
*/
body {
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

/*  5. Improve media defaults */
img,
picture,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
}

/*  6. Remove built-in form typography styles */
input,
button,
textarea,
select {
  font: inherit;
}

/*  7. Avoid text overflows */
p,
h1,
h2,
h3,
h4,
h5,
h6 {
  overflow-wrap: break-word;
}

/*  8. Create a root stacking context */
#root,
#__next {
  isolation: isolate;
}

/* General Styling */
body {
  font-family: var(--ff-base);
  font-weight: var(--fw-regular);
  font-size: 0.875rem;
  color: var(--clr-lavender-200);

  min-height: 100dvh;
  display: grid;
}

@media (min-width: 600px) {
  body {
    place-content: center;
  }
}

/* Button Styling */
.button {
  cursor: pointer;
  border: none;
  border-radius: 2rem;
  padding: 0.55rem 0rem;
  background-color: var(--clr-grayBlue-700);
  color: var(--clr-white-100);
  margin: var(--content-spacing);
}

.button:is(:hover, :focus) {
  background-color: var(--clr-royalBlue-400);
}

/* Summary Styling */
.summary {
  --content-padding: 1.7rem;
  --content-spacing: 1rem;
  display: grid;
  max-width: 600px;
}

.summary__results {
  padding: var(--content-padding);
  gap: var(--content-spacing);

  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  text-align: center;

  background-image: linear-gradient(
    var(--clr-slateBlue-400),
    var(--clr-royalBlue-400)
  );

  border-bottom-right-radius: 2rem;
  border-bottom-left-radius: 2rem;
}

.summary__title {
  color: var(--clr-lavender-200);
  font-weight: var(--fw-regular);
}

.summary__score {
  display: grid;
  place-content: center;
  height: 10rem;
  width: 10rem;
  border-radius: 50%;

  font-weight: var(--fw-bold);

  background-image: linear-gradient(
    var(--clr-violetBlueCircle-500),
    var(--clr-persianBlueCircle-500)
  );
  color: var(--clr-lavender-500);
}

.summary__finalscore {
  font-size: 4rem;
  font-weight: var(--fw-extrabold);
  color: var(--clr-white-100);
}

.summary__descr {
  margin-left: 3rem;
  margin-right: 3rem;
}

.summary__descr span {
  display: block;
  font-size: 1.5rem;
  color: var(--clr-white-100);
}

.summary__details {
  padding: var(--content-padding);
  display: grid;
}

.summary__subtitle {
  font-size: 1.2rem;
  font-weight: var(--fw-bold);
  color: black;
}

.summary__grades {
  margin: var(--content-spacing);
  display: flex;
  flex-direction: column;
  gap: 0.8rem;
}

.summary__grades div {
  display: flex;
  justify-content: space-between;
}

.summary__grades span {
  color: black;
  font-weight: var(--fw-bold);
}

.summary__grades p:first-of-type {
  display: flex;
  gap: 1rem;
  font-weight: var(--fw-bold);
}

.summary__grade {
  padding: 0.8rem;
  border-radius: 0.5rem;
}

/* Responsive design for larger screen > 600 px (also calling it after all styles for mobiles have been set so i dont get specificity problems*/
@media (min-width: 600px) {
  .summary {
    grid-template-columns: 1fr 1fr;
  }

  .summary__results {
    border-radius: 2rem;
  }

  .summary__details {
    border-top-right-radius: 1rem;
    border-bottom-right-radius: 1rem;
    box-shadow: 10px 10px 15px 5px rgba(0, 0, 0, 0.2);
  }

  .summary__descr {
    margin-left: 1.5rem;
    margin-right: 1.5rem;
  }
}


这是结果 结果 我该如何做才能使边框半径上下的角落填充为白色,使其看起来像下面的图片一样?

enter image description here

这里有一个演示:demo

1
CSS与由React生成的HTML一起工作;虽然我相信你的React和JSX很美,但它对于这个问题几乎没有任何关系。你能否编辑一下,展示生成的HTML和CSS的结果?在我们看到你的代码之前,我们无法确切地说如何进行修正或改进。 - undefined
你所说的“显示生成的HTML”是什么意思?难道不就是我正在渲染的JSX吗?编辑:哦,我不知怎么又把JSX代码放到CSS部分了,我已经更新了,对此表示抱歉! - undefined
1
右键单击您想要帮助的元素的包装器,点击“检查元素”和“复制外部HTML”,以获取包含相关DOM节点的节点。虽然HTML遵循JSX所制定的模板(参见“*[mcve]”),但我们既不需要全部内容(请参阅“[mcve]*”),也无法访问填充JSX生成的HTML的各种变量,因此我们将得到不同或损坏的响应。我们可以伪造变量,可以填写各种元素的文本/内容,但如果您只是复制并粘贴生成的HTML,对于每个人来说都更容易和更准确。 - undefined
我用summary_results div的outerHTML更新了问题 - undefined
1
谢谢!好的,你的HTML有一个问题(在JSX中也明显,只是我没仔细看):一个<p>元素不能嵌套在另一个元素内部。另外,所有这些CSS都与这个单独的组件/HTML片段相关吗?真心感谢你提供的HTML,尽管我一直在烦你,但我正在努力帮你撰写一个更好的问题,希望能得到更好的答案。顺便说一下,根据你发布的代码,一个demo似乎无法重现你的结果。 - undefined
非常感谢你在这个过程中帮助我。我再次更新了outerHTML,包括了所有所需的内容,并添加了一个演示。 - undefined
1个回答

2
你可以将box-shadow属性设置给.summary类,而不是.summary__details类。这样应该可以解决你遇到的问题。

这个有点解决了问题,但是我不想在左侧面板上有阴影,只想在右侧面板上有阴影。 - undefined
你可以调整盒子阴影属性。当你右键点击并选择检查元素时,在.summary元素内部的样式中,你可以找到你设置的盒子阴影属性。在"box-shadow: "后面,你会看到一个小紫色图标(两个矩形),点击它并调整盒子阴影属性。你会看到X和Y偏移,因为你只想在元素的右侧看到盒子阴影,你可以通过拖动蓝色圆圈或手动输入偏移来设置它。 - undefined
我无法按照我想要的方式使其正常工作,但它似乎还是能工作(此解决方案还可以使摘要详细元素的边缘变得锐利,而不是弯曲的,我该如何修复这个问题,因为我已经应用了边框半径)。你能解释一下这是如何工作的吗? - undefined
1
你可以尝试这样写:box-shadow: 20px 8px 15px 0px rgb(0 0 0 / 16%); - undefined
是的,这解决了阴影的问题,但又引入了一个新的问题,使得角落变回了边缘,而不是保持曲线。 - undefined
1
我明白了,你只需要将 border-top-right-radius: 1rem; border-bottom-right-radius: 1rem; 移动到 .summary 类中来解决这个问题。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接