Селекторы CSS не следуют тексту — странное поведение

#html #css #stylesheet

#HTML #css #таблица стилей

Вопрос:

У меня есть этот селектор css, который работает странно. Это для создания выделения круга вокруг текста. Но когда текст переходит к следующей строке, круг не следует за ним. Что я имею в виду, показано на изображении ниже,

Селектор

Как вы видите, в слове ‘Mongoose’ нет селектора, а селектор находится в строке выше. Это мой код SCSS,

 <div>
  front-end framework, <strong>Bootstrap</strong>, which is a front-end styling framework, 
  HTML and CSS. Vue.js can be used to make <strong>AJAX</strong> requests, make flexible 
  and stable websites. Vue.js makes axios requests to the server that is built upon Node.js. 
  <strong>ExpressJS</strong> is a library for Noe that includes a tonne of functions to 
  handle requests and send reponses back to front-ends. The database being used is MongoDB. 
  <strong>Mongoose</strong> is a javascript library that bridges the gap between mongo 
  shell commands and javascript. Furthermore, the web
</div>
 
 strong {
  position:relative;
  color: $color-grey-1 !important;
}

strong:before {
  content:"";
  z-index:-1;
  top:-0.1em;
  border-width: 3px;
  border-style:solid;
  border-color: $color-yellow;
  position:absolute;
  border-right-color:transparent;
  width:100%;
  height:1em;
  transform:rotate(2deg);
  border-radius:50%;
  padding:0.1em 0.25em;
  display: inline-block;
}
 

Это происходит каждый раз, когда слово на краю переходит к следующей строке. Может кто-нибудь сказать мне, что я могу сделать, чтобы предотвратить это, и пусть селектор всегда будет с текстом? Спасибо!

Комментарии:

1. Можете ли вы опубликовать фрагмент соответствующего HTML.

2. @AHaworth Не уверен, уместно ли это здесь, но я обновил вопрос, чтобы включить HTML!

3. @hrishikeshpaul Я знаю, что это не ваше точное требование, но поворот необходим? Если вы предпочитаете не использовать вращающуюся границу, вы можете использовать для элемента непосредственно border: сплошная 4px # 333; border-radius: 50%; border-right-color: прозрачный; отступ: 1px;

4. @oguzhancerit да, я делал это раньше. Но это делается для того, чтобы придать ему более «естественный» вид. Интересно, почему это не работает. Есть идеи?

Ответ №1:

Проблема заключалась в том, что внутри strong не использовался встроенный блок отображения. Вы можете попробовать сейчас

 strong {
    position:relative;
    color: grey !important;
  display: inline-block;
  
  }
  
  strong::before {
    
    content:"";
    z-index:-1;
    top:-0.1em;
    border-width: 3px;
    border-style:solid;
    border-color: yellow;
    position:absolute;
    border-right-color:transparent;
    width:100%;
    height: 1em;
    transform:rotate(2deg);
    border-radius:50%;
    padding:0.1em 0.25em;
   
  } 
 <div>
  front-end framework, <strong>Bootstrap</strong>, which is a front-end styling framework, 
  HTML and CSS. Vue.js can be used to make <strong>AJAX</strong> requests, make flexible 
  and stable websites. Vue.js makes axios requests to the server that is built upon Node.js. 
  <strong>ExpressJS</strong> is a library for Noe that includes a tonne of functions to 
  handle requests and send reponses back to front-ends. The database being used is MongoDB. 
  <strong>Mongoose</strong> is a javascript library that bridges the gap between mongo 
  shell commands and javascript. Furthermore, the web
</div> 

Ответ №2:

Логотип/::before напрямую не связан с основным элементом (содержит слово mongoose). возможно, вы могли бы попытаться принудительно поместить их в одну строку с width: max-content;

поэтому попробуйте добавить

strong { width: max-content; }

Комментарии:

1. я попробовал это с обычным текстом, который затем был принудительно помещен в одну строку, поэтому я предположил, что это сработало

2. Я попробовал ваш ответ на codepen, и он не работает