Jump to content
  • 0

Непонятное поле


aqua.77
 Share

Question

Откуда возникает нижний отступ в элементе ul? Я выделил его границей чтобы было понятно. Появляется именно после добавления свойства 
    overflow:hidden;

<ul>
<li><a href="#">123<div class="qc"></div></a></li>
</ul>
ul{
border:1px black solid;
}
ul li{
	display:inline;
}
ul a{
	display:inline-block;
	width:100px;
	position:relative;
	overflow:hidden;
}
.qc{
	position:absolute;
	top:0;
	left:0;
	width:300px;
	height:100%;
	background:red;
}

 

Edited by aqua.77
Link to comment
Share on other sites

15 answers to this question

Recommended Posts

  • 0
3 часа назад, aqua.77 сказал:

Откуда возникает нижний отступ в элементе ul?

Вы указали для ul a display:inline-block , это значит что он ведет себя сначала как строка, а потом как блок, а строки не имеют свойства занимать всю высоту по умолчанию, если изменить в свойстве display , значение  на block .

То все получится.

  • Like 1
Link to comment
Share on other sites

  • 0
10 часов назад, Livitan сказал:

Вы указали для ul a display:inline-block , это значит что он ведет себя сначала как строка, а потом как блок, а строки не имеют свойства занимать всю высоту по умолчанию, если изменить в свойстве display , значение  на block .

1. inline-block не ведет себя так как вы описали. Он снаружи inline, а внутри block

2. Блоки тоже не занимают всю высоту по умолчанию.

 

А в данном случае проблема скорее всего из-за межстрочного интервала. Более наглядно https://jsfiddle.net/m7de78cz/

  • Like 1
Link to comment
Share on other sites

  • 0
1 час назад, wwt сказал:

проблема скорее всего из-за межстрочного интервала.

Нужно убрать интервал у li ?

ul{
border:1px black solid;
height:20px;
}
ul li{
	display:inline;
  background-color: green;
  line-height:0px;
}
ul a{
	display:inline-block;
	width:200px;
  height:100%;
	position:relative;
	overflow:hidden;
}
.qc{
	position:absolute;
	top:0;
	left:0;
	width:100px;
	height:100%;
	background:red;
}

 

Ах да и ещё сделать li строчно-блочным чтобы высоту задавать

Link to comment
Share on other sites

  • 0

Строки по-умолчанию выравниваются по базовой линии. Соответственно, снизу образуется пространство под нижние выносные элементы символов.

Задайте ссылкам vertical-align: top;

  • Like 1
Link to comment
Share on other sites

  • 0
2 часа назад, Sensei сказал:

Строки по-умолчанию выравниваются по базовой линии. Соответственно, снизу образуется пространство под нижние выносные элементы символов.

Задайте ссылкам vertical-align: top;

Не понимаю почему в данном случае li занимает всю высоту а ссылка нет. Хотя оба элемента блочно-строчные и занимают 100% высоты

ul{
border:1px black solid;
}
ul li{
	display:inline-block;
	vertical-align:top;
}
ul a{
	display:inline-block;
	width:100px;
	height:100%;
	position:relative;
	overflow:hidden;
}
.qc{
	position:absolute;
	top:0;
	left:0;
	width:300px;
	height:100%;
	background:red;
	opacity:.5;
}

 

Edited by aqua.77
Link to comment
Share on other sites

  • 0

У inline-block базовая линия проходит через последнюю строку внутри него.

Но когда вы задаете overflow отличное от visible, базовая линия отсчитывается от нижней границы самого блока.

Поэтому и появляется отступ.

Link to comment
Share on other sites

  • 0
1 час назад, Sensei сказал:

У inline-block базовая линия проходит через последнюю строку внутри него.

Но когда вы задаете overflow отличное от visible, базовая линия отсчитывается от нижней границы самого блока.

Поэтому и появляется отступ.

Всё всё дошло) только отзовитесь чтоб утвердиться. Свойство overflow:hidden; включает в себя базовую линию. Оно провоцирует контейнер расширяться и вмещать обтекаемые элементы и базовую линию.

Link to comment
Share on other sites

  • 0
1 час назад, Sensei сказал:

Вроде того, если я вас правильно понял.

Вообще, overflow: hidden скрывает переполнение, а остальное, скорее, побочные эффекты)

Вот поэтому я и использую overflow: hidden чтобы скрыть часть контента. Но помимо скрытия overflow: hidden выводит на показ базовую линию блока. Как избавиться от этой линии?

<ul>
<li><a href="#">123<div class="qc"></div></a></li>
</ul>
ul{
border:1px black solid;
}
ul li{
	display:inline;
}
ul a{
	display:inline-block;
	width:100px;
	position:relative;
	overflow:hidden;
	border:1px black solid;
}
.qc{
	position:absolute;
	top:0;
	left:0;
	width:300px;
	height:100%;
	background:red;
}

 

Link to comment
Share on other sites

  • 0
1 час назад, Sensei сказал:

Я же вам написал выше как починить, и у вас даже все получилось)


ul a {
    vertical-align: top;
}

 

Ок спасибо! можете подсказать хорошую статью про работу базовой линии.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy