| 제목 | simple tab | ||
|---|---|---|---|
| 글쓴이 | darkninja | 작성시각 | 2023/01/01 23:27:46 | 
|  | |||
| html tag 와 js 처리부분이 연결되어 있으니 한곳만 수정하면 작동이 안됩니다. js 부분은 간단히 몇줄로 압축이 가능하지만 이것을 풀어서 코딩하고 동작시키는데 며칠이 걸렸습니다; 
 css 
<style>
	.tabs_wrapper {
		-moz-box-shadow: 0 0 2px #ccc;
		-webkit-box-shadow: 0 0 2px #ccc;
		box-shadow: 0 0 2px #ccc;
		-moz-border-radius: 2px;
		-webkit-border-radius: 2px;
		border-radius: 2px;
		background-color: #fafafa;
	
		margin: 1px 1px 3px 1px;
		padding: 1px 1px 1px 1px;
	}
	.tabs_contents_container {
		border: 1px solid #ccc;
		border-top: none;
		padding: 3px;
	}
	.tab_contents {
		display: none;
	}
	.tabs_container {
		border-bottom: 1px solid #ccc;
	}
	.tabs_pull_right {
		float: right !important;
		right: 0;
		left: auto;
		margin-right: 0;
		position: relative;
		display: inline-block;
		vertical-align: middle;
	}
	.tabs {
		list-style: none;
		padding: 5px 0 4px 0;
		margin: 0 0 0 10px;
		font: 0.75em arial;
	}
	.tabs div span {
		display: inline;
		background-color: #eeeeee;
	}
	.tabs li {
		display: inline;
	}
	.tabs li a {
		border: 1px solid #ccc;
		padding: 4px 6px;
		text-decoration: none;
		background-color: #eeeeee;
		border-bottom: none;
		outline: none;
		border-radius: 5px 5px 0 0;
		-moz-border-radius: 5px 5px 0 0;
		-webkit-border-top-left-radius: 5px;
		-webkit-border-top-right-radius: 5px;
	}
	.tabs li a:hover {
		background-color: #dddddd;
	}
	.tabs li.active a {
		border-bottom: 1px solid #fff;
		background-color: #fff;
		padding: 4px 6px 5px 6px;
	}
	.tabs li.active a:hover {
	}
	.tabs li a.icon_accept {
		background-image: url('accept.png');
		background-position: 5px;
		background-repeat: no-repeat;
		padding-left: 24px;
	}
	.tabs li a.icon_accept:hover {
		padding-left: 24px;
	}
	.clearfix:before {
		display: table;
		content: " ";
	}
	.clearfix:after {
		display: table;
		content: " "; /* Older browser do not support empty content */
		clear: both;
		visibility: hidden;
		display: block;
		height: 0;
	}
</style>
php /* 사용자 정의 */ // http://127.0.0.1/ci-426/public define('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']); define('HTTP_HTTPS', ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ? 's' : '')); define('HTTP_HOST', 'http'.HTTP_HTTPS.'://'.$_SERVER['HTTP_HOST']); define('DOCUMENT_ROOT', $_SERVER['DOCUMENT_ROOT']); $root_path = str_replace(basename(SCRIPT_NAME), '', SCRIPT_NAME); $root_path = substr($root_path, 0, -1); if (empty($root_path)) { $root_path = ''; } $base_path = str_replace('/public' , '', $root_path); define('BASE_PATH', $base_path); define('ROOT_PATH', $root_path); define('HTTP_BASE', HTTP_HOST.BASE_PATH); define('DOC_BASE', DOCUMENT_ROOT.BASE_PATH); define('HTTP_ROOT', HTTP_HOST.ROOT_PATH); define('DOC_ROOT', DOCUMENT_ROOT.ROOT_PATH); $request = \Config\Services::request(); $uri = $request->uri; $TotalSegments = $uri->getTotalSegments(); $seg_controller = $uri->getTotalSegments()>=1 ? $uri->getSegment(1) : '/'; $seg_func = $uri->getTotalSegments()>=2 ? $uri->getSegment(2) : ''; $seg_table = $uri->getTotalSegments()>=3 ? $uri->getSegment(3) : ''; $seg_index = $uri->getTotalSegments()>=4 ? $uri->getSegment(4) : ''; <div class="tabs_wrapper"> <div class="tabs_container"> <ul id="tabs_info" class="tabs"> <div class="tabs_pull_right"> <span id="tab_prev"><a href="#">prev</a></span> <span id="tab_next"><a href="#">next</a></span> </div> <li><a href="#tab_seg" class="ahref">segments</a></li> <li><a href="#tab_path" class="ahref">path</a></li> <li class="active"><a href="#tab_doc" class="ahref">doc</a></li> <div class="clearfix"></div> </ul> </div> <div id="tabs_info_contents" class="tabs_contents_container"> <div id="tab_seg" class="tab_contents"> <?php echo 'TotalSegments : '.$TotalSegments.'<br>'; echo 'seg_controller : '.$seg_controller.'<br>'; echo 'seg_func : '.$seg_func.'<br>'; echo 'seg_table : '.$seg_table.'<br>'; ?> </div> <div id="tab_path" class="tab_contents"> <?php echo "HTTP_HOST => ".HTTP_HOST."<br>"; echo "DOCUMENT_ROOT => ".DOCUMENT_ROOT."<br>"; echo "<br>"; echo "BASE_PATH => ".BASE_PATH."<br>"; echo "ROOT_PATH => ".ROOT_PATH."<br>"; echo "<br>"; echo "HTTP_BASE => ".HTTP_BASE."<br>"; echo "DOC_BASE => ".DOC_BASE."<br>"; echo "<br>"; echo "HTTP_ROOT => ".HTTP_ROOT."<br>"; echo "DOC_ROOT => ".DOC_ROOT."<br>"; echo "<br>"; echo "base_url() => ".base_url()."<br>"; ?> </div> <div id="tab_doc" class="tab_contents"> <a target="_blank" href="http://www.phpschool.com/">phpschool</a> <a target="_blank" href="http://www.tcpschool.com/">tcpschool</a> <a target="_blank" href="https://link2me.tistory.com/category">link2me</a> <br/><br/> <a target="_blank" href="https://www.php.net/manual/en/index.php">php</a> <a target="_blank" href="https://ko.javascript.info/">JavaScript</a> <a target="_blank" href="https://www.devkuma.com/">devkuma</a> </div> </div> </div> js 
	<script type="text/javascript" charset="utf-8">
		function has_class(items, className) 
		{
			//alert(JSON.stringify(items));
			for(var i = 0; i < items.length; i++) {
				var classlist = items[i].classList;
				for(var j = 0; j < classlist.length; j++) {
					if (classlist[j] == className) {
						return items[i];
					}
				}	
			}
			return false;
		}
		function item_prev(items, className) 
		{
	  		var item = has_class(items, className);
			for(var i = 0; i < items.length; i++) {
				if (items[i] == item) {
					if (i > 0) {
					    return items[i-1];
					}
				}	
			}
			return false;
		}
		function item_next(items, className) 
		{
	  		var item = has_class(items, className);
			for(var i = 0; i < items.length; i++) {
				if (items[i] == item) {
					if (i < items.length-1) {
					    return items[i+1];
					}
				}	
			}
			return false;
		}
  
		var tabs_info = document.getElementById("tabs_info");
		var tabList = tabs_info.getElementsByTagName("li")
		var tabs_info_contents = document.getElementById("tabs_info_contents");
		var contentList = tabs_info_contents.querySelectorAll('.tab_contents');
	    var tabs_active = "active";
		document.getElementById("tab_prev").onclick = function(event)
		{
			event.preventDefault();
			var item = item_prev(tabList, tabs_active);
			if (item) {
				item.querySelector('.ahref').click();
			}	
			return false;
		};
		document.getElementById("tab_next").onclick = function(event)
		{
			event.preventDefault();
			var item = item_next(tabList, tabs_active);
			if (item) {
				item.querySelector('.ahref').click();
			}	
			return false;
		};
		for(var i = 0; i < tabList.length; i++)
		{
			tabList[i].querySelector('.ahref').addEventListener('click', function(event)
			{
				event.preventDefault();
				for(var j = 0; j < tabList.length; j++) {
					tabList[j].classList.remove(tabs_active);
					contentList[j].style.display = 'none';
				}
				this.parentNode.classList.add(tabs_active);
				var selected_tab = this.getAttribute('href');
				document.querySelector(selected_tab).style.display = 'block';
				return false; 
			} );
		}
  		var item = has_class(tabList, tabs_active);
		if (item) {
			item.querySelector('.ahref').click();
		}	
	</script>
 | |||
| 다음글 | 고영창님의 만세력 | ||
| 이전글 | captcha font size 폰트 사이즈가 바뀌지 ... | ||
| 없음 |