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
  On 11/7/2016 at 4:16 PM, aqua.77 said:

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

Expand  

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

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

  • Like 1
Link to comment
Share on other sites

  • 0
  On 11/7/2016 at 8:09 PM, Livitan said:

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

Expand  

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

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

 

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

  • Like 1
Link to comment
Share on other sites

  • 0
  On 11/8/2016 at 7:17 AM, wwt said:

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

Expand  

Нужно убрать интервал у 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
  On 11/8/2016 at 7:50 AM, Sensei said:

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

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

Expand  

Не понимаю почему в данном случае 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
  On 11/8/2016 at 6:31 PM, Sensei said:

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

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

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

Expand  

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

Link to comment
Share on other sites

  • 0
  On 11/8/2016 at 7:14 PM, Sensei said:

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

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

Expand  

Вот поэтому я и использую 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
  On 11/8/2016 at 7:45 PM, Sensei said:

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

ul a {
    vertical-align: top;
}

 

Expand  

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

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