Элементы внутри .track-container
представляют собой строки inline-уровня в том же поле строки .
Поэтому их вертикальное выравнивание задается Свойство vertical-align
:
Это свойство влияет на вертикальное позиционирование внутри строки строки ящиков, генерируемых элементом встроенного уровня.
По умолчанию его значение равно
baseline
:Совместите базовую линию с базой исходного поля. Если поле не имеет базовой линии, выровняйте край нижнего края с базовым уровнем родителя.
В этом случае все они имеют базовые линии, которые вычисляются в соответствии с
Базовый уровень «встроенного блока» - это базовый уровень его последнего строкового поля в нормальном потоке, если он не имеет ни строк строки в потоке, либо если его свойство «переполнения» имеет вычисленное значение, отличное от ' видимый ', и в этом случае базовая линия - это край нижнего края.
Следующее изображение разъясняет, что происходит (красная линия является базовой линией):
[/g13]
Следовательно, вы можете
- Изменить вертикальное выравнивание элементов, например к
top
,middle
илиbottom
.track-container > * { vertical-align: middle; }
.track-container { padding: 0; width: 600px; height: 200px; border: 1px solid black; list-style-type: none; margin-bottom: 10px; } .position-data { overflow: none; display: inline-block; width: 12.5%; height: 200px; margin: 0; padding: 0; border: 1px solid black; } .current-position, .position-movement { height: 100px; width: 100%; margin: 0; padding: 0; border: 1px solid black; } .album-artwork { display: inline-block; height: 200px; width: 20%; border: 1px solid black; } .track-info { display: inline-block; padding-left: 10px; height: 200px; border: 1px solid black; } .track-container > * { vertical-align: middle; }
12fdasfdsafdafdsa- Установите
overflow
элементов к чему-то другому, чемvisible
, напримерhidden
илиauto
, так что их базовая линия будет их краем крайнего края..track-container > * { overflow: hidden; }
.track-container { padding: 0; width: 600px; height: 200px; border: 1px solid black; list-style-type: none; margin-bottom: 10px; } .position-data { overflow: none; display: inline-block; width: 12.5%; height: 200px; margin: 0; padding: 0; border: 1px solid black; } .current-position, .position-movement { height: 100px; width: 100%; margin: 0; padding: 0; border: 1px solid black; } .album-artwork { display: inline-block; height: 200px; width: 20%; border: 1px solid black; } .track-info { display: inline-block; padding-left: 10px; height: 200px; border: 1px solid black; } .track-container > * { overflow: hidden; }
12fdasfdsafdafdsa- Убедитесь, что в элементах нет строки с потоком, поэтому их базовая линия будет их краем крайнего края. То есть содержимое должно быть из потока : элемент называется out of flow , если он плавает, абсолютно позиционируется или является корневым элементом. Элемент называется in-flow , если он не выходит за пределы потока. Так, например, вы можете поместить содержимое элементов в оболочку и стилизовать его с помощью
float: left
:.track-container > * > .wrapper { float: left; }
.track-container { padding: 0; width: 600px; height: 200px; border: 1px solid black; list-style-type: none; margin-bottom: 10px; } .position-data { overflow: none; display: inline-block; width: 12.5%; height: 200px; margin: 0; padding: 0; border: 1px solid black; } .current-position, .position-movement { height: 100px; width: 100%; margin: 0; padding: 0; border: 1px solid black; } .album-artwork { display: inline-block; height: 200px; width: 20%; border: 1px solid black; } .track-info { display: inline-block; padding-left: 10px; height: 200px; border: 1px solid black; } .track-container > * > .wrapper { float: left; }
12fdasfdsafdafdsa
Да, вы можете экспортировать статические функции, передавая им указатели. Это обычный способ реализации шаблона Factory в C, где вы можете скрыть реализации целого набора функций от модулей, которые их используют, и иметь FuncPtr_t GetFunction( enum whichFunctionIWant)
, который раздает их потребителям. , Вот сколько работает динамических линковок .
Как уже упоминалось, вы можете сделать это. Примером того, почему вы можете захотеть, является своего рода «драйвер». Вы можете передать обратно структуру, содержащую функции open, close, read и write, не делая общедоступными фактические функции.
Да, вы можете. Если вам нужно вызвать функцию, которая ожидает указатель на функцию в качестве обратного вызова, вы можете использовать static, чтобы символ функции не загрязнял глобальное пространство имен и не вызывал конфликты компоновщика. Наиболее часто используемый пример - это qsort:
struct Data { ... };
static int compareData(const void* a, const void* b) { /* cast to Data and compare */ }
...
qsort(array, count, sizeof(Data), &compareData);
Да, вы всегда можете попробовать сами и узнать:
file1.c
#include <stdio.h>
void call_hello(void (*fptr)(void));
static void hello(void) {
puts("hello");
}
int main(void)
{
void (*fptr)(void) = hello;
call_hello(fptr);
return 0;
}
file2.c
void call_hello(void (*fptr)(void))
{
fptr();
}