Подскажите скрипт для подключения стиля одному элементу при условии что есть второй элемент

ЕСТЬ РЕШЕНИЕ InstantCMS 2.X
#1 24 марта 2025 в 13:36

Весь интернет перешерстил, в поисках скрипта. Есть при клике, при наведении и ТД. 

Мне нужно присвоить стили элементу 1

При условии что есть элемент 2 

Структура такая 

<div class=«element»>

    <div class=«element 1»>

    <div class=«element 2»>

</div>

#2 24 марта 2025 в 13:40

element 2 поставить первым в коде. При помощи order элемент element 2 визуально поместить вторым. CSS стилем + (плюс — смежный селектор) стилизовать как нужно.

#3 24 марта 2025 в 13:44

Если я правильно вас понял, то примерно так можно сделать:

  1. const element2 = document.querySelector('.element-2');
  2. const element1 = document.querySelector('.element-1');
  3.  
  4. if (element2) {
  5. element1.classList.add('ваш-класс');
  6. }

Но, если честно, не совсем понятна задача… Попробуйте мой js подключить на нужных вам страницах, должно сработать

Добавлено спустя 2 минуты
element 2 поставить первым в коде. При помощи order элемент element 2 визуально поместить вторым. CSS стилем + (плюс — смежный селектор) стилизовать как нужно.
Fuze

Да, отличное решение, теперь задача понятна. Happy, Fuze вероятно имел ввиду вот такое решение:

  1. <div class="element">
  2. <div class="element-2" style="order: 2">
  3.  
  4. </div>
  5.  
  6. <div class="element-1" style="order: 1">
  7.  
  8. </div>
  9. </div>
  10.  

Ну и в CSS как-то так:

  1. .element-2 + .element-1 {
  2. /* Стили, которые применятся при наличии element-2 перед element-1 */
  3. background-color: red;
  4. color: white;
  5. }
  6.  
Сегодня в 09:38
#4 24 марта 2025 в 13:48

Можно решить задачу двумя основными способами:

1. Использовать селектор `:has()`:

  1. css
  2. .element:has(.element2) .element1 {
  3. /* стили для element1 при наличии element2 */
  4. }
  5.  


   Но учитывайте, что поддержка `:has()` в разных браузерах пока неоднородна.

2. Добавлять класс при наличии второго элемента (через бэкенд или JS):

  1. html
  2. <div class="element has-to">
  3. <div class="element1">От 100000 руб</div>
  4. <div class="element2">до 200000 руб</div>
  5. </div>
  6.  
  7. css
  8. .element .element1 {
  9. /* стили по умолчанию */
  10. }
  11.  
  12. .element.has-to .element1 {
  13. /* стили, если есть element2 */
  14. }



Это самый надежный способ с точки зрения кросс-браузерности.

Если цель — просто разместить «От … до …» на одной строке, используйте `display: inline-flex; flex-wrap: nowrap;` или `white-space: nowrap;`, чтобы строка не переносилась.

#5 24 марта 2025 в 13:54
  1. <style>
  2. .element {
  3. display: flex;
  4. flex-direction: column-reverse;
  5. }
  6. .element2 + .element1 {
  7. color: red;
  8. }
  9. </style>
  10. <div class="element">
  11. <div class="element2">Второй</div>
  12. <div class="element1">Первый</div>
  13. </div>
  14. <hr>
  15. <div class="element">
  16. <div class="element2">Первый</div>
  17. </div>

Изображение

#6 24 марта 2025 в 14:54

 Fuze, .element2 + .element1 — этот принцип почему то не работает с классами полей. 

То что выше я описал элементы — это два поля. 

#7 24 марта 2025 в 19:07

element2 + .element1 — этот принцип почему то не работает с классами полей

Happy

Это как?)

developer.mozilla.org/ru/docs/Web/CSS/Next-sibling_combinator

#8 24 марта 2025 в 20:56

Может местами поменять?

.element .element1 + .element2 

Или так:

.element .element2 ~ .element1

#9 24 марта 2025 в 21:02

 Fuze, давайте на живом примере 

вот код реальный

Изображение

.pay_do +.pay {
      background:red;
  }

НЕ работает! или я что не правильно делаю?

#10 24 марта 2025 в 21:17

НЕ работает! или я что не правильно делаю?

Happy

+ плюс выбирает следующий элемент, в css вроде нет выборки предыдущего. только с помощью jquery

  1. if ($(".f_pay_do").prev().hasClass('f_pay')){
  2. $(".f_pay_do").prev().css("background", "red");
  3. }
#11 24 марта 2025 в 21:20

 My-InstantCMS.Ru, я так и думал.

Ваш скрипт работает, спасибо.

А Fuse Учить документацию 🤣 ( давно ждал этой возможности)

#12 24 марта 2025 в 21:28

 Fuze, давайте на живом примере 

Happy

Я вам живой пример выше дал. При помощи CSS свойства order или flex-direction: column-reverse на контейнере (display: flex тоже на контейнере) меняете местами, тем самым «обманываете» и второй становится первым. А после чего уже сработает плюс, т.к. второй станет первым.

#13 24 марта 2025 в 21:29
 Fuze, давайте на живом примере  Happy Я вам живой пример выше дал.
Fuze

Понял, тогда выше комментарий мой не читайте)))

#14 24 марта 2025 в 21:29

А Fuse Учить документацию 🤣 ( давно ждал этой возможности)

Happy

Ну да. Вы бы вникали что вам отвечают.

#15 24 марта 2025 в 22:43

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

Добавлено спустя 1 час

в add тоже жалко эти доп классы не видны. 

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожее в блогах

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.