Esta guía explica cómo personalizar visualmente el Flex Survey usando CSS, aunque aún no conozcas toda la estructura interna de SoluCX.
Todo aquí se basa exclusivamente en la estructura real del Flex Survey.
Dentro de la plataforma:
Estructura del Formulario > Estilo Personalizado
Este campo acepta CSS puro.
El código insertado se inyecta dentro del iframe del formulario.
Importante:
- El CSS afecta solo el contenido interno del formulario
- Para estilizar el contenedor externo (cuando se usa como widget), esto se hace vía código (options), no vía customStyle
Antes de estilizar, necesitas entender cómo está organizado el HTML.
.default-container-wrapper
Contenedor externo del formulario.
.default-container-wrapper {
display: flex;
flex-direction: column;
justify-content: space-between;
min-height: 100vh;
}
.default-container-content
Contenedor interno del contenido.
.default-container-content {
width: 100%;
padding-right: 15px;
padding-left: 15px;
}
Cada página tiene un ID dinámico:
#pageId-1#pageId-2#pageId-3
Puedes estilizar una página específica:
#pageId-1 {
background: #f5f5f5;
}
.column-wrapper — Contenedor externo de la columna
.column — Columna interna
Clases dinámicas de borde:
.rounded.rounded-left.rounded-right
Ejemplo:
.column-wrapper {
padding: 20px !important;
}
.rounded-left {
border-top-left-radius: 16px;
}
Cada pregunta tiene esta estructura:
.wrapper-form-question
├── .question
├── .description
└── .wrapperComponent
.wrapper-form-question
Clase principal de la pregunta:
.wrapper-form-question {
background: white;
border-radius: 12px;
padding: 20px !important;
}
Cuando es obligatoria e inválida:
.invalid-feedback-warning {
border: 1px solid red;
}
También recibe: .required-field
.question
Estilo por defecto:
.wrapper-form-question .question {
font-size: 20px;
font-weight: 900;
}
Ejemplo personalizado:
.wrapper-form-question .question {
font-size: 24px !important;
color: #1E3A8A !important;
font-weight: 700 !important;
}
.description
Por defecto:
.wrapper-form-question .description {
font-size: 16px;
font-weight: 700;
}
Personalización:
.wrapper-form-question .description {
font-size: 14px;
color: #6B7280;
}
.wrapperComponent
Donde se renderiza el input real.
.wrapperComponent {
margin-top: 10px;
}
A continuación se muestran los principales tipos de componentes disponibles:
- NumericButtonComponent
- EmojiComponent
- LikeDislikeComponent
- ButtonSelectComponent
- SimpleTextComponent
- NumbersComponent
- FreeTextComponent
- ImageComponent
- RadioButtonComponent
- ParentGroupComponent
- AutoCompleteComponent
- ParameterQuestionComponent
.button-select
.buttonSingleSelect
Ejemplo:
.button-select {
border-radius: 8px !important;
padding: 12px !important;
font-size: 16px;
}
.score-button-gap
Controla el espaciado:
.score-button-gap {
margin-right: 10px !important;
}
.form-footer
Contenedor del pie de página.
.form-footer {
background: #F9FAFB;
padding: 20px !important;
}
.steps-control-buttons
.send-form-button
Tamaño por defecto:
.form-footer .steps-control-buttons,
.form-footer .send-form-button {
min-width: 136px;
max-width: 136px;
}
Móvil por defecto:
@media (max-width: 575px) {
.form-footer .steps-control-buttons,
.form-footer .send-form-button {
width: 100%;
}
}
.form-card-body
.form-card-body {
border: 1px solid var(--secondary);
}
Puedes eliminarlo:
.form-card-body {
border: none !important;
}
Si estás usando SurveyCard:
.survey-card.survey-card-none.primary.secondary
Ejemplo:
.survey-card {
border-radius: 20px;
}
.survey-card .primary {
background: #111827;
color: white;
}
Flex usa Bootstrap 4.
Puedes usar:
.btn.form-control.row.col-*.d-flex.justify-content-*.align-items-*.p-*.m-*
Ejemplo:
.btn {
border-radius: 10px !important;
}
A continuación se muestran ejemplos completos que puedes copiar y pegar directamente en el campo Estructura del Formulario > Estilo Personalizado.
Aplica esquinas redondeadas a todos los elementos principales del formulario, creando una apariencia suave y moderna.
.form-card-body {
border-radius: 24px !important;
}
.wrapper-form-question {
border-radius: 16px !important;
}
.button-select {
border-radius: 50px !important;
}
.form-control {
border-radius: 12px !important;
}
.form-footer .send-form-button,
.form-footer .steps-control-buttons {
border-radius: 50px !important;
}
.column-wrapper .rounded {
border-radius: 20px !important;
}
Elimina todo el redondeo para un aspecto más formal e institucional.
.form-card-body {
border-radius: 0 !important;
}
.wrapper-form-question {
border-radius: 0 !important;
}
.button-select {
border-radius: 0 !important;
}
.form-control {
border-radius: 0 !important;
}
.form-footer .send-form-button,
.form-footer .steps-control-buttons {
border-radius: 0 !important;
}
Transforma el formulario en un tema oscuro elegante.
.default-container-wrapper {
background: #0b1220 !important;
}
.form-card-body {
background: #111827 !important;
border: 1px solid #1f2937 !important;
border-radius: 16px !important;
}
.wrapper-form-question {
background: #111827 !important;
border: 1px solid #1f2937 !important;
border-radius: 12px !important;
}
.wrapper-form-question .question {
color: #f8fafc !important;
}
.wrapper-form-question .description {
color: #cbd5e1 !important;
}
.button-select {
background: #1f2937 !important;
border: 1px solid #334155 !important;
color: #e2e8f0 !important;
border-radius: 10px !important;
transition: all 0.15s ease !important;
}
.button-select:hover {
background: #2563eb !important;
border-color: #2563eb !important;
color: #ffffff !important;
}
.button-select:active {
background: #1d4ed8 !important;
border-color: #1d4ed8 !important;
color: #ffffff !important;
}
.form-control {
background: #1f2937 !important;
border: 1px solid #334155 !important;
color: #f8fafc !important;
border-radius: 10px !important;
}
.form-control:focus {
border-color: #2563eb !important;
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.25) !important;
}
.form-footer {
background: transparent !important;
}
.form-footer .send-form-button {
background: #2563eb !important;
border: none !important;
border-radius: 10px !important;
color: #ffffff !important;
}
.form-footer .send-form-button:hover {
background: #1d4ed8 !important;
}
.form-footer .send-form-button:active {
background: #1e40af !important;
}
Interfaz ligera, sin bordes, con mucho espacio en blanco.
.default-container-wrapper {
background: #ffffff !important;
}
.form-card-body {
border: none !important;
box-shadow: none !important;
background: #ffffff !important;
padding: 40px !important;
}
.wrapper-form-question {
background: transparent !important;
border-radius: 0 !important;
padding: 20px 0 !important;
border-bottom: 1px solid #e5e7eb !important;
box-shadow: none !important;
}
.wrapper-form-question .question {
font-size: 18px !important;
font-weight: 600 !important;
color: #111827 !important;
}
.wrapper-form-question .description {
font-size: 14px !important;
color: #9ca3af !important;
}
.button-select {
border: 1px solid #e5e7eb !important;
background: transparent !important;
border-radius: 8px !important;
font-size: 14px !important;
}
.button-select:hover {
background: #111827 !important;
color: #ffffff !important;
border-color: #111827 !important;
}
.form-control {
border: none !important;
border-bottom: 2px solid #e5e7eb !important;
border-radius: 0 !important;
padding: 12px 0 !important;
background: transparent !important;
}
.form-control:focus {
border-bottom-color: #111827 !important;
box-shadow: none !important;
}
.form-footer .send-form-button {
background: #111827 !important;
border: none !important;
border-radius: 8px !important;
font-weight: 500 !important;
}
Estilo inspirado en Material Design con sombras y elevación de cards.
.default-container-wrapper {
background: #ecfdf5 !important;
}
.form-card-body {
background: #ffffff !important;
border: 1px solid #a7f3d0 !important;
border-radius: 12px !important;
box-shadow: 0 10px 30px rgba(15, 23, 42, 0.08) !important;
padding: 32px !important;
}
.wrapper-form-question {
background: #ffffff !important;
border: 1px solid #d1fae5 !important;
border-radius: 12px !important;
padding: 24px !important;
margin-bottom: 16px !important;
box-shadow: 0 4px 12px rgba(16, 185, 129, 0.12) !important;
transition: transform 0.15s ease, box-shadow 0.15s ease !important;
}
.wrapper-form-question:hover {
transform: translateY(-1px);
box-shadow: 0 10px 24px rgba(16, 185, 129, 0.16) !important;
}
.wrapper-form-question .question {
font-size: 16px !important;
font-weight: 600 !important;
color: #064e3b !important;
letter-spacing: 0.15px !important;
}
.wrapper-form-question .description {
font-size: 14px !important;
color: #065f46 !important;
}
.button-select {
border-radius: 10px !important;
border: 1px solid #6ee7b7 !important;
background: #d1fae5 !important;
color: #065f46 !important;
font-size: 14px !important;
transition: all 0.15s ease !important;
}
.button-select:hover {
background: #10b981 !important;
color: #ffffff !important;
border-color: #10b981 !important;
box-shadow: 0 6px 18px rgba(16, 185, 129, 0.28) !important;
}
.button-select:active {
background: #059669 !important;
border-color: #059669 !important;
color: #ffffff !important;
}
.form-control {
border-radius: 10px !important;
border: 1px solid #a7f3d0 !important;
}
.form-control:focus {
border-color: #10b981 !important;
box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.22) !important;
}
.form-footer .send-form-button {
background: #10b981 !important;
border: none !important;
border-radius: 10px !important;
font-weight: 600 !important;
text-transform: uppercase !important;
letter-spacing: 0.5px !important;
box-shadow: 0 10px 22px rgba(16, 185, 129, 0.28) !important;
}
.form-footer .send-form-button:hover {
background: #059669 !important;
}
.form-footer .send-form-button:active {
background: #047857 !important;
}
Fondo en gradiente con colores vibrantes para marcas que quieren destacar.
.default-container-wrapper {
background: linear-gradient(135deg, #4f46e5, #334155) !important;
}
.form-card-body {
background: rgba(255, 255, 255, 0.96) !important;
border: 1px solid rgba(203, 213, 225, 0.7) !important;
border-radius: 20px !important;
box-shadow: 0 24px 60px rgba(15, 23, 42, 0.18) !important;
padding: 40px !important;
}
.wrapper-form-question {
background: #ffffff !important;
border-radius: 16px !important;
border: 1px solid #e2e8f0 !important;
padding: 24px !important;
box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08) !important;
}
.wrapper-form-question .question {
font-size: 20px !important;
font-weight: 700 !important;
color: #0f172a !important;
}
.wrapper-form-question .description {
color: #475569 !important;
}
.button-select {
border-radius: 12px !important;
border: 1px solid #c7d2fe !important;
background: #eef2ff !important;
color: #1e293b !important;
font-weight: 600 !important;
transition: all 0.2s ease !important;
}
.button-select:hover {
background: #4f46e5 !important;
color: #ffffff !important;
border-color: #4f46e5 !important;
box-shadow: 0 10px 22px rgba(79, 70, 229, 0.28) !important;
}
.button-select:active {
background: #4338ca !important;
color: #ffffff !important;
border-color: #4338ca !important;
}
.form-control {
border-radius: 12px !important;
border: 1px solid #cbd5e1 !important;
}
.form-control:focus {
border-color: #4f46e5 !important;
box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.22) !important;
}
.form-footer .send-form-button {
background: #4f46e5 !important;
border: none !important;
border-radius: 12px !important;
font-weight: 700 !important;
box-shadow: 0 14px 28px rgba(79, 70, 229, 0.28) !important;
}
.form-footer .send-form-button:hover {
background: #4338ca !important;
}
.form-footer .send-form-button:active {
background: #3730a3 !important;
}
Aumenta fuentes y espaciado para mejor legibilidad y accesibilidad.
.wrapper-form-question .question {
font-size: 28px !important;
font-weight: 800 !important;
line-height: 1.3 !important;
color: #1e293b !important;
margin-bottom: 12px !important;
}
.wrapper-form-question .description {
font-size: 18px !important;
font-weight: 400 !important;
line-height: 1.6 !important;
color: #475569 !important;
margin-bottom: 20px !important;
}
.button-select {
font-size: 18px !important;
padding: 16px 24px !important;
border-radius: 12px !important;
min-height: 56px !important;
}
.form-control {
font-size: 18px !important;
padding: 16px !important;
border-radius: 12px !important;
min-height: 56px !important;
}
.form-footer .send-form-button {
font-size: 18px !important;
padding: 16px 32px !important;
border-radius: 12px !important;
min-height: 56px !important;
}
.wrapper-form-question {
padding: 32px !important;
margin-bottom: 24px !important;
}
Agrega un borde lateral colorido a los cards de preguntas para énfasis visual.
.wrapper-form-question {
background: #ffffff !important;
border-radius: 0 12px 12px 0 !important;
border-left: 4px solid #2563eb !important;
padding: 24px !important;
box-shadow: 0 10px 26px rgba(15, 23, 42, 0.08) !important;
}
.wrapper-form-question .question {
font-size: 18px !important;
font-weight: 700 !important;
color: #0f172a !important;
}
.wrapper-form-question .description {
font-size: 14px !important;
color: #475569 !important;
}
.form-card-body {
border: none !important;
border-radius: 16px !important;
background: #f1f5f9 !important;
}
.button-select {
border-radius: 10px !important;
border: 1px solid #cbd5e1 !important;
background: #ffffff !important;
color: #0f172a !important;
transition: all 0.15s ease !important;
}
.button-select:hover {
background: #2563eb !important;
color: #ffffff !important;
border-color: #2563eb !important;
}
.button-select:active {
background: #1d4ed8 !important;
color: #ffffff !important;
border-color: #1d4ed8 !important;
}
.form-footer .send-form-button {
background: #2563eb !important;
border: none !important;
border-radius: 10px !important;
color: #ffffff !important;
}
.form-footer .send-form-button:hover {
background: #1d4ed8 !important;
}
.form-footer .send-form-button:active {
background: #1e40af !important;
}
.invalid-feedback-warning {
border-left: 4px solid #dc2626 !important;
border-color: #dc2626 !important;
background: #fef2f2 !important;
}
Inspecciona los elementos para confirmar las clases.
El CSS se inyecta en el iframe y puede necesitar sobrescribir reglas existentes.
El formulario tiene comportamiento responsivo.
| Elemento | Clase |
|---|
| Contenedor de pregunta | .wrapper-form-question |
| Título | .question |
| Descripción | .description |
| Botón de selección | .button-select |
| Botones de puntuación | .score-button-gap |
| Pie de página | .form-footer |
| Botón enviar | .send-form-button |
| Columna | .column-wrapper |
| Página | #pageId-{n} |