Рассматривайте несколько смежных элементов как один элемент, не оборачивая их в другой элемент

#css

Вопрос:

У меня есть <ul> то,что я не контролирую (реагирую), и я хочу поставить рамку и обвести некоторые из них рамкой.

В принципе, у меня есть:

 <ul>
  <li>Results...</li>
  <li><</li>
  <li>1</li>
  <li>2</li>
  <li>></li>
  <li>Something else</li>
</ul>
 

Скриншот: введите описание изображения здесь

И я хочу, чтобы они были завернуты вот так:

введите описание изображения здесь

Проблема, как я уже сказал, заключается в том, что у меня нет контроля над фактическим элементом и тем, как он отображается, поэтому я не могу повторить его с div помощью s, и я хочу обернуть все li элементы, кроме первого и последнего.

Текущий HTML-это то, как компонент отображает его :

 <ul class="ant-pagination">
  <li class="ant-pagination-total-text">Results...</li>
  <li class="ant-pagination-prev"><</li>
  <li class="ant-pagination-item">1</li>
  <li class="ant-pagination-item">2</li>
  <li class="ant-pagination-next">></li>
  <li class="ant-pagination-options">Dropdown with options about setting table page size</li>
</ul>
 

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

 .ant-pagination {
  justify-content: center;
} 

.ant-pagination > li:last-child {
  order: 1;
  margin-left: 20px;
}

.ant-pagination > li:first-child {
  order: 2;
  margin: 0 auto;
}

.ant-pagination > li:not(:first-child):not(:last-child) {
  order: 3;
}
 

Этот CSS переупорядочил элементы так, как мне нужно, чтобы они были:

введите описание изображения здесь

Конечно, у меня есть дополнительный CSS-стиль в дополнение к этому.

.ant-pagination > li:not(:first-child):not(:last-child) этот селектор нацелен на элементы, на которые мне нужно нацелиться и которые я хочу завернуть.

В сущности, мне нужно сделать:

 <ul>
  <li>Results...</li>
  <div class="li-wrapper">
    <li><</li>
    <li>1</li>
    <li>2</li>
    <li>></li>
  </div>
  <li>Something else</li>
</ul>

.li-wrapper {
  border: 1px solid black;
}
 

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

1. Какие существующие CSS и HTML, с которыми вы работаете, имеют отношение к этому конкретному компоненту?

2. @DavidsaysreinstateMonica Я добавил больше информации в этот пост. Спасибо.

3. Можете ли вы использовать JavaScript для изменения компонента, потому что, хотя границу можно подделать, было бы проще — и, возможно, более семантически корректно — сгруппировать номера страниц в потомке <ol> .

4. @Роб, я никогда не говорил, что это так, я просто пытался проиллюстрировать, что я пытаюсь сделать.

Ответ №1:

 ul li {
  padding: 4px;
  max-width: 16px;
}

ul li:not(:first-child, :last-child) { 
  border-left: 1px solid #000;
  border-right: 1px solid #000;
}

ul li:nth-last-child(2) {
  border-bottom: 1px solid #000;
}

ul li:nth-child(2) {
  border-top: 1px solid #000;
} 
 <ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
  <li>6</li>
  <li>7</li>
</ul> 

Может использоваться :не селектор CSS, например:

 ul li:not(:first-child, :last-child) { 
  color: red;
}
 

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

1. Я могу нацелиться на них, я не могу обернуть их всех в обертку, вот что я пытаюсь сделать. Граница вокруг ВСЕХ них рассматривается как единый элемент.

2. Может быть, ты хочешь, чтобы все было так? Я только что обновил приведенный выше фрагмент, вы можете попробовать.

Ответ №2:

Извините, что плохо понял, но я не уверен, что вы имели в виду, говоря, что у вас нет контроля над элементами, но затем вы применили CSS к этим элементам. В любом случае, не будет ли простой стиль границ и отступов в вашей ant-pagination работе?

 .ant-pagination {
  background: 1px solid black;
  //or whatever padding the design says
  padding: 10px;
} 
 

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

1. .муравьиная разбивка на страницы-это список отверстий <ul>, я хочу применить границу только вокруг элементов в середине списка без первого и последнего дочернего элемента, и поскольку они не находятся рядом друг с другом, у них также есть радиус границы и так далее, их нужно как-то завернуть в другой компонент