当前位置:Gxlcms > css > 如何使用纯CSS实现一个足球场的俯视图(附源码)

如何使用纯CSS实现一个足球场的俯视图(附源码)

时间:2021-07-01 10:21:17 帮助过:11人阅读

本篇文章给大家带来的内容是关于如何使用纯CSS实现一个足球场的俯视图(附源码) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

效果预览

433498101-5b3840b9257c8_articlex.png

源代码下载

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,容器中包含场地,场地中再包含中线、中点、中圈、禁区、罚球点、罚球弧、球门区、角球区等元素:

  1. <div class="container">
  2. <div class="field">
  3. <span class="halfway-line"></span>
  4. <span class="centre-circle"></span>
  5. <span class="centre-mark"></span>
  6. <span class="penalty-area"></span>
  7. <span class="penalty-mark"></span>
  8. <span class="penalty-arc"></span>
  9. <span class="goal-area"></span>
  10. <span class="corner-arc"></span>
  11. </div>
  12. </div>

居中显示:

  1. body {
  2. margin: 0;
  3. height: 100vh;
  4. display: flex;
  5. align-items: center;
  6. justify-content: center;
  7. background: radial-gradient(sandybrown, maroon);
  8. }

定义容器尺寸:

  1. .container {
  2. width: 120em;
  3. height: 80em;
  4. background-color: green;
  5. font-size: 5px;
  6. }
  7. .container span {
  8. display: block;
  9. }

定义线型:

  1. .container {
  2. --line: 0.3em solid white;
  3. }

画出场地边线:

  1. .container {
  2. padding: 5em;
  3. }
  4. .field {
  5. width: inherit;
  6. height: inherit;
  7. border: var(--line);
  8. }

画出中线:

  1. .halfway-line {
  2. width: calc(120em / 2);
  3. height: 80em;
  4. border-right: var(--line);
  5. }

画出中圈:

  1. .field {
  2. position: relative;
  3. }
  4. .centre-circle {
  5. width: 20em;
  6. height: 20em;
  7. border: var(--line);
  8. border-radius: 50%;
  9. position: absolute;
  10. top: calc((80em - 20em) / 2);
  11. left: calc((120em - 20em - 0.3em) / 2);
  12. }

画出中点:

  1. .centre-mark {
  2. width: 2em;
  3. height: 2em;
  4. background-color: white;
  5. border-radius: 50%;
  6. position: absolute;
  7. top: calc(80em / 2 - 1em);
  8. left: calc(120em / 2 - 1em + 0.3em / 2);
  9. }

画出禁区:

  1. .penalty-area {
  2. width: 18em;
  3. height: 44em;
  4. border: var(--line);
  5. position: absolute;
  6. top: calc((80em - 44em) / 2);
  7. left: -0.3em;
  8. }

画出罚球点:

  1. .penalty-mark {
  2. width: 2em;
  3. height: 2em;
  4. background-color: white;
  5. border-radius: 50%;
  6. position: absolute;
  7. top: calc(80em / 2 - 1em);
  8. left: calc(12em - 1em);
  9. }

画出罚球弧:

  1. .penalty-arc {
  2. width: 20em;
  3. height: 20em;
  4. border: var(--line);
  5. border-radius: 50%;
  6. position: absolute;
  7. top: calc((80em - 20em) / 2);
  8. left: calc(12em - 20em / 2);
  9. }

隐藏罚球弧左侧弧线,只留右侧弧线:

  1. .field {
  2. z-index: 1;
  3. }
  4. .penalty-area {
  5. background-color: green;
  6. }
  7. .penalty-arc {
  8. z-index: -1;
  9. }

画出球门区:

  1. .goal-area {
  2. width: 6em;
  3. height: 20em;
  4. border: var(--line);
  5. position: absolute;
  6. top: calc((80em - 20em) / 2);
  7. left: -0.3em;
  8. }

画出角球区:

  1. .field {
  2. overflow: hidden;
  3. }
  4. .corner-arc::before,
  5. .corner-arc::after {
  6. content: '';
  7. position: absolute;
  8. width: 5em;
  9. height: 5em;
  10. border: 0.3em solid white;
  11. border-radius: 50%;
  12. --offset: calc(-5em / 2 - 0.3em);
  13. left: var(--offset);
  14. }
  15. .corner-arc::before {
  16. top: var(--offset);
  17. }
  18. .corner-arc::after {
  19. bottom: var(--offset);
  20. }

把 dom 中的子元素复制出一份,左右两侧各一份:

  1. <div class="container">
  2. <div class="field">
  3. <div class="left">
  4. <span class="halfway-line"></span>
  5. <span class="centre-circle"></span>
  6. <span class="centre-mark"></span>
  7. <span class="penalty-area"></span>
  8. <span class="penalty-mark"></span>
  9. <span class="penalty-arc"></span>
  10. <span class="goal-area"></span>
  11. <span class="corner-arc"></span>
  12. </div>
  13. <div class="right">
  14. <span class="halfway-line"></span>
  15. <span class="centre-circle"></span>
  16. <span class="centre-mark"></span>
  17. <span class="penalty-area"></span>
  18. <span class="penalty-mark"></span>
  19. <span class="penalty-arc"></span>
  20. <span class="goal-area"></span>
  21. <span class="corner-arc"></span>
  22. </div>
  23. </div>
  24. </div>

右侧的样式与左侧相同,只需要水平翻转即可:

  1. .right {
  2. position: absolute;
  3. top: 0;
  4. left: 50%;
  5. transform: rotateY(180deg);
  6. }

大功告成!

相关推荐:

如何使用纯CSS实现蝴蝶标本的展示框效果

如何使用纯CSS实现Windows启动界面的动画效果

以上就是如何使用纯CSS实现一个足球场的俯视图(附源码)的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行