diff --git a/src/textual/css/_style_properties.py b/src/textual/css/_style_properties.py index 6fba80edd..c8831e3a3 100644 --- a/src/textual/css/_style_properties.py +++ b/src/textual/css/_style_properties.py @@ -814,7 +814,7 @@ class FractionalProperty: if isinstance(value, float): float_value = value - elif isinstance(value, str): + elif isinstance(value, str) and value.endswith("%"): float_value = float(Scalar.parse(value).value) / 100 else: raise StyleTypeError( diff --git a/tests/css/test_styles.py b/tests/css/test_styles.py index 967f27f18..bb4417894 100644 --- a/tests/css/test_styles.py +++ b/tests/css/test_styles.py @@ -2,6 +2,7 @@ import pytest from rich.color import Color from rich.style import Style +from textual.css.errors import StyleTypeError from textual.css.styles import Styles, RenderStyles from textual.dom import DOMNode @@ -147,3 +148,9 @@ def test_opacity_set_then_get(set_value, expected): styles = RenderStyles(DOMNode(), Styles(), Styles()) styles.opacity = set_value assert styles.opacity == expected + + +def test_opacity_set_invalid_type_error(): + styles = RenderStyles(DOMNode(), Styles(), Styles()) + with pytest.raises(StyleTypeError): + styles.opacity = "invalid value"