【问题标题】:What does the + :not() mean in this case? [duplicate]在这种情况下 + :not() 是什么意思? [复制]
【发布时间】:2020-10-07 11:29:03
【问题描述】:

+:not() 选择器让我很困扰。这不是我的代码,但我想理解它。这是什么意思?

   .chat-segment-sent {
    text-align: right;
    position: relative;
    margin: 0 0 .5rem 3rem;
  }
 
 .chat-segment-sent.chat-start .chat-message {
    border-bottom-right-radius: 3px; 
  }

  .chat-segment-sent.chat-start + :not(.chat-end) .chat-message {
    border-bottom-right-radius: 3px;
    border-top-right-radius: 3px; 
  }

  .chat-segment-sent.chat-end .chat-message {
    border-top-right-radius: 3px; 
  }

  .chat-segment-sent .chat-message {
    background: #1dc9b7;
    color: white;
    text-align: left;
  }

方块的排列方式如下:

chat-segment chat-segment-get/send chat-start
     chat-message /
/
chat-segment chat-segment-get/send
     chat-message /
/
chat-segment chat-segment-get/send chat-end
     chat-message /
/

问题是我需要修复该代码。当我添加另一个中间扇区时,边框半径不适用于这个新块。

所以我的第二个问题是,我该如何开始考虑修复该代码以使其正常运行?

【问题讨论】:

  • 是的,但与 not() 结合是某种 - 直到某事 - 意义吗?
  • :not(<selector>) 是一个伪选择器,意思是它在锡上所说的 - 一个元素 not 匹配 <selector>。在这种情况下,相邻元素不具有 chat-end 类。
  • 是的,它应该适用于下面不是聊天结束的所有内容,但第二个问题仍未解决,我怎样才能添加无限数量的加号,而不仅仅是 div 下的一个......直到聊天结束据我了解,它仅适用于不是聊天结束的下一个块,但如果有的话,我需要下一个和下一个和下一个
  • 那么也许可以看到stackoverflow.com/q/11813465/3001761

标签: html css


【解决方案1】:

虽然您问题下方的 cmets 为您提供了有用的理论资源链接,但以下是实用的:

 .chat-segment-sent.chat-start + :not(.chat-end) .chat-message {

意思是:

  • 选择同时包含chat-segment-sentchat-start 类的元素
  • 紧随其后的是一个对等(非父非子)元素(属于/具有任何类/ID),该元素标记为chat-end 类。
  • 然后关注具有chat-message 类的元素,它是上述对等元素的子元素。

资源:

例子:

.chat-segment-sent.chat-start + :not(.chat-end) .chat-message {
    color:green;
    font-weight: bold;
    border-bottom: 1px solid #000;
    padding-top: 0.5rem;
}
<div class='chat-segment-sent chat-start'>
<div class='chat-message'>
  Hello 1
  </div>
</div>
<div class='chat-segment-sent chat-start'>
<div class='chat-message'>
  Hello 2
  </div>
</div>
<div class='chat-segment-sent chat-start'>
<div class='chat-message'>
  Hello 3
  </div>
</div>
<div class='chat-segment-sent chat-start'>
<div class='chat-message'>
  Hello 4
  </div>
</div>
<div class='chat-segment-sent chat-start'>
<div class='chat-message'>
  Hello 5
  </div>
</div>
<div class='chat-segment-sent chat-start chat-end'>
   <div class='chat-message'>END</div>
</div>
<div class='chat-segment-sent chat-start'>
<div class='chat-message'>
  Hello bonus
  </div>
</div>
<div class='chat-somethingelse'>
<div class='chat-message'>
  this element is highlighed because it is a sibling which does not contain the chat-end class.  
  </div>
</div>
<div class='chat-somethingelse chat-end'>
<div class='chat-message'>
  this element is not highlighted because it is a sibling but it does contain the chat-end class.  
  </div>
  <div>
     this element is not highlighted because it is not a neighbouring sibling. 
  </div>
</div>

【讨论】:

  • 谢谢,但是这仅适用于一个元素之后?或不是“聊天结束”类的许多元素?另一个问题是,如何将它应用于非“聊天结束”的对等点之后的许多块,这是否可能?
  • 本站包含此代码,您可以在这里测试:gotbootstrap.com/themes/smartadmin/4.5.0/… - 与此代码的聊天可在页面右侧标题中的星球上点击
  • 但是我还有一个问题,但也许在最后。
  • 我开始明白了,但有没有办法将所有兄弟姐妹应用到下一个?
  • @ActionMan 我已经更新了我的答案。 CSS 适用于符合条件且不包含 .chat-end 类的所有同级
猜你喜欢
  • 2020-04-04
  • 2017-03-28
  • 2016-08-26
  • 2014-10-27
  • 2019-10-15
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
相关资源
最近更新 更多