По умолчанию: цель с CSS

В C ++ следующая процедура будет производить все комбинации расстояния длины (сначала k) между диапазоном [первым, последним]:

#include <algorithm>

template <typename Iterator>
bool next_combination(const Iterator first, Iterator k, const Iterator last)
{
   /* Credits: Mark Nelson http://marknelson.us */
   if ((first == last) || (first == k) || (last == k))
      return false;
   Iterator i1 = first;
   Iterator i2 = last;
   ++i1;
   if (last == i1)
      return false;
   i1 = last;
   --i1;
   i1 = k;
   --i2;
   while (first != i1)
   {
      if (*--i1 < *i2)
      {
         Iterator j = k;
         while (!(*i1 < *j)) ++j;
         std::iter_swap(i1,j);
         ++i1;
         ++j;
         i2 = k;
         std::rotate(i1,j,last);
         while (last != j)
         {
            ++j;
            ++i2;
         }
         std::rotate(k,i2,last);
         return true;
      }
   }
   std::rotate(first,k,last);
   return false;
}

Его можно использовать следующим образом:

#include <string>
#include <iostream>

int main()
{
    std::string s = "12345";
    std::size_t comb_size = 3;
    do
    {
        std::cout << std::string(s.begin(), s.begin() + comb_size) << std::endl;
    } while (next_combination(s.begin(), s.begin() + comb_size, s.end()));

    return 0;
}

Это напечатает следующее:

123
124
125
134
135
145
234
235
245
345
16
задан BoltClock 30 March 2015 в 11:28
поделиться

2 ответа

Спонтанно я должен сказать, что единственное решение, которое я могу придумать, - это, к сожалению, используя JavaScript. Что-то вроде:

<script type="text/javascript">
  if (document.location.hash == "" || document.location.hash == "#")
    document.location.hash = "#updates-list";
</script>

РЕДАКТИРОВАТЬ:

Хорошо, есть решение CSS. Однако для этого требуется, чтобы запись по умолчанию # updates-list была помещена последней (после # updates-map и любых других вкладок, которые вы можете добавить):

.tab, .tab:target ~ #updates-list  {
  display: none;
}
#updates-list, .tab:target {
  display: block;
}
21
ответ дан 30 November 2019 в 21:10
поделиться

Думаю, вам нужно выбрать что-то вроде .tab_container: not (>: target)> .default , чтобы отобразить вкладку по умолчанию, когда никто не нацелен . Однако это невозможно, поскольку псевдокласс : not () принимает только простые селекторы (т.е. только : target , а не >: target , в котором если вы проверяете цель контейнера, а не дочерние элементы).

Я бы сделал одно из следующих действий:

  • Используйте Javascript, чтобы установить цель на первую вкладку при загрузке (или просто потребуйте, чтобы якорь присутствовал).

  • Добавьте определенный класс переопределения для первой активной вкладки и удалите его (снова с помощью Javascript) после первого переключения вкладки.

Первая альтернатива приведет к путанице с историей браузера, а вторая - немного больше к беспорядку кода. Я не могу сейчас придумать "идеального" решения. Может быть, вам лучше просто использовать Javascript в целом для обнаружения текущей цели, чтобы обеспечить совместимость с браузерами, отличными от CSS3, и решить эту конкретную проблему более понятным способом?

2
ответ дан 30 November 2019 в 21:10
поделиться