2017-12-29 86 views
0

ul에 ul 자식이있는 곳에 CSS 오른쪽 화살표를 추가하고 싶습니까? 아래 삼각형 오른쪽 CSS입니다. 사용자가이 메뉴에 하위 메뉴가 있음을 알 수 있도록 내 메뉴에 추가하고 싶습니다.CSS-ckeck 및 오른쪽 화살표 추가 lul ul

li에 ul.children의 하위 항목이있는 경우 어떻게 순수 CSS에서 감지 할 수 있습니까?

내 삼각형 - 오른쪽 화살표를 아래에 추가하고 싶습니다. Plz 도움. 메뉴에 대한

PHP 코드 : 메뉴 바

<style> 
/* Menu Styles */ 

.third-level-menu 
{ 
    position: absolute; 
    top: 0; 
    right: -220px; 
    width: 220px; 
    list-style: none; 
    padding: 0; 
    margin: 0; 
    display: none; 
} 

.third-level-menu > li 
{ 
    height: 30px; 
    background: #999999; 
} 
.third-level-menu > li:hover { background: #CCCCCC; } 

.second-level-menu 
{ 
    position: absolute; 
    top: 30px; 
    left: 0; 
    width: 200px; 
    list-style: none; 
    padding: 0; 
    margin: 0; 
    display: none; 
} 

.second-level-menu > li 
{ 
    position: relative; 
    height: 30px; 
    background: #999999; 
} 
.second-level-menu > li:hover { background: #CCCCCC; } 

.top-level-menu 
{ 
    list-style: none; 
    padding: 0; 
    margin: 0; 
} 

.top-level-menu > li 
{ 
    position: relative; 
    float: left; 
    height: 30px; 
    width: 100px; 
    background: #999999; 
} 
.top-level-menu > li:hover { background: #CCCCCC; } 

.top-level-menu li:hover > ul 
{ 
    /* On hover, display the next level's menu */ 
    display: inline; 
} 


/* Menu Link Styles */ 

.top-level-menu a /* Apply to all links inside the multi-level menu */ 
{ 
    font: bold 14px Arial, Helvetica, sans-serif; 
    color: #FFFFFF; 
    text-decoration: none; 
    padding: 0 0 0 10px; 

    /* Make the link cover the entire list item-container */ 
    display: block; 
    line-height: 30px; 
} 
.top-level-menu a:hover { color: #000000; } 
</style> 

내 메뉴를 확인하기위한

<?php 
$stmt = $pdo->query('SELECT * FROM `category` where `parent_id` = 0'); 
$stmt->execute(); 
?> 

<ul class="top-level-menu"> 
    <?php while($menu1 = $stmt->fetch()){ ?> 
     <li><a href="<?php echo $menu1['category_link'] . "\n"; ?>"><?php echo $menu1['product'] . "\n"; ?></a> 

      <?php $stmt1 = $pdo->prepare('SELECT * FROM category WHERE parent_id = ?'); 
        $stmt1->execute([$menu1['id']]); 
        ?> 
        <ul class="second-level-menu"> 
         <?php while($menu2 = $stmt1->fetch()){ ?> 
         <li><a href="<?php echo $menu2['category_link'] . "\n"; ?>"><?php echo $menu2['product'] . "\n"; ?></a> 
            <?php 
            $stmt2 = $pdo->prepare('SELECT * FROM category WHERE parent_id = ?'); 
            $stmt2->execute([$menu2['id']]); 
            ?> 
           <ul class="third-level-menu"> 
            <?php while($menu3 = $stmt2->fetch()){ ?> 
            <li><a href="<?php echo $menu3['category_link'] . "\n"; ?>"><?php echo $menu3['product'] . "\n"; ?></a> 
            </li> 
            <?php } ?> 
           </ul> 

         </li> 

         <?php } ?> 
        </ul> 


     </li> 
<?php } ?> 
</ul> 

CSS는 리

enter image description here

+0

[CSS 부모 선택 도구가 있습니까?] (https://stackoverflow.com/questions/1014861/is-there-a-css-parent-selector) – Adrian

+0

가능한 경우 jsfiddle을 추가하십시오. – claudio

+0

편리한 : http://inspirationalpixels.com/tutorials/creating-a-dropdown-menu-with-html-css – Snowmonkey

답변

1

UL을 가지고 더 화살표가없는 경우 따라서 실제로 CSS에는 부모 셀렉터가 없지만 이것을 j로 태그 지정 했으므로 질의, 우리는 : has() 선택자를 사용하여 많은 동일한 동작을 수행 할 수 있습니다. 기본적으로 LI 엘이 UL을 포함하고 있다면 우리는 UL이 서브 메뉴라고 가정해야하고 메뉴 항목에 사용하는 앵커 엘에 'js-has-a-submenu'클래스를 추가 할 것입니다. 정적으로 적용된 클래스가 아니라 js를 통해서만 사용한다는 것을 반영하기 위해 'js-'라는 접두사를 붙였습니다.

여기 코드는 실제로위원회에서 언급 한 메뉴 예제에서 가져온 것이지만 메뉴에 아래쪽 화살표를 하드 코딩 한 것으로 나타 났으므로 실제로하려는 것을 해칩니다. , 내가 이해하는 것에서. 그래서 아래쪽 화살표를 제거하고 jQuery를 사용하여 클래스를 적용했습니다. 메뉴 자체를 이해하려면 this으로 읽으십시오. 꽤 잘하는 것 같아요. (핑크 팬이 아니라 CSS입니다.)

$("li:has(ul)").find("a:eq(0)").addClass("js-has-a-submenu");
body { 
 
    background: #333; 
 
} 
 

 
.clearfix:after { 
 
    display: block; 
 
    clear: both; 
 
} 
 

 

 
/*----- Menu Outline -----*/ 
 

 
.menu-wrap { 
 
    width: 100%; 
 
    box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.2); 
 
    background: #3e3436; 
 
} 
 

 
.menu { 
 
    width: 1000px; 
 
    margin: 0px auto; 
 
} 
 

 
.menu li { 
 
    margin: 0px; 
 
    list-style: none; 
 
    font-family: 'Ek Mukta'; 
 
} 
 

 
.menu a { 
 
    text-decoration:none; 
 
    transition: all linear 0.15s; 
 
    color: #919191; 
 
} 
 

 
.menu li:hover > a, 
 
.menu .current-item > a { 
 
    text-decoration: none; 
 
    color: #be5b70; 
 
} 
 

 
.menu .arrow { 
 
    font-size: 11px; 
 
    line-height: 0%; 
 
} 
 

 

 
/*----- Top Level -----*/ 
 

 
.menu > ul > li { 
 
    float: left; 
 
    display: inline-block; 
 
    position: relative; 
 
    font-size: 19px; 
 
} 
 

 
.menu > ul > li > a { 
 
    padding: 10px 40px; 
 
    display: inline-block; 
 
    text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.4); 
 
} 
 

 
.menu > ul > li:hover > a, 
 
.menu > ul > .current-item > a { 
 
    background: #2e2728; 
 
} 
 

 

 
/*----- Bottom Level -----*/ 
 

 
.menu li:hover .sub-menu { 
 
    z-index: 1; 
 
    opacity: 1; 
 
} 
 

 
.sub-menu { 
 
    width: 160%; 
 
    padding: 5px 0px; 
 
    position: absolute; 
 
    top: 100%; 
 
    left: 0px; 
 
    z-index: -1; 
 
    opacity: 0; 
 
    transition: opacity linear 0.15s; 
 
    box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.2); 
 
    background: #2e2728; 
 
} 
 

 
.sub-menu li { 
 
    display: block; 
 
    font-size: 16px; 
 
} 
 

 
.sub-menu li a { 
 
    padding: 10px 30px; 
 
    display: block; 
 
} 
 

 
.sub-menu li a:hover, 
 
.sub-menu .current-item a { 
 
    background: #3e3436; 
 
} 
 

 
.js-has-a-submenu::after { 
 
    content: " \2193"; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="menu-wrap"> 
 
    <nav class="menu"> 
 
    <ul class="clearfix"> 
 
     <li><a href="#">Home</a></li> 
 
     <li> 
 
     <a href="#">Movies </a> 
 

 
     <ul class="sub-menu"> 
 
      <li><a href="#">In Cinemas Now</a></li> 
 
      <li><a href="#">Coming Soon</a></li> 
 
      <li><a href="#">On DVD/Blu-ray</a></li> 
 
      <li><a href="#">Showtimes &amp; Tickets</a></li> 
 
     </ul> 
 
     </li> 
 
     <li><a href="#">T.V. Shows</a></li> 
 
     <li><a href="#">Photos</a></li> 
 
     <li><a href="#">Site Help</a></li> 
 
    </ul> 
 
    </nav> 
 
</div>

1

당신은 UL,하지만 리튬을 숨길하지 않는다면? 그러면 :: 전에 CSS를 사용하여 ul 앞에 작은 화살표를 삽입 할 수 있습니다.

나의 바이올린 그것은 조금 거친 https://jsfiddle.net/dL758uba/

/* Menu Styles */ 

ul {display: inline;} 

ul.third-level-menu::before { 
content: '-'; 
position: relative; 
left: -200px; 
top: 10px; 
} 

ul::before { 
content: '-'; 
position: relative; 
left: 0px; 
top: -20px; 
} 

.third-level-menu 
{ 
    position: absolute; 
    top: 0; 
    right: -220px; 
    width: 220px; 
    list-style: none; 
    padding: 0; 
    margin: 0; 

} 

.third-level-menu > li 
{ 
    height: 30px; 
    background: #999999; 
    display: none; 
} 
.third-level-menu > li:hover { background: #CCCCCC; } 

.second-level-menu 
{ 
    position: absolute; 
    top: 30px; 
    left: 0; 
    width: 200px; 
    list-style: none; 
    padding: 0; 
    margin: 0; 

} 

.second-level-menu > li 
{ 
    position: relative; 
    height: 30px; 
    background: #999999; 
    display: none; 
} 
.second-level-menu > li:hover { background: #CCCCCC; } 

.top-level-menu 
{ 
    list-style: none; 
    padding: 0; 
    margin: 0; 
} 

.top-level-menu > li 
{ 
    position: relative; 
    float: left; 
    height: 30px; 
    width: 100px; 
    background: #999999; 
} 
.top-level-menu > li:hover { background: #CCCCCC; } 

.top-level-menu li:hover > ul >li 
{ 
    /* On hover, display the next level's menu */ 
    display: block; 
} 


/* Menu Link Styles */ 

.top-level-menu a /* Apply to all links inside the multi-level menu */ 
{ 
    font: bold 14px Arial, Helvetica, sans-serif; 
    color: #FFFFFF; 
    text-decoration: none; 
    padding: 0 0 0 10px; 

    /* Make the link cover the entire list item-container */ 
    display: block; 
    line-height: 30px; 
} 
.top-level-menu a:hover { color: #000000; } 

에서 봐 가지고,하지만 난 그게 올바른 방향에 도움이 될 것입니다 생각하세요.