#html #css
#HTML #css
Вопрос:
Я пытаюсь настроить подменю на основе содержимого. Прямо сейчас это исправлено и может содержать 4 подменю. См. Раздел «продажа», он содержит 4, однако на «панели инструментов» он содержит три, и есть пустое место. Я не хочу, чтобы это пустое пространство было там.
Моему классу label присвоена высота
input[type='radio']:checked label {
height: 325px;
Я попытался установить его на 100%, а также попробовал автоматическое переполнение, но высота подменю не регулируется.
Есть идеи о том, как динамически устанавливать высоту?
CodePen: https://codepen.io/anon/pen/gwjvvw
Комментарии:
1. Взглянул на codepen, но, честно говоря, понятия не имею, где искать, чтобы определить вашу проблему. Я немного смущен тем, что вы имеете в виду, хотя — по умолчанию элемент должен расширяться, чтобы соответствовать его содержимому, если не указано иное.
2.
height: auto
?3. @GeoffJames нет, он не отображается, если он автоматический..
4. @Santi Я немного отредактировал сообщение, надеюсь, оно понятно
5. Я согласен с @Santi — ваш CodePen чрезмерно сложен.
height: auto
Должно позволять дочерним элементам изменять высоту родительского объекта — но в этом случае вы используете переключатели, неупорядоченные списки, элементы списка и бог знает сколько классов. Попробуйте немного упростить свой код, чтобы мы могли сузить его — это также может немного помочь вам в определении вашей проблемы
Ответ №1:
Вам нужно установить height: auto;
, чтобы высота соответствовала содержимому. Что затем вызывает проблемы, потому что высота вашего содержимого по существу равна 0, потому что вы сделали так много плавающих и абсолютных позиций. Тогда вам нужно это исправить.
@import url(http://fonts.googleapis.com/css?family=Roboto:400,700,300);
ul {
padding: 0;
margin: 0;
}
li {
list-style-type: none;
}
input[type='radio'] {
display: none;
}
label {
cursor: pointer;
}
::-webkit-scrollbar {
display: none;
}
body .swanky {
margin: auto;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
body {
height: 100vh;
font-weight: 500;
font-family: "Roboto", sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 12px;
}
body .swanky_title__social a {
position: relative;
overflow: hidden;
width: 140px;
margin-right: 15px;
text-decoration: none;
padding: 0px 0px 5px 0px;
height: 40px;
border: 2px solid white;
float: left;
color: white;
font-size: 12px;
font-weight: 400;
margin-top: 20px;
}
body .swanky_title__social a .slide {
height: 45px;
width: 100px;
float: left;
position: absolute;
transform: skew(20deg);
left: -120px;
transition-property: left;
transition-duration: .2s;
background: white;
}
body .swanky_title__social a .slide .arrow {
position: absolute;
right: 31px;
top: 24px;
opacity: 0;
transform: skew(-20deg);
}
body .swanky_title__social a .slide .arrow .stem {
width: 10px;
height: 2px;
background: #858490;
}
body .swanky_title__social a .slide .arrow .point {
width: 6px;
height: 6px;
border-right: 2px solid #858490;
top: -3px;
right: 1px;
position: absolute;
transform: rotate(45deg);
border-top: 2px solid #858490;
}
body .swanky_title__social a img {
width: 16px;
margin-left: 10px;
position: relative;
margin-right: 8px;
transition-property: margin-left;
transition-duration: .1s;
margin-top: 10px;
top: 4px;
}
body .swanky_title__social a:hover > .slide {
left: -70px;
transition-property: left;
transition-duration: .1s;
}
body .swanky_title__social a:hover > img {
margin-left: 40px;
transition-property: margin-left;
transition-duration: .1s;
}
body .swanky_title__social a:hover > .slide .arrow {
right: 11px;
opacity: 1;
transition-property: right,opacity;
transition-delay: .07s;
transition-duration: .2s;
}
body .swanky .intro {
float: right;
color: white;
width: 370px;
top: 50px;
position: relative;
}
body .swanky .intro h1 {
text-shadow: 0px 2px rgba(0, 0, 0, 0.26);
}
body .swanky .intro p {
line-height: 20px;
text-shadow: 0px 1px rgba(0, 0, 0, 0.26);
}
body .swanky_wrapper {
width: 225px;
height: auto;
overflow: hidden;
border-radius: 4px;
background: #2c2e2f;
}
body .swanky_wrapper label {
/* padding: 25px; */
float: left;
height: 72px;
border-bottom: 1px solid #313437;
position: relative;
width: 100%;
color: #eff4fa;
transition: text-indent .15s, height .3s;
box-sizing: border-box;
}
body .swanky_wrapper label img {
margin-right: 10px;
position: relative;
top: 2px;
width: 16px;
margin-left: 25px;
margin-top: 25px;
}
body .swanky_wrapper label span {
position: relative;
top: -3px;
}
body .swanky_wrapper label:hover {
background: #212e41;
border-bottom: 1px solid #313437;
text-indent: 4px;
}
body .swanky_wrapper label:hover .bar {
width: 100%;
}
body .swanky_wrapper label .bar {
width: 0px;
transition: width .15s;
height: 2px;
position: absolute;
display: block;
background: #355789;
bottom: 0;
left: 0;
}
body .swanky_wrapper label .lil_arrow {
width: 5px;
height: 5px;
-webkit-transition: transform 0.8s;
transition: transform 0.8s;
-webkit-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
border-top: 2px solid white;
border-right: 2px solid white;
float: right;
position: relative;
top: 6px;
right: 2px;
transform: rotate(45deg);
margin-right:25px;
margin-top:25px;
}
body .swanky_wrapper__content {
/*position: absolute;*/
display: none;
overflow: hidden;
left: 0;
width: 100%;
margin-top: 25px;
}
body .swanky_wrapper__content li {
width: 100%;
opacity: 0;
left: -100%;
background: #313437;
padding: 25px 0px;
text-indent: 25px;
box-shadow: 0px 0px #126CA1 inset;
transition: box-shadow .3s,text-indent .3s;
position: relative;
}
body .swanky_wrapper__content li:hover {
background: #313437;
box-shadow: 3px 0px #126CA1 inset;
transition: box-shadow .3s linear,text-indent .3s linear;
text-indent: 31px;
}
body .swanky_wrapper__content .clear {
clear: both;
}
input[type='radio']:checked label .swanky_wrapper__content {
display: block;
top: 68px;
border-bottom: 1px solid #313437;
}
input[type="radio"]:checked label > .lil_arrow {
-webkit-transition: -webkit-transform 0.8s;
transition: transform 0.8s;
-webkit-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
-webkit-transform: rotate(135deg);
-ms-transform: rotate(135deg);
transform: rotate(135deg);
border-top: 2px solid #14a3f9;
border-right: 2px solid #14a3f9;
}
input[type='radio']:checked label {
height: auto;
background: #212e41;
text-indent: 4px;
transition-property: height;
transition-duration: .6s;
-webkit-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
input[type='radio']:checked label .bar {
width: 0;
}
input[type='radio']:checked label li:nth-of-type(1) {
animation: in 0.15s 0.575s forwards;
-webkit-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
-moz-animation: in 0.15s 0.575s forwards;
-moz-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
input[type='radio']:checked label li:nth-of-type(2) {
animation: in 0.15s 0.7s forwards;
-webkit-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
-moz-animation: in 0.15s 0.7s forwards;
-moz-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
input[type='radio']:checked label li:nth-of-type(3) {
animation: in 0.15s 0.825s forwards;
-webkit-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
-moz-animation: in 0.15s 0.825s forwards;
-moz-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
input[type='radio']:checked label li:nth-of-type(4) {
animation: in 0.15s 0.95s forwards;
-webkit-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
-moz-animation: in 0.15s 0.95s forwards;
-moz-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
@keyframes in {
from {
left: -100%;
opacity: 0;
}
to {
left: 0;
opacity: 1;
}
}
.love {
position: absolute;
right: 20px;
bottom: 0px;
font-size: 11px;
font-weight: normal;
}
.love p {
color: white;
font-weight: normal;
font-family: 'Open Sans', sans-serif;
}
.love a {
color: white;
font-weight: 700;
text-decoration: none;
}
.love img {
position: relative;
top: 3px;
margin: 0px 4px;
width: 10px;
}
.brand {
position: absolute;
left: 20px;
bottom: 14px;
}
.brand img {
width: 30px;
}
<div class="swanky_wrapper">
<input id="Dashboard" name="radio" type="radio"></input>
<label for="Dashboard">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/dash.png"/>
<span>Dashboard</span>
<div class="lil_arrow"></div>
<div class="bar"></div>
<div class="swanky_wrapper__content">
<ul>
<li>Tools</li>
<li>Reports</li>
<li>Analytics</li>
</ul>
</div>
</label>
<input id="Sales" name="radio" type="radio"></input>
<label for="Sales">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/del.png"/>
<span>Sales</span>
<div class="lil_arrow"></div>
<div class="bar"></div>
<div class="swanky_wrapper__content">
<ul>
<li>New Sales</li>
<li>Expired Sales</li>
<li>Sales Reports</li>
<li>Deliveries</li>
</ul>
</div>
</label>
<input id="Messages" name="radio" type="radio"></input>
<label for="Messages">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/mess.png"/>
<span>Messages</span>
<div class="lil_arrow"></div>
<div class="bar"></div>
<div class="swanky_wrapper__content">
<ul>
<li>Inbox</li>
<li>Outbox</li>
<li>Sent</li>
<li>Archived</li>
</ul>
</div>
</label>
<input id="Users" name="radio" type="radio"></input>
<label for="Users">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/users.png"/>
<span>Users</span>
<div class="lil_arrow"></div>
<div class="bar"></div>
<div class="swanky_wrapper__content">
<ul>
<li>New User</li>
<li>User Groups</li>
<li>Permissions</li>
<li>Passwords</li>
</ul>
</div>
</label>
<input id="Settings" radio="radio" type="radio"></input>
<label for="Settings">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/set.png"/>
<span>Settings</span>
<div class="lil_arrow"></div>
<div class="swanky_wrapper__content">
<ul>
<li>Databases</li>
<li>Design</li>
<li>Change User</li>
<li>Log Out</li>
</ul>
</div>
</label>
</div>
<!--/ My Footer
-->
Здесь это делается с помощью более чистого HTML:
@import url(http://fonts.googleapis.com/css?family=Roboto:400,700,300);
ul,
li {
margin: 0;
padding: 0;
list-style: none;
}
ul.swanky_wrapper {
width: 225px;
height: auto;
overflow: hidden;
border-radius: 4px;
background: #2c2e2f;
}
ul.swanky_wrapper > li {
position: relative;
}
ul.swanky_wrapper > li:after {
content: '';
display: block;
position: absolute;
height: 2px;
left: -100%;
transition: .15s all;
bottom: 0;
width: 225px;
z-index: 10;
background-color: #355789;
}
ul.swanky_wrapper > li:hover:after {
left: 0;
}
ul.swanky_wrapper input[type='radio'] {
display: none;
}
ul.swanky_wrapper input[type='radio'] label {
padding: 25px;
height: 72px;
border-bottom: 1px solid #313437;
position: relative;
color: #eff4fa;
-webkit-transition: text-indent 0.15s, height 0.3s;
transition: text-indent 0.15s, height 0.3s;
box-sizing: border-box;
display: block;
}
ul.swanky_wrapper input[type='radio'] label:hover {
background: #212e41;
border-bottom: 1px solid #313437;
text-indent: 4px;
}
ul.swanky_wrapper input[type='radio'] label:before {
content: '';
display: inline-block;
width: 16px;
height: 16px;
background-size: cover;
margin-right: 10px;
position: relative;
top: 3px;
}
ul.swanky_wrapper input[type='radio'] label:after {
content: '';
display: inline-block;
width: 5px;
height: 5px;
-webkit-transition: transform 0.8s;
-webkit-transition: -webkit-transform 0.8s;
transition: -webkit-transform 0.8s;
transition: transform 0.8s;
transition: transform 0.8s, -webkit-transform 0.8s;
-webkit-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
border-top: 2px solid white;
border-right: 2px solid white;
position: absolute;
top: 6px;
right: 2px;
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
margin-right: 25px;
margin-top: 25px;
}
ul.swanky_wrapper input[type='radio'] label ul {
display: none;
}
ul.swanky_wrapper input[type='radio']:checked label {
height: auto;
background: #212e41;
text-indent: 4px;
-webkit-transition-property: height;
transition-property: height;
-webkit-transition-duration: .6s;
transition-duration: .6s;
-webkit-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
ul.swanky_wrapper input[type='radio']:checked label:after {
-webkit-transform: rotate(135deg);
transform: rotate(135deg);
}
ul.swanky_wrapper input[type='radio']:checked ~ ul {
display: block;
top: 68px;
border-bottom: 1px solid #313437;
}
ul.swanky_wrapper input[type='radio']:checked ~ ul li {
position: relative;
-webkit-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
color: #fff;
}
ul.swanky_wrapper input[type='radio']:checked ~ ul li:nth-of-type(1) {
-webkit-animation: in 0.15s 0.575s forwards;
animation: in 0.15s 0.575s forwards;
}
ul.swanky_wrapper input[type='radio']:checked ~ ul li:nth-of-type(2) {
-webkit-animation: in 0.15s 0.7s forwards;
animation: in 0.15s 0.7s forwards;
}
ul.swanky_wrapper input[type='radio']:checked ~ ul li:nth-of-type(3) {
-webkit-animation: in 0.15s 0.825s forwards;
animation: in 0.15s 0.825s forwards;
}
ul.swanky_wrapper input[type='radio']:checked ~ ul li:nth-of-type(4) {
-webkit-animation: in 0.15s 0.95s forwards;
animation: in 0.15s 0.95s forwards;
}
ul.swanky_wrapper ul li {
width: 100%;
opacity: 0;
left: -100%;
background: #313437;
padding: 25px 0px;
text-indent: 25px;
box-shadow: 0px 0px #126CA1 inset;
-webkit-transition: box-shadow 0.3s, text-indent 0.3s;
transition: box-shadow 0.3s, text-indent 0.3s;
position: relative;
}
ul.swanky_wrapper ul li:hover {
background: #313437;
box-shadow: 3px 0px #126CA1 inset;
-webkit-transition: box-shadow 0.3s linear, text-indent 0.3s linear;
transition: box-shadow 0.3s linear, text-indent 0.3s linear;
text-indent: 31px;
}
ul.swanky_wrapper li:nth-of-type(1) label:before {
background-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/dash.png');
}
ul.swanky_wrapper li:nth-of-type(2) label:before {
background-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/del.png');
}
ul.swanky_wrapper li:nth-of-type(3) label:before {
background-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/mess.png');
}
ul.swanky_wrapper li:nth-of-type(4) label:before {
background-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/users.png');
}
ul.swanky_wrapper li:nth-of-type(5) label:before {
background-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/set.png');
}
body {
height: 100vh;
font-weight: 500;
font-family: "Roboto", sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 12px;
}
@-webkit-keyframes in {
from {
left: -100%;
opacity: 0;
}
to {
left: 0;
opacity: 1;
}
}
@keyframes in {
from {
left: -100%;
opacity: 0;
}
to {
left: 0;
opacity: 1;
}
}
<ul class="swanky_wrapper">
<li>
<input id="Dashboard" name="radio" type="radio" />
<label for="Dashboard">Dashboard</label>
<ul>
<li>Tools</li>
<li>Reports</li>
<li>Analytics</li>
</ul>
</li>
<li>
<input id="Sales" name="radio" type="radio"></input>
<label for="Sales">Sales</label>
<ul>
<li>New Sales</li>
<li>Expired Sales</li>
<li>Sales Reports</li>
<li>Deliveries</li>
</ul>
</li>
<li>
<input id="Messages" name="radio" type="radio"></input>
<label for="Messages">Messages</label>
<ul>
<li>Inbox</li>
<li>Outbox</li>
<li>Sent</li>
<li>Archived</li>
</ul>
</li>
<li>
<input id="Users" name="radio" type="radio"></input>
<label for="Users">Users</label>
<ul>
<li>New User</li>
<li>User Groups</li>
<li>Permissions</li>
<li>Passwords</li>
</ul>
</li>
<li>
<input id="Settings" name="radio" type="radio"></input>
<label for="Settings">Settings</label>
<ul>
<li>Databases</li>
<li>Design</li>
<li>Change User</li>
<li>Log Out</li>
</ul>
</li>
</ul>
Комментарии:
1. В качестве примечания я бы удалил теги img, использовал :before в промежутках и удалил разделители lil_arrow и заменил на :after в промежутках. Затем удалите div.bar и используйте:after на ярлыках. Вероятно, вам также не нужны шикарные _wrapper__content divs — просто используйте вложенный ul. Делает разметку намного чище.
2. Вот начало переделки. Просто добавьте html, очистите Less/Css и добавьте URL-адреса изображений: codepen.io/anon/pen/pEkVBP
Ответ №2:
не указывайте высоту.пусть div настраивает высоту в соответствии с содержимым