Я создаю вертикальную навигацию, где элементы списка представляют собой круги. Элементы подменю должны вылетать из своего родителя.
У меня есть рабочий код, но код работает только с одним подменю, потому что он требует интенсивного использования свойств "left" и "top" для позиционирования элементов списка подменю. Бьюсь об заклад, это могло бы выглядеть красиво с несколькими дополнительными подменю, но на мой вкус потребовалось бы слишком много настроек CSS для каждого меню.
Рабочая демонстрация с 1 подменю.
<nav>
<ul class="menu">
<li><a href="/">Home Page</a></li>
<li><a href="/">About</a>
<ul>
<li><a href="/">Our History</a></li>
<li><a href="/">Our Philosophy</a></li>
<li><a href="/">Our Mission</a></li>
</ul>
</li>
<li><a href="/">Services</a></li>
<li><a href="/">Our Team</a></li>
<li><a href="/">Contact Us</a></li>
</ul>
</nav>
CSS
/* Circle Menu */
nav {
width: 10em;
}
.menu a{
display: block;
padding:10px;
width: 100%;
height: 7.5em;
border-radius: 750px 750px 750px 750px;
-moz-border-radius: 750px 750px 750px 750px;
-webkit-border-radius: 750px 750px 750px 750px;
background-color: hsl(0, 100%, 72%);
text-align: center;
margin-bottom: 1em;
}
.menu li{
margin-bottom: 1em;
list-style: none;
}
.menu li ul{
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
opacity: 0;
padding: 0;
display: inline;
top: -8em;
position: fixed;
}
.menu li:hover ul{
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
padding: 0;
opacity: 1;
}
.menu ul li a{
width: 100%;
background-color: hsl(0, 60%, 72%);
}
.menu li ul li {
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
position:relative;
left:0;
}
.menu li:hover ul li {
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
position: relative;
left: 190px;
}
.menu li ul li:nth-child(1) {
top: 307px;
left: 0px;
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
}
.menu li:hover ul li:nth-child(1) {
top: 150px;
left: 160px;
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
}
.menu li ul li:nth-child(2) {
top: 153px;
left: 0;
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
}
.menu li:hover ul li:nth-child(2) {
left: 240px;
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
top: 150px;
}
.menu li ul li:nth-child(3) {
top: -5px;
left: 0;
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
}
.menu li:hover ul li:nth-child(3) {
top: 153px;
left: 160px;
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
}
Демонстрация не работает из-за 2 подменю.
<nav>
<ul class="menu">
<li><a href="/">Home Page</a></li>
<li><a href="/">About</a>
<ul>
<li><a href="/">Our History</a></li>
<li><a href="/">Our Philosophy</a></li>
<li><a href="/">Our Mission</a></li>
</ul>
</li>
<li><a href="/">Services</a></li>
<li><a href="/">Our Team</a>
<ul>
<li><a href="/">Jim</a></li>
<li><a href="/">Karla</a></li>
<li><a href="/">Manzanita</a></li>
</ul>
</li>
<li><a href="/">Contact Us</a></li>
</ul>
</nav>
CSS
/* Circle Menu */
nav {
width: 10em;
}
.menu a{
display: block;
padding:10px;
width: 100%;
height: 7.5em;
border-radius: 750px 750px 750px 750px;
-moz-border-radius: 750px 750px 750px 750px;
-webkit-border-radius: 750px 750px 750px 750px;
background-color: hsl(0, 100%, 72%);
text-align: center;
margin-bottom: 1em;
}
.menu li{
margin-bottom: 1em;
list-style: none;
}
.menu li ul{
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
opacity: 0;
padding: 0;
display: inline;
top: -8em;
position: fixed;
}
.menu li:hover ul{
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
padding: 0;
opacity: 1;
}
.menu ul li a{
width: 100%;
background-color: hsl(0, 60%, 72%);
}
.menu li ul li {
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
position:relative;
left:0;
}
.menu li:hover ul li {
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
position: relative;
left: 190px;
}
.menu li ul li:nth-child(1) {
top: 307px;
left: 0px;
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
}
.menu li:hover ul li:nth-child(1) {
top: 150px;
left: 160px;
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
}
.menu li ul li:nth-child(2) {
top: 153px;
left: 0;
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
}
.menu li:hover ul li:nth-child(2) {
left: 240px;
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
top: 150px;
}
.menu li ul li:nth-child(3) {
top: -5px;
left: 0;
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
}
.menu li:hover ul li:nth-child(3) {
top: 153px;
left: 160px;
-webkit-transition:all .35s ease-in;
-moz-transition:all .35s ease-in;
-o-transition:all .35s ease-in;
transition:all .35s ease-in;
}
Можно ли создать эффект, который я хочу для нескольких подменю, только с помощью CSS, но без необходимости позиционировать каждый элемент подменю по отдельности? Или мне нужно будет использовать JavaScript для «автоматического» позиционирования элементов?
position:relative
, чтобы их тогда абсолютно позиционированные дочерние элементы воспринимали их как точки ориентации… - person CBroe   schedule 15.02.2014