html - 如何在 CSS 中设置特定子标签的样式

标签 html css

我正在设计聊天布局的样式,但卡在了这一点上。这是我的片段

https://jsfiddle.net/9ce1d8or/

#chatbox {
  background: #f7f7f7;
  padding: 10px;
}
#chatbox #chatmessages {
  max-height: 400px;
  overflow: auto;
}
#chatbox #chatmessages .messages {
  margin-bottom: 20px;
}
#chatbox #chatmessages .messages .message {
  padding: 10px;
  border-radius: 25px;
}
#chatbox #chatmessages .messages .message.message-received {
  background: green;
  margin: 5px 0;
  max-width: 40%;
}
#chatbox #chatmessages .messages .message.message-sent {
  float: right;
  margin: 5px 0;
  background: #ccc;
  max-width: 40%;
}

.clearfix::after {
  content: '';
  display: block;
  clear: both;
}
<div id="chatbox">
    <div id="chatmessages" class="">
         <div class="messages" >
                   <div class="product"></div>
                  <div class="message message-received">Hello </div>
                  <div class="message message-sent">Hello mrs </div>
                  <div class="clearfix"></div>  
                  <div class="message message-sent">Hello mrs </div>    
                  <div class="message message-received">Hello </div>
                  <div class="message message-received">Hello </div>
         </div><!--.messages-->
      <div class="messages" >
                  <div class="product"></div>
                  <div class="message message-received">Hello </div>
                  <div class="message message-sent">Hello mrs </div>
                  <div class="clearfix"></div>  
                  <div class="message message-sent">Hello mrs </div>    
                  <div class="message message-received">Hello </div>
                  <div class="message message-received">Hello </div>
         </div><!--.messages-->
    </div>
</div>

我想为每个第一个设置样式 .message-received这是 .messages 的子级元素。尝试了所有伪选择器,但没有按预期工作。我努力了 .messages .message-received::first-of-type , ::nth-of-type(2) 标记样式是否适合我想要的样式?或者我的CSS做错了?您的建议将会非常有帮助。

最佳答案

first-child selector (如名称所示)选择元素的第一个子元素 - 在您的情况下,这将是类 .product 的元素。 您的标记中没有 .message-received 类的第一个子级,这就是为什么该选择器不适用于您的情况。

要选择特定类的第一个元素,您需要执行一些小技巧。首先使用第一类样式对该类的所有元素进行样式设置,然后使用 adjacent sibling selector ~ 恢复所有兄弟元素的样式。 :

#chatbox #chatmessages .messages .message-received {
  background: red;
}
#chatbox #chatmessages .messages .message-received ~ .message-received {
  background: green;
}

这样,该类的第一个元素将被设置样式:

#chatbox {
  background: #f7f7f7;
  padding: 10px;
}

#chatbox #chatmessages {
  max-height: 400px;
  overflow: auto;
}

#chatbox #chatmessages .messages {
  margin-bottom: 20px;
}

#chatbox #chatmessages .messages .message {
  padding: 10px;
  border-radius: 25px;
}

#chatbox #chatmessages .messages .message.message-received {
  background: red;
  margin: 5px 0;
  max-width: 40%;
}

#chatbox #chatmessages .messages .message.message-sent {
  float: right;
  margin: 5px 0;
  background: #ccc;
  max-width: 40%;
}

.clearfix::after {
  content: '';
  display: block;
  clear: both;
}

#chatbox #chatmessages .messages .message-received ~ .message-received {
  background: green;
}
<div id="chatbox">
  <div id="chatmessages" class="">
    <div class="messages">
      <div class="product"></div>
      <div class="message message-received">Hello </div>
      <div class="message message-sent">Hello mrs </div>
      <div class="clearfix"></div>
      <div class="message message-sent">Hello mrs </div>
      <div class="message message-received">Hello </div>
      <div class="message message-received">Hello </div>
    </div>
    <!--.messages-->
    <div class="messages">
      <div class="product"></div>
      <div class="message message-sent">Hello mrs </div>
      <div class="message message-received">Hello </div>
      <div class="clearfix"></div>
      <div class="message message-sent">Hello mrs </div>
      <div class="message message-received">Hello </div>
      <div class="message message-received">Hello </div>
    </div>
    <!--.messages-->
  </div>
</div>

关于html - 如何在 CSS 中设置特定子标签的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50027870/

相关文章:

html - 我可以在所有元素上使用内容可见性吗?

javascript - 保持div可以放大的大小

html - Django 没有加载 CSS?

html - LI 类中的图像

php - 使用 php 隐藏一个 Div

html - 纯 CSS 解决方案,用于在父项之间存在悬停间隙时保持子项显示

css - 如何在div中创建下拉菜单?

html - 如何让 div 位于另一个 div 的底部(Bootstrap)

html - 阻止img元素html溢出

javascript - 空间接口(interface) : animating containers back and forth to a sidebar