Pull to refresh

Пусть css ищет или база данных в HTML 2

Reading time5 min
Views5.7K
В прошлой статье я отказался от использования связки html + php + sql, оставив только html. Как и в прошлый раз, на html странице находится сразу все, что нам нужно, и остаётся только убрать лишнее, исходя из параметров поиска. Раньше мы это делали при помощи JavaScript, а теперь воспользуемся возможностями CSS.


Ну опять же стандартная заготовка страницы.

<!doctype html>
<html>
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8">
		<meta http-equiv="content-language" content="ru">
		<title>Поиск</title>
		<script src="search.js"></script>
		<link
			href="search.css"
			type="text/css"
			rel="stylesheet"
			charset="utf-8"
		>
		<style id="filter">
		</style>
	</head>
	<body>
		<table class="search">
			<tr>
				<th>Стиль:</th>
				<td>
					<select id="style">
						<option value="">любой</option>
						<option value="neoklas" id="neoklas">неоклассицизм</option>
						<option value="postmodern" id="postmodern">постмодерн</option>
						<option value="psevdomodern" id="psevdomodern">псевдомодерн</option>
						<option value="neogot" id="neogot">неоготика</option>
					</select>
				</td>
			</tr>
			<tr>
				<th>Материал стен:</th>
				<td>
					<select id="wall_material">
						<option value="">любой</option>
						<option value="kirpich" id="kirpich">кирпич</option>
						<option value="gazobeton" id="gazobeton">газобетон</option>
						<option value="karkas" id="karkas">деревянный каркас</option>
						<option value="derevo" id="derevo">дерево</option>
					</select>
				</td>
			</tr>
			<tr>
				<th>Этажность:</th>
				<td>
					<select id="floors">
						<option value="">любой</option>
						<option value="fl1" id="fl1">1</option>
						<option value="fl2" id="fl2">2</option>
						<option value="fl3" id="fl3">3</option>
					</select>
				</td>
			</tr>
			<tr>
				<td colspan="2">
					<input id="search" type="button" value="поиск" />
				</td>
			</tr>
		</table>
<!-- дома -->

		<div class="home whiteframe neoklas kirpich fl2">
			<a class="url" href="http://kirpich.example.com/#rust">
					<img class="image" src="http://kirpich.example.com/thmb/rust/rust_vid-1.jpg" alt=""/>
			</a>
			<div class="name">
				<a class="url" href="http://kirpich.example.com/#rust">
					«Руст»
				</a>
			</div>
			<div class="style">неоклассицизм</div>
			<div class="wall_material">керамический кирпич, утепленный минеральной ватой</div>
			<div class="square">165.5</div>
			<div class="living_space">86</div>
			<div class="floors">2</div>
		</div>
		
		<div class="home whiteframe postmodern gazobeton fl2">
			<a class="url" href="http://kirpich.example.com/#shater">
					<img class="image" src="http://kirpich.example.com/thmb/shater/shater_enter.jpg"  alt=""/>
			</a>
			<div class="name">
				<a class="url" href="http://kirpich.example.com/#shater">
					«Шатер»
				</a>
			</div>
			<div class="style">постмодерн</div>
			<div class="wall_material">газобетонные блоки</div>
			<div class="square">262</div>
			<div class="living_space">148.5</div>
			<div class="floors">2</div>
		</div>

		<div class="home whiteframe psevdomodern karkas fl1">
			<a class="url" href="http://karkas.example.com/#papirus">
					<img class="image" src="http://karkas.example.com/thmb/papirus/Papirus%20Vid-1.jpg"  alt="" title="«Папирус»"/>
			</a>
			<div class="name">
				<a class="url" href="http://karkas.example.com/#papirus">
					«Папирус»
				</a>
			</div>
			<div class="style">псевдомодерн</div>
			<div class="wall_material">утепленный деревянный каркас</div>
			<div class="square">142.3</div>
			<div class="living_space">77.9</div>
			<div class="floors">1</div>
		</div>
		
		<div class="home whiteframe neogot derevo fl3">
			<a class="url" href="http://derevo.example.com/#legenda">
					<img class="image" src="http://derevo.example.com/thmb/orehovo/orehovo.jpg"  alt="" title="«Легенда»"/>
			</a>
			<div class="name">
				<a class="url" href="http://derevo.example.com/#legenda">
					«Легенда»
				</a>
			</div>
			<div class="style">неоготика</div>
			<div class="wall_material">дерево</div>
			<div class="square">436.7</div>
			<div class="living_space">166.2</div>
			<div class="floors">3</div>
		</div>

		<!--
		<div class="home whiteframe">
			<a class="url" href="">
				<img class="image" src="" alt="" title=""/>
			</a>
			<div class="name">
				<a class="url" href="">
					
				</a>
			</div>
			<div class="style"></div>
			<div class="wall_material"></div>
			<div class="living_space"></div>
			<div class="square"></div>
			<div class="floors"></div>
		</div>
		-->
	</body>
</html>


Итак, блоки, содержащие информацию кроме стилевых классов содержат описательные. Описательные классы нам позволят отобразить только походящие по параметрам блоки.

<div class="... neogot derevo fl3">


Для этого воспользуемся селектором атрибутов [class~=«class_name»] цепочкой классов. И например с помощью такой CSS строки мы оставим видимым только один дом.

.home{display: none} .home.neogot.derevo.fl3{display: block}


А для составления этой строки мы воспользуемся JavaScript.

function select_el(value){
	if (value){
		var el=document.getElementById(value);
		if (el) el.selected = true;	
	}
}

function get_filter(id){
	var value=document.getElementById(id).value;
	if (value)
		return "."+value;
	else
		return "";
}

(function(){
	var but = document.getElementById("search");
	
	
	if (!but) return setTimeout(arguments.callee, 1000);
	var params = document.location.hash.replace("#","").split(".");
	
	for (var i = 0; i <  params.length; i++)
		select_el(params[i]);
	
	(but.onclick = function(){
		var style = document.getElementById("filter");
		var style_text = [".home{display: none} .home",get_filter("style"), get_filter("wall_material"), get_filter("floors"),"{display: block}"].join("");
		if (typeof style.textContent == "string") 
			style.textContent = style_text;
		else 
			style.styleSheet.cssText = style_text;

		document.location.hash = [get_filter("style"), get_filter("wall_material"), get_filter("floors")].join("");
	})()
})()


Тут ещё между делом якорь делается на выбранные параметры.

Вот собственно и все.

P.S. Спасибо @SelenIT2 за наводку. JavaScript код немного укоротился да и url красивей стал.
Tags:
Hubs:
Total votes 23: ↑14 and ↓9+5
Comments23

Articles