Чтобы удалить зазор под изображением, вы можете:
vertical-align: bottom;
vertical-align: top;
или vertical-align: middle;
display:block;
См. следующий код для живой демонстрации:
#vAlign img {
vertical-align :bottom;
}
#block img{
display:block;
}
div {border: 1px solid red;width:100px;}
img {width:100px;}
No fix:
With vertical-align:bottom; on image:
With display:block; on image:
Разрыв или дополнительное пространство под изображением не является ошибкой или проблемой, это поведение по умолчанию. Основная причина заключается в том, что изображения заменяются элементами ( см. MDN и W3C ). Это позволяет им «действовать как изображение» и иметь собственные собственные размеры, соотношение сторон ... Браузеры вычисляют свое свойство отображения inline
, но они придают им особое поведение, которое приближает их к элементам inline-block
(так как вы
Это также означает, что:
[...] когда изображения используются во встроенном контексте форматирования с выравниванием по вертикали: базовая линия, нижняя часть изображения будет отображаться на базовой линии контейнера. ( source: MDN , focus mine )
blockquote>Поскольку браузеры по умолчанию вычисляют свойство vertical-align для базовой линии, это значение по умолчанию поведение. На следующем изображении показано, где базовая линия находится по тексту:
[/g15]
Элементы, выровненные по базовой линии, должны содержать место для дескрипторов которые простираются ниже базовой линии (например,
j, p, g ...
), как вы можете видеть на приведенном выше изображении. В этой конфигурации нижняя часть изображения выравнивается по базовой линии, как вы можете видеть в этом примере:
div{border:1px solid red;} img{width:100px;height:auto;}
jpq are letters with descenderВот почему поведение по умолчанию тега
создает пробел в нижней части его контейнера и почему изменение свойства вертикального выравнивания или свойства отображения удаляет его, как в следующей демонстрации:
div {width: 100px;border: 1px solid red;} img {width: 100px;height: auto;} .block img{ display:block; } .bottom img{ vertical-align:bottom; }
Default:
With display:block;
With vertical-align:bottom;
У Вас есть три списка здесь - чем точно Вы пытающийся заказать?
Ваш бросок является неправильным также - результат будет IEnumerable<X>
, где X
анонимный тип с три T
с в.
, Если идея действительно к , конкатенируют три списка и затем вид, Вы хотите:
return one.Concat(two)
.Concat(three)
.OrderByDescending(x => x.GetTime())
.ToList();
Вот то, как я сделал бы это:
public static List<T> Combine<T, TKey>
(
Func<T, TKey> orderingFunction,
params IEnumerable<T>[] theParams
)
where TKey : IComparable
{
return theParams
.SelectMany(x => x)
.OrderBy(orderingFunction)
.ToList();
}
Вот некоторый тестовый код:
public static void Test1()
{
List<int> a = new List<int>() { 1, 2, 3 };
List<int> b = new List<int>() { 3, 2, 1 };
List<int> c = CombineLists.Combine(i => i, a, b);
c.ForEach(i => Console.WriteLine(i));
}
Вот история:
public static List<T> Combine<T, TKey>
(
Func<T, TKey> orderingFunction,
params IEnumerable<T>[] theParams
)
where TKey : IComparable
Эта подпись объявляет метод, который берет два параметра типа, некоторую функцию упорядочивания и набор наборов. Заметьте, что типы T и TKey не определяются явно в проверочном вызове. Компилятор имеет немного загадки для выяснения, каковы эти типы. Сначала это осматривает IEnumerables, который это было дано (a и b) и обнаруживает, что они - IEnumerable интервала Ага, T должен быть интервалом Тогда, это осматривает функцию упорядочивания и видит, что возвращает тот же тип, что это передается. Ага, TKey должен быть международный
, где довольно забавно. OrderBy должен проверить (во время компиляции), что TKey является IComparable. Это только проверяет во времени выполнения, таким образом, мы добираемся, чтобы сделать, время компиляции регистрируется в нашем коде.
параметрические усилители берут столько параметров, сколько Вам нравится, и относится к ним создать массив. Кто хочет быть ограниченным тремя списками?
return theParams
.SelectMany(x => x)
.OrderBy(orderingFunction)
.ToList();
SelectMany распаковывает набор наборов. Это - способ сгладить один уровень иерархии. OrderBy берет некоторую функцию, что проекты каждый элемент к упорядочиваемому значению, и заказывают элементы согласно тем значениям. ToList перечисляет запрос и возвращает список. Никакие неожиданности там.