首页 > 解决方案 > 如何将一个类设置为div

问题描述

伙计们!我正在尝试将时间线功能添加到部分中,但我不明白为什么它不会离开而只停留在中心?对不起这么长的代码,但我不能只放一个到 jsfiidle 的链接。你看到代码有什么问题吗?

我的 html 看起来像:

<section class="timeline">
  <section class="container left">
    <article class="content">
      <h2>Year</h2>
      <p>Line 1</p>
      <p>Line 2</p>
    </article>
  </section>
  <section class="container right">
    <article class="content">
      <h2>Year</h2>
      <p>Line 1</p>
      <p>Line 2</p>
    </article>
  </section>

像这样的CSS:

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  word-wrap: break-word;
}

html,
body,
section,
article {
  height: 100%;
}
body {
  background-color: #474e5d;
}

/* ----- Sections ----- */

section {
  margin: 0.1em auto;
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  max-width: 960px;
}

/* --- Portfolio - timeline --- */

/* The actual timeline (the vertical ruler) */

.timeline {
  border: 1px solid green;
  position: relative;
  height: auto;
  overflow: hidden;
}

/* The actual timeline (the vertical ruler) */

.timeline::after {
  content: '';
  position: absolute;
  width: 6px;
  background-color: white;
  top: 0;
  bottom: 0;
  left: 50%;
  margin-left: -3px;
}

/* Container around content */

.container {
  border: 1px solid green;
  padding: 10px 40px;
  position: relative;
  background-color: inherit;
  width: 50%;
}

/* The circles on the timeline */

.container::after {
  content: '';
  position: absolute;
  width: 25px;
  height: 25px;
  right: -17px;
  background-color: white;
  border: 4px solid #FF9F55;
  top: 15px;
  border-radius: 50%;
  z-index: 1;
}

/* Place the container to the left */

.left {
  left: 0;
}

/* Place the container to the right */

.right {
  left: 50%;
}

/* Add arrows to the left container (pointing right) */

.left::before {
  content: " ";
  height: 0;
  position: absolute;
  top: 22px;
  width: 0;
  z-index: 1;
  right: 30px;
  border: medium solid white;
  border-width: 10px 0 10px 10px;
  border-color: transparent transparent transparent white;
  /* nuoli */
}

/* Add arrows to the right container (pointing left) */

.right::before {
  content: " ";
  height: 0;
  position: absolute;
  top: 22px;
  width: 0;
  z-index: 1;
  left: 30px;
  border: medium solid white;
  border-width: 10px 10px 10px 0;
  border-color: transparent white transparent transparent;
}

/* Fix the circle for containers on the right side */

.right::after {
  left: -16px;
}

/* The actual content */

.content {
  padding: 20px 30px;
  background-color: white;
  position: relative;
  border-radius: 6px;
}

https://jsfiddle.net/dx1heu56/

标签: htmlcss

解决方案


您必须考虑元素本身的宽度。.left要解决此问题,请.right分别为每个元素在 x 轴上添加一些平移。

/* Place the container to the left */

.left {
  right: 50%;
  transform: translateX(50%);  
}

/* Place the container to the right */

.right {
  left: 50%;
  transform: translateX(-50%);
}

在此处输入图像描述

对于移动设备,您可以删除transformleft百分比。

@media screen and (max-width: 600px) {
  .left,
  .right {
    transform: none;
    left: 0;
  }
}

在此处输入图像描述

演示

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  word-wrap: break-word;
}

html,
body,
section,
article {
  height: 100%;
}
body {
  background-color: #474e5d;
}

/* ----- Sections ----- */

section {
  margin: 0.1em auto;
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  max-width: 960px;
}

/* --- Portfolio - timeline --- */

/* The actual timeline (the vertical ruler) */

.timeline {
  border: 1px solid green;
  position: relative;
  height: auto;
  overflow: hidden;
}

/* The actual timeline (the vertical ruler) */

.timeline::after {
  content: '';
  position: absolute;
  width: 6px;
  background-color: white;
  top: 0;
  bottom: 0;
  left: 50%;
  margin-left: -3px;
}

/* Container around content */

.container {
  border: 1px solid green;
  padding: 10px 40px;
  position: relative;
  background-color: inherit;
  width: 50%;
}

/* The circles on the timeline */

.container::after {
  content: '';
  position: absolute;
  width: 25px;
  height: 25px;
  right: -17px;
  background-color: white;
  border: 4px solid #FF9F55;
  top: 15px;
  border-radius: 50%;
  z-index: 1;
}

/* Place the container to the left */

.left {
  right: 50%;
  transform: translateX(50%);  
}

/* Place the container to the right */

.right {
  left: 50%;
  transform: translateX(-50%);
}

/* Add arrows to the left container (pointing right) */

.left::before {
  content: " ";
  height: 0;
  position: absolute;
  top: 22px;
  width: 0;
  z-index: 1;
  right: 30px;
  border: medium solid white;
  border-width: 10px 0 10px 10px;
  border-color: transparent transparent transparent white;
  /* nuoli */
}

/* Add arrows to the right container (pointing left) */

.right::before {
  content: " ";
  height: 0;
  position: absolute;
  top: 22px;
  width: 0;
  z-index: 1;
  left: 30px;
  border: medium solid white;
  border-width: 10px 10px 10px 0;
  border-color: transparent white transparent transparent;
}

/* Fix the circle for containers on the right side */

.right::after {
  left: -16px;
}

/* The actual content */

.content {
  padding: 20px 30px;
  background-color: white;
  position: relative;
  border-radius: 6px;
}

/* Media queries - Responsive timeline on screens less than 600px wide */

@media screen and (max-width: 600px) {
  /* Place the timelime to the left */
  .timeline::after {
    left: 31px;
  }
  /* Full-width containers */
  .container {
    width: 100%;
    padding-left: 70px;
    padding-right: 25px;
  }
  /* Make sure that all arrows are pointing leftwards */
  .container::before {
    left: 60px;
    border: medium solid white;
    border-width: 10px 10px 10px 0;
    border-color: transparent white transparent transparent;
  }
  .left,
  .right {
    transform: none;
    left: 0;
  }
  /* Make sure all circles are at the same spot */
  .left::after,
  .right::after {
    left: 15px;
  }
  /* Make all right containers behave like the left ones */
  .right {
    left: 0%;
  }
}
<section class="timeline">
  <section class="container left">
    <article class="content">
      <h2>Year</h2>
      <p>Line 1</p>
      <p>Line 2</p>
    </article>
  </section>
  <section class="container right">
    <article class="content">
      <h2>Year</h2>
      <p>Line 1</p>
      <p>Line 2</p>
    </article>
  </section>
</section>

jsFiddle


推荐阅读