【问题标题】:Issue styling multi date event in a calendar with SCSS使用 SCSS 在日历中发布样式多日期事件
【发布时间】:2016-05-06 16:35:23
【问题描述】:

我正在尝试用 SCSS 和 HTML 构建一个日历,类似于:

我正在尝试为跨越多天的事件做出很好的表示。您可以看到我在作为多日期事件一部分的日期上使用 .long-event 类。问题是,我似乎无法正确地完成末端。在我的示例中,日期 1st - 3rd14th - 18th 被选为长事件,但第一个没有圆形结束,第三个(但第四个有)也没有,第 14 个有(这是正确的)但第 18 个没有(第二天又是错误的)下面是我所做的一个例子:

HTML:

<div id="calendar">
  <div class="date long-event">
    <p>01</p>
  </div>
  <div class="date long-event">
    <p>02</p>
  </div>
  <div class="date long-event">
    <p>03</p>
  </div>
  <div class="date">
    <p>04</p>
  </div>
  <div class="date">
    <p>05</p>
  </div>
  <div class="date">
    <p>06</p>
  </div>
  <div class="date">
    <p>07</p>
  </div>
  <div class="date">
    <p>08</p>
  </div>
  <div class="date">
    <p>09</p>
  </div>
  <div class="date">
    <p>10</p>
  </div>
  <div class="date">
    <p>11</p>
  </div>
  <div class="date">
    <p>12</p>
  </div>
  <div class="date">
    <p>13</p>
  </div>
  <div class="date long-event">
    <p>14</p>
  </div>
  <div class="date long-event">
    <p>15</p>
  </div>
  <div class="date long-event">
    <p>16</p>
  </div>
  <div class="date long-event">
    <p>17</p>
  </div>
  <div class="date long-event">
    <p>18</p>
  </div>
  <div class="date">
    <p>19</p>
  </div>
  <div class="date">
    <p>20</p>
  </div>
  <div class="date">
    <p>21</p>
  </div>
  <div class="date">
    <p>22</p>
  </div>
  <div class="date">
    <p>23</p>
  </div>
  <div class="date">
    <p>24</p>
  </div>
  <div class="date">
    <p>25</p>
  </div>
  <div class="date">
    <p>26</p>
  </div>
  <div class="date">
    <p>27</p>
  </div>
  <div class="date">
    <p>28</p>
  </div>
  <div class="date">
    <p>29</p>
  </div>
  <div class="date">
    <p>30</p>
  </div>
</div>

SCSS:

* {
  box-sizing: border-box;
}

#calendar {
  width: 300px;
  display: table;

  .date {
    display: inline-block;
    /* background: wheat; */
    padding: 10px;
    margin: 0;

    p {
      margin: 0;
      padding: 0;
    }
  }

  .long-event {
    background: orange;
  }

  // First date in range
  :not(.long-event) + .long-event {
    background: orange;
    border-radius: 50% 0 0 50%;
  }

  // Last date in range
  .long-event + :not(.long-event) {
    background: red;
    border-radius: 0 50% 50% 0;
  }
}

还有我所做的一个 jsFiddle:

https://jsfiddle.net/k0112tbd/6/

任何帮助将不胜感激,特别是如果您知道更好的方法。使用我计划使用的插件,我无法在事件的开头或结尾添加任何额外的类,所以我需要一些聪明的东西:)

安迪

【问题讨论】:

  • 你会用JS/jQuery吗?
  • 抱歉回复晚了,睡着了 ;) 是的,我将使用一个名为 clndr.js 的插件来构建它,以便可以使用 jQuery
  • 如果您可以使用 JS/jQuery,您可以将其他类(或样式)应用到个别日子,使用比单独使用 CSS 更强大的选择器。

标签: html css calendar sass


【解决方案1】:

不幸的是,在 CSS 中引入之前的同级选择器之前,这是不可能的。目前你最可靠的选择是 jQuery。

使用 jQuery,您可以为 .long-event 系列中的每一天添加一个类。

下面会在每个.long-event系列的最后一天添加一个.last的类:

$('.long-event + .date:not(.long-event)').prev().addClass('last');

然后可以使用您已有的 CSS 设置样式(使用新的选择器):

.last {
  background: red;
  border-radius: 0 50% 50% 0;
}

对于第二个问题,针对第一个.long-event,您可以添加一个额外的选择器:

:not(.long-event) + .long-event,
.long-event:first-child {
  background: orange;
  border-radius: 50% 0 0 50%;
}

其中的重要部分是.long-event:first-child,它将始终将圆角应用于日历中的第一个.long-event

如果你想在每个.long_event 的第一天坚持使用 jQuery:

$(':not(.long-event) + .long-event, .long-event:first-child').addClass('first');

然后:

.first {
  background: orange;
  border-radius: 50% 0 0 50%;
}

这是jsFiddle

【讨论】:

  • 好的,我现在和你在一起,这看起来不错。任何想法解决从月初开始的长事件的问题,在它之前没有元素?例如在我的 jsFiddle 上,1st-3rd 应该有 1 和 3 的上限,但它只有 3?
  • 更新了第二个问题的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多