【问题标题】:How to create multiple divs around text如何围绕文本创建多个 div
【发布时间】:2018-11-06 20:44:05
【问题描述】:

我正在尝试在 span 周围放置一些 div,但在获取文本的高度和宽度时遇到了问题。我不使用盒子阴影,因为它们将在动画中使用。这是一个带有picture 的链接,我希望它看起来如何。 Here 是当前的代码。

我尝试了多种方法,包括具有多个相同的跨度,但我不能包含 ::after 代码,因为这会使我的代码变得很奇怪并且具有 .mid 和 .max 宽度,但这也搞砸了我的 ::after 代码和转换。

:root {
  --txt-color: #fff;
  --txt-box-bg: #424242;
  --main-bg: #000;
  --transparent: transparent;

  /* front page title text */
  --main-front-color: #e84118;
  --second-front-color: #fbc531;
  --third-front-color: #00a8ff;
}


* {
  margin: 0px;
  padding: 0px;
}
/* Text */
.head-text {
  font-family: "IBM Plex Sans", sans-serif;
  color: var(--txt-color);
}

.main-text {
  font-family: "IBM Plex Mono" monospace;
  color: var(--txt-color);
}

.bold {
  font-weight: bold;
}

.normal {
  font-weight: normal;
}

.light {
  font-weight: lighter;
}

/* Allgin */
.center {
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

/* classes */
.front-page {
  background-color: var(--main-bg);
}

.full-page {
  background-size: cover;
  height: 100vh;
}

/* IDs */
#title-text {
  position: absolute;
  display: inline-block;

  background-clip: text;
  color: transparent;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  white-space: nowrap;


  background-image: linear-gradient(#000,#000);
  background-size: 100% 100%;
  background-position: right;
  background-repeat: no-repeat;

  transition: 1s all;
  font-weight: bold;
  text-align: center;
  font-size: 90px;
  -webkit-text-stroke: 2px var(--main-front-color);
  animation: stroke-rainbow 13s linear infinite;
  z-index: 2;
}

#title-text::after {
  content: '';
  display: block;
  width: 0;
  height: 4px;
  background: var(--txt-color);
  transition: 1s all;
  animation: stroke-rainbow 13s linear infinite;
}

#title-text:hover {
  background-size: 0% 100%;
}

#title-text:hover::after {
  width: 100%;
}

@keyframes stroke-rainbow {
  0% {
    border-color: var(--main-front-color);
    -webkit-text-stroke-color: var(--main-front-color);
    background-color: var(--main-front-color);
    #title-text::after {

    }
  }
  25% {
    border-color: var(--second-front-color);
    -webkit-text-stroke-color: var(--second-front-color);
    background-color: var(--second-front-color);
  }
  50% {
    border-color: var(--third-front-color);
    -webkit-text-stroke-color: var(--third-front-color);
    background-color: var(--third-front-color);
  }
  75% {
    border-color: var(--second-front-color);
    -webkit-text-stroke-color: var(--second-front-color);
    background-color: var(--second-front-color);
  }
  100% {
    border-color: var(--main-front-color);
    -webkit-text-stroke-color: var(--main-front-color);
    background-color: var(--main-front-color);
  }
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://fonts.googleapis.com/css?family=IBM+Plex+Mono:400,400i|IBM+Plex+Sans:100,100i,400,400i,700,700i" rel="stylesheet">
    <title>Portfolio</title>
  </head>
  <body>
    <!-- Full page intro -->
    <div class="front-page full-page">
      <span id="title-text" class="center head-text">Hi</span>
      </div>
    </div>
  </body>
</html>

【问题讨论】:

  • 酷!你尝试过什么来实现这一点,它产生了什么?将任何相关代码添加到您的问题中以显示您的努力。
  • @rpm 首先,我尝试使用相同的文本和信息制作几个跨度,但它不起作用,很可能是因为我使用 ::after 代码使代码具有颜色过渡效果,我无法复制它,因为它会使文本全部混乱。我也试过一分钟。和马克斯。宽度,但这干扰了我的动画和 ::after 代码。

标签: html css


【解决方案1】:

您可以使用 flexbox 有效地做到这一点。使用一系列带有彩色边框的嵌套 div 创建一个容器 div。将文本放在最中心的 div 中。

HTML:

<div id="container">
  <div id="one">
    <div id="two">
      <div id="three">
        <div id="four">
          <div id="five">
            <div id="six">
              Hi!
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

CSS:

#container {
  margin: 0 auto;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 60vw;
  height: 100vh;
}

#one {
  display: flex;
  justify-content: center;
  align-items: center;
  border: 2px solid yellow;
  padding: 20px;
}

#two {
  display: flex;
  justify-content: center;
  align-items: center;
  border: 2px solid red;
  padding: 20px;
}

#three {
  display: flex;
  justify-content: center;
  align-items: center;
  border: 2px solid rebeccapurple;
  padding: 20px;
}

#four {
  display: flex;
  justify-content: center;
  align-items: center;
  border: 2px solid dodgerblue;
  padding: 20px;
}

#five {
  display: flex;
  justify-content: center;
  align-items: center;
  border: 2px solid lightgreen;
  padding: 20px;
}

#six {
  display: flex;
  justify-content: center;
  align-items: center;
  border: 2px solid brown;
  padding: 20px;
}

编辑:回想起来,在您的 HTML 中为每个带编号的 div(例如 #one、#two 等)分配一个类似 .colored-box 的共享类会更简洁,然后在您的 CSS 中为所有共享属性使用该类,这样您就不会重复您的代码。

HTML:

<div id="container">
  <div id="one" class="colored-box">
    <div id="two" class="colored-box">
      <div id="three" class="colored-box">
        <div id="four" class="colored-box">
          <div id="five" class="colored-box">
            <div id="six" class="colored-box">
              Hi!
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

CSS:

.colored-box {
      display: flex;
      justify-content: center;
      align-items: center;
      padding: 20px;
    }

#one {
      border: 2px solid yellow;
    }

#two {
      border: 2px solid red;
    }

【讨论】:

    猜你喜欢
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多