Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Вопрос к организации простейшего TreeView / 5 сообщений из 5, страница 1 из 1
31.05.2019, 18:15
    #39820960
ValGer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос к организации простейшего TreeView
Понадобилось дерево TreeView. В поиске набрёл на очень простую реализацию, правда, потом потерял сайт и пока найти не могу.
Пример дерева показан на рисунке (см. ниже). Основой как обычно, является список <ul>, а узлы реализованы тегом input. Вот код:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    <ul>
        <li>
            <input type="checkbox" id="chk1"><label for="chk1">Здесь подпункты</label>
            <ul>
                <li>
                    <input type="checkbox" id="chk2"/><label for="chk2">Тоже можно раскрыть</label>
                    <ul>
                        <li>Пункт 1_1</li>
                        <li>Пункт 1_2</li>
                    </ul>
                </li>
                <li>Не раскрывается</li>
            </ul>
        </li>
        <li>Здесь нет подпунктов</li>
    </ul>



Ничего хитрого!
Вот CSS
Код: css
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
    <style type="text/css">
        li, ul {
            list-style: none;
            margin: 0;
            padding: 0;
            overflow: hidden;
        }

            li ul {
                margin-left: 16px;
                height: 0px;
            }

            li input {
                display: none;
            }

                li input:checked ~ ul {
                    height: auto;
                }

        /*Это квадратик с плюсиком +, когда нижележащий список свёрнут*/
        input + label:before {
            content: "";
            display: inline-block;
            height: 16px;
            width: 16px;
            background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAIAAAAmzuBxAAAACXBIWXMAAAsSAAALEgHS3X78AAAAkElEQVQYlXWOvRWDQAyDv/DYK2wQSro8OkpGuRFcUjJCRmEE0TldCpsjPy9qzj7Jki62Pgh4vnqbbbEWuN+use/PlArwHccWGg780psENGFY6W4YgxZIAM339WmT3m397YYxxn6aASslFfVotYLTT3NwcuTKlFpNR2sdEak4acdKeafPlE2SZ7sw/1BEtX94AXYTVmyR94mPAAAAAElFTkSuQmCC) no-repeat 0px 5px;
        }

        /* Это минус в квадратике -, когда нижележащий список раскрыт */
        input:checked + label:before {
            background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAIAAAAmzuBxAAAACXBIWXMAAAsSAAALEgHS3X78AAAAeklEQVQYlX2PsRGDMAxFX3zeK9mAlHRcupSM4hFUUjJCRpI70VHIJr7D8BtJ977+SQ9Zf7isVG16WSQC0/D0OW/FqoBlDFkIVJ2xAhA8sI/NHbcYiFrPfI0fGklKagDx2F4ltdtaM0J9L3dxcVxi+zv62E+MwPs7c60dClRP6iug7wUAAAAASUVORK5CYII=) no-repeat 0px 5px;
        }
    </style>



Длиннющие url для background задают квадратики с плюсиком и минусом, когда нижележащие узлы свёрнуты или развёрнуты. Никакие библиотеки jQuery не подключены - страница работает без них!!!

Всё работает замечательно! Но вот проблема - хочу узнать свёрнут или развёрнут узел, то есть что стоит в квадратике + или -. Но как это сделать не понимаю.
Смущает в стилях запись:
input:checked + label:before { ... }
Вроде бы нет такого псевдокласса :checked ! Такое имеется в jQuery, но здесь jQuery отсутствует, а без этой конструкции работа нарушается.
Как быть?
С уважением ВВГ
...
Рейтинг: 0 / 0
31.05.2019, 20:08
    #39821008
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос к организации простейшего TreeView
...
Рейтинг: 0 / 0
31.05.2019, 22:34
    #39821042
SQLPowerUser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос к организации простейшего TreeView
ValGer,
А можно ещё проще, без псевдоэлемента :before  
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
<!DOCTYPE html>
<html>
<head>
<title>Дерево без javascript</title>
<style>
* {font:14px Arial;}
input {display:none;}
li, ul{box-sizing:border-box; list-style:none; margin:0; padding:0; overflow:hidden;}
li {padding-left:16px;}
li ul{height:0;}
li label {
  height:20px;
  line-height:20px;
  padding-left:16px;
  cursor:pointer;
  background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAIAAAAmzuBxAAAACXBIWXMAAAsSAAALEgHS3X78AAAAkElEQVQYlXWOvRWDQAyDv/DYK2wQSro8OkpGuRFcUjJCRmEE0TldCpsjPy9qzj7Jki62Pgh4vnqbbbEWuN+use/PlArwHccWGg780psENGFY6W4YgxZIAM339WmT3m397YYxxn6aASslFfVotYLTT3NwcuTKlFpNR2sdEak4acdKeafPlE2SZ7sw/1BEtX94AXYTVmyR94mPAAAAAElFTkSuQmCC) no-repeat 2px 2px;
}
li input:checked ~ ul {height:auto;}
li input:checked + label{
  background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAIAAAAmzuBxAAAACXBIWXMAAAsSAAALEgHS3X78AAAAeklEQVQYlX2PsRGDMAxFX3zeK9mAlHRcupSM4hFUUjJCRpI70VHIJr7D8BtJ977+SQ9Zf7isVG16WSQC0/D0OW/FqoBlDFkIVJ2xAhA8sI/NHbcYiFrPfI0fGklKagDx2F4ltdtaM0J9L3dxcVxi+zv62E+MwPs7c60dClRP6iug7wUAAAAASUVORK5CYII=) no-repeat 2px 2px;
}
</style>
</head>
<body>
<p style="color:#444;">Дерево без javascript. Раскрыть уровень можно не только по знаку плюсика, но и просто щелкнув по тексту. </p>
<ul>
  <li>
    <input type="checkbox" id="chk1_1"><label for="chk1_1">Малкольм Мерлин</label>
    <ul>
      <li>
        <input type="checkbox" id="chk1_1_1"><label for="chk1_1_1">Ты подвел этот город</label>
        <ul>
          <li>
            <input type="checkbox" id="chk1_1_1_1"><label for="chk1_1_1_1">И как это я умудрился?</label>
            <ul>
              <li>Предприятие.</li>
              <li>Я его остановлю.</li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>
    <input type="checkbox" id="chk2_1"><label for="chk2_1">Кто же убил Сару Лэнс?</label>
    <ul>
      <li>
        <input type="checkbox" id="chk2_1_1"><label for="chk2_1_1">Варианты зрителей</label>
        <ul>
          <li>Тея Куин</li>
          <li>Малкольм Мерлин</li>
          <li>Слейд Уилсон</li>
          <li>По приказу А.Р.Г.У.С.А</li>
        </ul>
      </li>
      <li>
        <input type="checkbox" id="chk2_2_1"><label for="chk2_2_1">Что нам показали в 9 серии</label>
        <ul>
          <li>Тея Куин, под влиянием Малкольма</li>
          <li>Но по логике очень не сходится</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>
</body>
</html>

...
Рейтинг: 0 / 0
01.06.2019, 08:36
    #39821087
ValGer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос к организации простейшего TreeView
SQLPowerUser,

Прямо замечательно, спасибо большое!
...
Рейтинг: 0 / 0
03.06.2019, 16:15
    #39821808
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос к организации простейшего TreeView
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<!doctype html>
<html lang="en">
<head>
	<meta charset="utf-8"/>
	<title>Details example</title>
	<style>details div details {margin-left: 2em;}</style>
</head
<body>
<details>
	<summary>Animals</summary>
	<div>
		<details>
			<summary>Dogs</summary>
			<ul>
				<li>Bobik</li>
				<li>Juchka</li>
			</ul>
		</details>
		<details>
			<summary>Cats</summary>
			<ul>
				<li>Vaska</li>
				<li>Tishka</li>
			</ul>
		</details>
	</div>
</details>
</body>
</html>
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Вопрос к организации простейшего TreeView / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]