Если ширина содержимого неизвестна, вы можете использовать следующий метод. Предположим, что у нас есть эти два элемента:
.outer
- полная ширина .inner
- не установлена ширина (но может быть указана максимальная ширина) Предположим, что вычисленная ширина элементов равна 1000px и 300px соответственно. Выполните следующие действия:
.inner
внутри .center-helper
.center-helper
встроенным блоком; он становится того же размера, что и .inner
, делая его шириной 300 пикселей. .center-helper
на 50% относительно родителя; это помещает его влево на 500px wrt. внешний. .inner
50% слева относительно его родителя; это помещает его левое на -150px wrt. который означает, что его левый угол равен 500 - 150 = 350px.
body {
font: medium sans-serif;
}
.outer {
overflow: hidden;
background-color: papayawhip;
}
.center-helper {
display: inline-block;
position: relative;
left: 50%;
background-color: burlywood;
}
.inner {
display: inline-block;
position: relative;
left: -50%;
background-color: wheat;
}
<div class="outer">
<div class="center-helper">
<div class="inner">
<h1>A div with no defined width</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br>
Duis condimentum sem non turpis consectetur blandit.<br>
Donec dictum risus id orci ornare tempor.<br>
Proin pharetra augue a lorem elementum molestie.<br>
Nunc nec justo sit amet nisi tempor viverra sit amet a ipsum.</p>
</div>
</div>
</div>
] .outer {
overflow: hidden;
}
.center-helper {
float: left;
position: relative;
left: 50%;
}
.inner {
float: left;
position: relative;
left: -50%;
}
Функции имен символов, включая макросы и общие функции, но не методы. Чтобы однозначно идентифицировать метод, вам нужно знать общую функцию и все применимые модификаторы и специализированные функции.
Например, PRINT-OBJECT
называет общую функцию, но недостаточно для обозначения конкретных методов. Однако вы можете перебирать все методы, специализирующиеся на общей функции, и манипулировать их документацией: вместо передачи имени в DOCUMENTATION
вы предоставляете объект функции и T
. Чтобы сделать это переносимо, используйте close-mop :
(ql:quickload :closer-mop)
Например:
(lambda (generic-function)
(map 'list
(lambda (method) (documentation method t))
(closer-mop:generic-function-methods generic-function)))
=> #<FUNCTION (LAMBDA (GENERIC-FUNCTION)) {1001BBCD3B}>
Попробуем:
CL-USER> (funcall * #'documentation)
(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)
Упс.
CL-USER> (defmethod documentation ((test (eql :test)) _)
"Test documentation"
"Returned value")
...
CL-USER> (documentation :test t)
"Returned value"
CL-USER> (funcall *** #'documentation)
("Test documentation" NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)