admin管理员组

文章数量:1208153

I'm unable to add border-radius to entire dropdown menu, If I add border-radius to click-nav ul li then radius applying to list items. I have added border-radius to .click-nav ul but radius not applied to entire dropdown menu.

$(function () {
  $('.click-nav > ul').toggleClass('no-js js');
  $('.click-nav .js ul').hide();
  $('.click-nav .js').click(function(e) {
    $('.click-nav .js ul').slideToggle(200);
    $('.clicker').toggleClass('active');
    e.stopPropagation();
  });
  $(document).click(function() {
    if ($('.click-nav .js ul').is(':visible')) {
      $('.click-nav .js ul', this).slideUp();
      $('.clicker').removeClass('active');
    }
  });
});
body{background:#000}

.click-nav {width:200px;}

.click-nav ul {position:relative;}

.click-nav ul li {position:relative;list-style:none;cursor:pointer;}

.click-nav ul li ul {position:absolute;left:0;right:0;margin:5px 0px 0px -40px;}

.arrow-up {
	width: 0; 
	height: 0; 
	border-left: 10px solid transparent;
	border-right: 10px solid transparent;
	border-bottom: 10px solid white;
  margin-left:30px;
  }


.click-nav ul .clicker {position:relative;border:2px solid #fff;color:#fff;border-radius:6px;background-color: rgba(255,255,255,0);width:70px;}

.click-nav ul .clicker:hover,.click-nav ul .active {background-color: rgba(255,255,255,0.2);width:70px;}


.click-nav ul li a {
  background:#fff;transition:background-color 0.2s ease-in-out;
-webkit-transition:background-color 0.2s ease-in-out;
-moz-transition:background-color 0.2s ease-in-out;
  display:block;
  padding:6px 10px 6px 10px;color:#333;text-decoration:none;}

.click-nav ul li a:hover {background-color: rgba(214,247,255,1); }
.click-nav .no-js ul {display:none;}
.click-nav .no-js:hover ul {display:block;}
<script src=".8.3.js"></script><div class="click-nav">
  <ul class="no-js">
    <li>
      <a href="#" class="clicker">Categories</a>
      <ul>
        <li><div class="arrow-up"></div></li>
        <li><a href="#">Dashboard</a></li>
        <li><a href="#">Settings</a></li>
        <li><a href="#">Privacy</a></li>
        <li><a href="#">Help</a></li>
        <li><a href="#">Sign out</a></li>
      </ul>
    </li>
  </ul>
</div>

I'm unable to add border-radius to entire dropdown menu, If I add border-radius to click-nav ul li then radius applying to list items. I have added border-radius to .click-nav ul but radius not applied to entire dropdown menu.

$(function () {
  $('.click-nav > ul').toggleClass('no-js js');
  $('.click-nav .js ul').hide();
  $('.click-nav .js').click(function(e) {
    $('.click-nav .js ul').slideToggle(200);
    $('.clicker').toggleClass('active');
    e.stopPropagation();
  });
  $(document).click(function() {
    if ($('.click-nav .js ul').is(':visible')) {
      $('.click-nav .js ul', this).slideUp();
      $('.clicker').removeClass('active');
    }
  });
});
body{background:#000}

.click-nav {width:200px;}

.click-nav ul {position:relative;}

.click-nav ul li {position:relative;list-style:none;cursor:pointer;}

.click-nav ul li ul {position:absolute;left:0;right:0;margin:5px 0px 0px -40px;}

.arrow-up {
	width: 0; 
	height: 0; 
	border-left: 10px solid transparent;
	border-right: 10px solid transparent;
	border-bottom: 10px solid white;
  margin-left:30px;
  }


.click-nav ul .clicker {position:relative;border:2px solid #fff;color:#fff;border-radius:6px;background-color: rgba(255,255,255,0);width:70px;}

.click-nav ul .clicker:hover,.click-nav ul .active {background-color: rgba(255,255,255,0.2);width:70px;}


.click-nav ul li a {
  background:#fff;transition:background-color 0.2s ease-in-out;
-webkit-transition:background-color 0.2s ease-in-out;
-moz-transition:background-color 0.2s ease-in-out;
  display:block;
  padding:6px 10px 6px 10px;color:#333;text-decoration:none;}

.click-nav ul li a:hover {background-color: rgba(214,247,255,1); }
.click-nav .no-js ul {display:none;}
.click-nav .no-js:hover ul {display:block;}
<script src="https://code.jquery.com/jquery-1.8.3.js"></script><div class="click-nav">
  <ul class="no-js">
    <li>
      <a href="#" class="clicker">Categories</a>
      <ul>
        <li><div class="arrow-up"></div></li>
        <li><a href="#">Dashboard</a></li>
        <li><a href="#">Settings</a></li>
        <li><a href="#">Privacy</a></li>
        <li><a href="#">Help</a></li>
        <li><a href="#">Sign out</a></li>
      </ul>
    </li>
  </ul>
</div>

Share Improve this question asked Aug 8, 2015 at 20:36 PrimePrime 3,6255 gold badges32 silver badges47 bronze badges 0
Add a comment  | 

5 Answers 5

Reset to default 7

Try adding a class to the first and last list elements...

css

.first a {
    border-top-left-radius: 10px;
    border-top-right-radius: 10px;
}

.last a{
    border-bottom-left-radius: 10px;
    border-bottom-right-radius: 10px;
}

html

  <ul>
    <li><div class="arrow-up"></div></li>
    <li class="first"><a href="#">Dashboard</a></li>
    <li><a href="#">Settings</a></li>
    <li><a href="#">Privacy</a></li>
    <li><a href="#">Help</a></li>
    <li class="last"><a href="#">Sign out</a></li>
  </ul>

Demo: http://jsfiddle.net/vp9eykne

Your border-radius is being set, just now shown properly. If you take a look at this code, I have added the radius and set the background-color: red;. Here you will see the positioning of the second ul and how the radius is being displayed.

To get around the issue, you could add classes or pseudo-classes for the first (well, second technically) and last elements of the list.

.click-nav ul li ul li:nth-child(2) a {
    border-top-left-radius: 5px;
    border-top-right-radius: 5px;
}

.click-nav ul li ul li:last-child a {
    border-bottom-left-radius: 5px;
    border-bottom-right-radius: 5px;
}

Here is a link to the working version. If you'd rather not use the pseudo-classes, recode your dropdown as to not have the top arrow part of the inside ul and the margin not pushed so far over.

When you add a border-radius property to list ( ul ) you cannot see anything.

You have to add overflow: hidden too. Also ul's default padding left value causes a problem for you. You have to fix it, add padding-left: 0 too. And lastly your arrow causes a border-radius-top problem. You have to add border-radius to second li of a list.

You can see my fiddle, i've done it.

http://jsfiddle.net/naufu5hk/3/

You menu is made of <li> elements so you weill have to add border radius to the first and last <li> element.

But you don't add background to the li element (probably easier?) So you have to select the menu: css selector for the li element:

ul li:first-of-type { ... }

What you do is add the background to the li elements child so:

ul li:first-of-type *:first-of-type { ... }

And we need the end so we the last element but its child:

ul li:last-of-type *:last-of-type { ... }

$(function() {
  $('.click-nav > ul').toggleClass('no-js js');
  $('.click-nav .js ul').hide();
  $('.click-nav .js').click(function(e) {
    $('.click-nav .js ul').slideToggle(200);
    $('.clicker').toggleClass('active');
    e.stopPropagation();
  });
  $(document).click(function() {
    if ($('.click-nav .js ul').is(':visible')) {
      $('.click-nav .js ul', this).slideUp();
      $('.clicker').removeClass('active');
    }
  });
});
body {
  background: #000
}
.click-nav {
  width: 200px;
}
.click-nav ul {
  position: relative;
}
.click-nav ul li {
  position: relative;
  list-style: none;
  cursor: pointer;
}
.click-nav ul li ul {
  position: absolute;
  left: 0;
  right: 0;
  margin: 5px 0px 0px -40px;
}
.arrow-up {
  width: 0;
  height: 0;
  border-left: 10px solid transparent;
  border-right: 10px solid transparent;
  border-bottom: 10px solid white;
  margin-left: 30px;
}
.click-nav ul .clicker {
  position: relative;
  border: 2px solid #fff;
  color: #fff;
  border-radius: 6px;
  background-color: rgba(255, 255, 255, 0);
  width: 70px;
}
.click-nav ul .clicker:hover,
.click-nav ul .active {
  background-color: rgba(255, 255, 255, 0.2);
  width: 70px;
}
.click-nav ul li a {
  background: #fff;
  transition: background-color 0.2s ease-in-out;
  -webkit-transition: background-color 0.2s ease-in-out;
  -moz-transition: background-color 0.2s ease-in-out;
  display: block;
  padding: 6px 10px 6px 10px;
  color: #333;
  text-decoration: none;
}
.click-nav ul li a:hover {
  background-color: rgba(214, 247, 255, 1);
}
.click-nav .no-js ul {
  display: none;
}
.click-nav .no-js:hover ul {
  display: block;
}
.menu li:first-of-type *:first-of-type {
  border-top-left-radius: 7px;
  border-top-right-radius: 7px;
}
.menu li:last-of-type *:last-of-type {
  border-bottom-left-radius: 7px;
  border-bottom-right-radius: 7px
}
<script src="https://code.jquery.com/jquery-1.8.3.js"></script>
<div class="click-nav">
  <ul class="no-js">
    <li>
      <a href="#" class="clicker">Categories</a>
      <ul class="menu">
        <li>
          <div class="arrow-up"></div>
          <a href="#">Dashboard</a>
        </li>
        <li><a href="#">Settings</a>
        </li>
        <li><a href="#">Privacy</a>
        </li>
        <li><a href="#">Help</a>
        </li>
        <li><a href="#">Sign out</a>
        </li>
      </ul>
    </li>
  </ul>
</div>

Try utilizing selector .click-nav ul .clicker + ul li:nth-of-type(2) a to select first li a element following .click-nav ul .clicker element , set border-top-left-radius , border-top-right-radius to 6px ; .click-nav ul .clicker + ul li:nth-last-of-type(1) a to select last li a following .click-nav ul .clicker , set border-bottom-left-radius , border-bottom-right-radius to 6px

.click-nav ul .clicker + ul li:nth-of-type(2) a {
  border-top-left-radius: 6px;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0px;
  border-bottom-left-radius: 0px;
}

.click-nav ul .clicker + ul li:nth-last-of-type(1) a {
  border-bottom-left-radius: 0px;
  border-bottom-right-radius: 0px;
  border-bottom-right-radius: 6px;
  border-bottom-left-radius: 6px;
}

$(function() {
  $('.click-nav > ul').toggleClass('no-js js');
  $('.click-nav .js ul').hide();
  $('.click-nav .js').click(function(e) {
    $('.click-nav .js ul').slideToggle(200);
    $('.clicker').toggleClass('active');
    e.stopPropagation();
  });
  $(document).click(function() {
    if ($('.click-nav .js ul').is(':visible')) {
      $('.click-nav .js ul', this).slideUp();
      $('.clicker').removeClass('active');
    }
  });
});
body {
  background: #000
}
.click-nav {
  width: 200px;
}
.click-nav ul {
  position: relative;
}
.click-nav ul li {
  position: relative;
  list-style: none;
  cursor: pointer;
}
.click-nav ul li ul {
  position: absolute;
  left: 0;
  right: 0;
  margin: 5px 0px 0px -40px;
}
.arrow-up {
  width: 0;
  height: 0;
  border-left: 10px solid transparent;
  border-right: 10px solid transparent;
  border-bottom: 10px solid white;
  margin-left: 30px;
}
.click-nav ul .clicker + ul li:nth-of-type(2) a {
  border-top-left-radius: 6px;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0px;
  border-bottom-left-radius: 0px;
}

.click-nav ul .clicker + ul li:nth-last-of-type(1) a {
  border-bottom-left-radius: 0px;
  border-bottom-right-radius: 0px;
  border-bottom-right-radius: 6px;
  border-bottom-left-radius: 6px;
}
.click-nav ul .clicker {
  position: relative;
  border: 2px solid #fff;
  color: #fff;
  border-radius: 6px;
  background-color: rgba(255, 255, 255, 0);
  width: 70px;
}
.click-nav ul .clicker:hover,
.click-nav ul .active {
  background-color: rgba(255, 255, 255, 0.2);
  width: 70px;
}
.click-nav ul li a {
  background: #fff;
  transition: background-color 0.2s ease-in-out;
  -webkit-transition: background-color 0.2s ease-in-out;
  -moz-transition: background-color 0.2s ease-in-out;
  display: block;
  padding: 6px 10px 6px 10px;
  color: #333;
  text-decoration: none;
}
.click-nav ul li a:hover {
  background-color: rgba(214, 247, 255, 1);
}
.click-nav .no-js ul {
  display: none;
}
.click-nav .no-js:hover ul {
  display: block;
}
<script src="https://code.jquery.com/jquery-1.8.3.js"></script>
<div class="click-nav">
  <ul class="no-js">
    <li>
      <a href="#" class="clicker">Categories</a>
      <ul>
        <li>
          <div class="arrow-up"></div>
        </li>
        <li><a href="#">Dashboard</a>
        </li>
        <li><a href="#">Settings</a>
        </li>
        <li><a href="#">Privacy</a>
        </li>
        <li><a href="#">Help</a>
        </li>
        <li><a href="#">Sign out</a>
        </li>
      </ul>
    </li>
  </ul>
</div>

本文标签: javascripthow to add borderradius to dropdown menuStack Overflow